All work

Case 02of 08

Halden Software for people wearing gloves

Thirty-four engineers servicing industrial pumps, filling in paper job sheets that someone re-keyed every evening. Invoices ran eleven days behind the work. We built the tool that closed the gap — and learned in week five that it had to work with no signal at all.

Custom softwareCustom softwareOffline-firstBuild · 11 weeks2025
ClientHalden Industrial
34 engineers, 3 depots
EngagementDiscovery + Build
Duration1 week scope
11 weeks build
StackReact PWA, IndexedDB,
Node, Postgres
OutcomeInvoice lag 11 days → 2

Dispatch board — sync state is a first-class piece of informationFig. 01

01 — Chapter

The problem

Every job produced a triplicate paper sheet. The engineer filled it in, the customer signed it, one copy stayed in the van, and an administrator typed the other into two systems that evening — once for invoicing, once for parts.

The cost was not the typing. It was the eleven-day lag between finishing work and billing for it, and a parts inventory wrong often enough that engineers had started keeping private stashes in their vans. One engineer had £3,400 of seals behind his passenger seat, and he was right to.

  • ~20 hours a week of re-keying across three depots
  • Parts write-offs running at 9% of stock value
  • Signed sheets lost or illegible on roughly one job in twenty
  • No way to see what an engineer had done until the next day
  • Median 11 days from signature to invoice; worst case 34

Before and after

The job sheet
job sheet · triplicate
Signature
Before · paper, re-keyed that evening
halden · job 4-118
DONE
QUEUED
Sign & close
After · 56px targets, photos per line, offline
0

Hours a week spent re-keying job sheets. The administrator who used to do it now runs the parts function, which is the job she actually wanted.

02 — Chapter

Designed for the van

This tool is used standing up, outdoors, in gloves, often in bright sun, on a phone that is already dirty. That constraint set the whole interface: 56px minimum targets, no dropdowns, no free text where a choice would do, and contrast well past AA.

We shadowed four engineers for a day each before drawing anything. The most useful thing we learned was that the job sheet is filled in twice — roughly while working, then properly before the customer signs. Every previous attempt at this software had modelled one pass, which is why none of them were used.

  • 56px targets, tested with work gloves on, not approximated
  • Draft and confirm as two distinct states, because that is the real behaviour
  • Photo capture attached to the line item, not to the job
  • Parts added by scanning, with a four-tap manual fallback
  • Signature captured on the engineer’s own phone, in portrait

A job, end to end

From arrival to invoice
1ArriveJob opens from the day list. Everything needed is already on the device, downloaded overnight on depot wifi.Offline
2Work the jobRough capture while working: photos per line item, parts scanned as they come off the van.Offline
3Confirm and signThe second pass. Engineer reviews, customer signs on the phone, copy sent by SMS immediately or when signal returns.Offline
4Sync and invoiceQueue drains when signal returns. A draft invoice appears for a human to approve — never sent automatically.
Days from signature to invoiceMedian, by month, across three depots PaperHalden app
11 daysJan
10.5Feb
9 daysMar
5 daysApr
3 daysMay
2 daysJun

March is the partial month: the first depot moved across on the 14th. April onwards is all three depots. Median rather than mean, because two disputed jobs in May would otherwise have hidden the change.

03 — Chapter

The rebuild

Version one assumed connectivity. It was wrong. Pump rooms are underground, plant rooms are Faraday cages, and a third of jobs had no usable signal at any point.

In week five we stopped feature work and rebuilt the data layer offline-first: every action written locally, an explicit queue the engineer can see, and conflict resolution that never silently discards what someone typed. Sync stopped being plumbing and became a piece of information on the screen — which is why engineers trust it.

  • Full offline capture, including photos, with a visible queue
  • Deterministic sync, idempotent on the server, no lost writes
  • Conflicts surfaced to a human rather than resolved by timestamp
  • Invoice drafted automatically from the signed sheet, reviewed by a person
  • Tested by pulling the SIM out mid-job, repeatedly, on real devices

Sync, made visible

States and constraints
Captured Queued locally Syncing Confirmed Conflict · a human decides
56pxMinimum touch target, set by testing with the gloves engineers actually wear, not by a guideline.
7:1Contrast on every primary control — AA is a reading standard, not a sunlight standard.
0Free-text fields on the job sheet. Every entry is a choice, a scan, a photo or a signature.
4 tapsManual fallback when a barcode will not scan, because it often will not.
14 daysLocal retention of a synced job, so a van can be pulled off the road and still be audited.
NeverSilent discard. A conflict always surfaces to a person with both versions shown.

Results

Each with its method
11 → 2Days to invoiceMedian from signature to invoice issued
34/34Engineers adoptedWithin three weeks, with no mandate from management
41%Parts write-off cutVan stock finally matched the system
1/3Jobs with no signalWhich is why the offline rebuild was not optional
They stopped building and came out in the van with us. The version after that was the one the lads actually used, and nobody had to be told to use it.
Elin MarchettiOperations lead, Halden Industrial

LogWeek by week

The build log

Twelve weeks, including the three we spent rebuilding something we had already shipped.

Week 0

Paid discovery at the Rotherham depot. Two days of ride-alongs, every paper field catalogued, the accounting integration documented. Scope and fixed price agreed.

Weeks 1–3

Job sheet designed and built. Draft-and-confirm modelled from the ride-alongs. First version on eight engineers’ phones by the end of week three.

Week 4

Reality. Engineers reported jobs ‘not saving’. They were saving, then being lost when the app reloaded with no signal. We went back out in the vans.

Weeks 5–7

Offline rebuild. Local-first writes, visible queue, idempotent server, human conflict resolution. Feature work stopped entirely. We carried the cost.

Week 8

Parts and scanning. Van-level stock, reconciliation against the depot, and the four-tap manual fallback for the barcodes that never scan.

Week 9

Dispatch board and invoicing hook. Draft invoices into their accounting system, always reviewed by a person before sending.

Week 10

Rollout, one depot a week. Two days on site per depot, standing in the yard at 7am when the vans went out.

Week 11

Handover: source, runbook, on-call playbook. Two weeks of shadowed support where their developer took the calls and we listened.

What shipped

Six deliverables
01Engineer job sheetOffline-first, glove-friendly, draft and confirm, photo capture per line.
02Dispatch boardLive job state across three depots with sync status made visible.
03Parts and stockScan-to-add, van-level stock, reconciliation against the depot.
04Invoicing hookDraft invoice generated from the signed sheet into their accounting system.
05Offline sync layerVisible queue, idempotent server writes, human conflict resolution.
06HandoverSource, runbook, an on-call playbook and two weeks of shadowed support.
The part a portfolio leaves out

What we would do differently

We should have gone out in the vans in week one, not week five. The offline rebuild cost roughly three weeks that a single day of field observation would have saved, and we carried that cost rather than the client. It is now a fixed part of discovery: if the software is used somewhere we have not stood, we have not scoped it.

Who did it

Credits
max

Product design, front end, offline data layer, rollout. One person, eleven weeks.

Collaborator

Back end and accounting integration. Same developer as Meridian, three days a week from week six.

Halden

Operations lead as decision-maker, four engineers who gave up their days for ride-alongs, one depot manager who ran the pilot.

Two build slots openNext start: March

Tell us what you’re building and we’ll scope it

Two working daysA reply from the person who would do the work
One paid weekDiscovery, written scope, fixed price
Yours either wayThe scope document, whether or not you continue
Start a projectStart a project