All work

Case 08of 08

Parcelle One app, one thumb, a whole shift of battery

A hundred and forty same-day couriers running their working lives through a consumer maps app and a WhatsApp group, photographing parcels into a chat and hoping. Nine per cent of jobs ended in a dispute, and every phone was dead by two in the afternoon.

iOS · AndroidiOSAndroidField app2022
ClientParcelle
140 riders, 3 cities
EngagementDiscovery + Build
Duration1 week scope
10 weeks build
StackReact Native, native
location modules
OutcomeDisputes 9% → 1.4%
parcelleJob 4417
2.4 kmPickup · Ellis Street
Battery · 6h in71%
Accept · £9.40
Adaptive tracking1 ping / 40s moving
Proof of delivery
Photo · doorstep14:06
Left with neighbourNo. 14
GPS · 6 m accuracyAttached
Complete · next job

Offer and proof of delivery — designed to be used without stoppingFig. 01

01 — Chapter

The problem

A Parcelle rider ran three things at once: a maps app for navigation, a WhatsApp group for dispatch, and a camera roll as the permanent record of every delivery they had ever made.

Nine per cent of jobs ended in a dispute, and almost all of those disputes came down to a photograph that had scrolled out of a group chat. Meanwhile the combination of continuous navigation and a chat app flattened a phone in about four hours of a ten-hour shift.

  • 9% of jobs disputed, nearly all over missing proof of delivery
  • Phones dead after ~4 hours; riders carrying battery packs at their own cost
  • 42 second median to accept a job, because accepting meant reading a chat
  • Dispatch reconstructed each day by hand from three sources
  • No record that survived a rider leaving the company

Before and after

The rider’s phone
maps app + group chat
Photo → group chat → hope
Before · two apps, one thumb, 4h of battery
parcelle rider
Accept · £9.40
One target · 96 px
After · one app, one target, 11h of battery
4h → 11h

Battery life across a shift, after we stopped doing the thing that made our own dispatch map look impressive.

02 — Chapter

No chat, on purpose

The obvious build is an app with messaging in it. We argued against it and it was the most contested decision of the project.

A rider reading a chat message is a rider reading a phone in traffic. Free text also cannot be reported on, disputed or audited. We replaced the entire conversation with three structured states — collected, delayed, delivered — plus a call button for the genuine exceptions. Dispatch lost nuance and gained a record; riders stopped typing at junctions.

  • Three structured states replacing an open chat channel
  • One call button for real exceptions, logged against the job
  • 96px accept target, reachable one-handed from a bar mount
  • Offer shows fee and distance only — the two things the decision needs
  • Proof of delivery bundles photo, recipient state and GPS accuracy together

Accepting a job

Forty-two seconds became nine
1Offer arrivesOne card, fee and distance, on top of whatever is on screen. No notification to open, no list to scan.0s
2DecideTwo numbers are the whole decision. Everything else — addresses, notes, contact — appears after acceptance.~6s
3AcceptA 96px target reachable with one thumb from a bar mount, with the fee written on the button itself.9s median
4Old flowRead the group chat, find the job, type to claim it, wait to see if someone else claimed it first.
Battery remaining across a shiftMedian across 140 riders, 10-hour shift Continuous 1 HzAdaptive
62 / 88%2h
18 / 76%4h
dead / 62%6h
dead / 51%8h
dead / 38%10h

Median across 140 riders on their own handsets, which range from a four-year-old budget Android to a current iPhone — we did not normalise for device, because riders do not get to. The continuous-tracking figures are from our own first build, not from the previous setup, so this compares our mistake with our fix.

03 — Chapter

The battery problem

Our first build tracked location continuously at one hertz, because that is what made the dispatch map look impressive. It was also the single worst thing we could have done to a rider’s day.

Riders told us in week seven. We had not measured it, which is the failure. Adaptive sampling — every 40 seconds while moving, every 5 minutes while stationary, suspended entirely between jobs — took a shift from 4 hours to 11 and made no measurable difference to dispatch.

  • Adaptive location sampling replacing continuous 1 Hz tracking
  • Tracking suspended entirely between jobs, not merely reduced
  • Battery drain per shift now a tracked metric in every release
  • Dispatch accuracy unchanged, which we measured before shipping the change
  • Dark interface by default, because it is cheaper on OLED and easier in sun

A shift

Five moments that had to work without stopping
07:40 Shift startApp opens on the day’s first offer. No login, no dashboard, no splash — the rider is already on the bike.Battery 100%
07:41 AcceptOne 96px target with the fee on it. Nine seconds median, down from forty-two, because the decision is fee and distance and nothing else.9s median
08:12 CollectedStructured state, not a chat message. Dispatch sees it without anyone typing, and the rider never takes a hand off the bars to explain.1 tap
08:38 DeliveredPhoto, recipient state and GPS accuracy captured together and attached to the job. This is the artefact that ends a dispute.3 taps
18:20 Shift end · 31 jobsAdaptive tracking pings every 40 seconds while moving and every 5 minutes while stationary, which is where the seven extra hours of battery came from.Battery 38%

Results

Each with its method
9% → 1.4%Disputed jobsProof of delivery attached to the job, not a chat
42s → 9sMedian time to acceptFee and distance, one target
4h → 11hBattery per shiftMedian across 140 riders on their own handsets
+18ppRider retention at six monthsAgainst the same cohort length the year before
They took the chat out and the riders thanked us. I did not expect that, and I argued against it for a month.
Yusuf AdeyemiHead of operations, Parcelle

LogWeek by week

The build log

Eleven weeks, including the week we spent undoing something we were proud of.

Week 0

Paid discovery. Two days riding pillion and one evening in the dispatch room. Every dispute from the previous quarter read and categorised.

Weeks 1–3

Offer and accept flow. Tested on a stationary bike with a bar mount and gloves before it went near a road.

Weeks 4–5

Proof of delivery. Photo, recipient state and GPS accuracy bundled as one artefact, because separately they settle nothing.

Week 6

Structured states replacing chat. Dispatch hated it for a fortnight, then stopped mentioning it, which is how that usually goes.

Week 7

Riders reported dead phones. Our continuous tracking was the cause. Feature work stopped; battery became a measured metric that day.

Week 8

Adaptive sampling built and validated against dispatch accuracy before shipping, so we were not trading one problem for another.

Weeks 9–10

Rollout city by city, forty riders at a time, each with a week of overlap where the old group chat still worked.

After

Battery drain is now on the release checklist for every field app we build, which is the only good thing to come out of week seven.

What shipped

Six deliverables
01Rider appiOS and Android, one-handed, bar-mount usable, dark by default.
02Proof of deliveryPhoto, recipient state and GPS accuracy as a single artefact attached to the job.
03Structured statesCollected, delayed, delivered — plus a call button for real exceptions.
04Adaptive trackingBattery-aware location sampling, suspended entirely between jobs.
05Dispatch viewLive job state across three cities, reconstructed from events rather than by hand.
06HandoverSource, release checklist including battery, and two weeks of shadowed support.
The part a portfolio leaves out

What we would do differently

We shipped continuous location tracking because it made our own dispatch map look good in a demo, and we did not measure what it cost the people holding the phones. Riders told us in week seven; we should have known in week two. Battery drain per shift is now measured from the first build of any field app, alongside crash rate, and we would rather have a less impressive map. The fix was a week. Not noticing for six is the part that still bothers us.

Who did it

Credits
max

Product design, React Native, proof-of-delivery model, rollout. One person, ten weeks.

Collaborator

Native location modules for iOS and Android, including the adaptive sampling that saved the project. Three weeks.

Parcelle

Head of operations who argued against removing chat and then defended it publicly; eleven riders who tested every build on real shifts and were paid for the time.

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