All work
Case study — Delivery

A safer order-accept flow for couriers

Reviving a shelved feature, proving it with real usability testing, and shipping the version that actually works — for couriers reading a countdown at 60 km/h.

Role
Product Designer
Team
3 people
Timeline
1 month
Year
2024

For two years, couriers used the same flow to accept orders. Then someone worked out what it was quietly costing.

The problem

10–14% of accepted orders were accepted by accident, behind about 4% of all cancellations.

What I did

Benchmarked five delivery apps, ran two rounds of usability testing, and redesigned onboarding and the order screen.

The outcome

Two failures caught before launch, including 13 of 13 testers misreading the onboarding. Built to cut about 4% of cancellations.

The context

Mrsool’s couriers accept orders on the move — a map, a countdown, a tap. It’s been the same pattern for two years, and mostly, it works.

Between 10–14% of accepted orders were being accepted by accident.

Not because couriers didn’t want the work — because the accept flow made it too easy to accept without meaning to. Every one of those mistaken accepts had to be undone, and that undo is what a cancellation is. It was quietly responsible for around 4% of all order cancellations on the platform.

10–14%of accepted orders, accepted by accident
~4%of all cancellations traced back to them
5delivery apps benchmarked
13 of 13testers misread the first onboarding
The complication

A fix already existed. It just never shipped.

Before this project started, another designer had already identified the problem and designed a solution: replace auto-accept with auto-reject — orders reject themselves by default unless the courier actively accepts. It was designed. It was built. It never launched — there wasn’t enough testing behind it to trust it in production.

That’s where this project actually starts. Not with a blank page, but with someone else’s unproven work and a month to either prove it or fix it.

Two kinds of validation

The brief split cleanly into two questions: was auto-reject actually the right call, and if so, was this design of it good enough to ship?

Problem validation — benchmarking and risk

Five major delivery platforms — DoorDash, Talabat, Hungerstation, Glovo, Deliveroo — were checked directly against their own apps and public walkthroughs, not assumed. Every one of them had already moved to some form of auto-reject. That answered the “should we” question. What varied was the “how”: rejection limits per shift, countdown timers from 30 to 45 seconds, progress bars versus static banners, automatic reassignment to another courier. The shape of the solution wasn’t in question anymore — the details were.

Solution validation — usability testing on the existing design

The shelved design still had to earn its place. It was run through structured usability testing and evaluated directly against Nielsen’s heuristics — recognition over recall, visibility of system status, consistency and standards — not as a checklist exercise, but because the test sessions kept surfacing exactly the failures those heuristics predict.

Primary research — riding along

To understand the courier’s actual moment of decision, the courier journey was mapped end to end, and orders were delivered personally to feel where attention actually goes when a countdown is running and a map is moving. That firsthand pass is what shaped the onboarding strategy that followed — informed by the forgetting curve: tell someone once, and most of it is gone within a day. A single announcement was never going to be enough.

Courier journey mapping and process notes
Mapping the courier’s actual journey — before, during, and after receiving an order.

What usability testing actually found

This is the part that mattered most. Two rounds of testing, two specific, quantified failures — not vague “users were confused” notes, but exact counts of exactly what went wrong.

Three onboarding iterations, from a modal users mistook for a real order to the final clear design
Iteration 1 → 2 → Final — each change driven by a specific usability finding, not a hunch.

13 of 13 test participants tapped “Accept” on the onboarding message — because it looked like a real order.

The first version explained the new system inside a card that visually matched the real order-accept screen. Every single tester read it as an actual order waiting to be accepted, not as a notice about a policy change. The second attempt tried an Arabic headline reading roughly “cancel the auto-accept system” — and every tester read that as the assignment system itself being switched off, the opposite of what was true. The final design broke visual similarity to a real order entirely and stated the actual consequence in plain language, in red: orders will now be rejected automatically if not accepted in time.

Order-details screen iterations, including a color affordance that made testers try to swipe instead of tap
The button itself changed too — same-color foreground and background led testers to swipe instead of tap.

The order-details screen had its own quiet failure. An early RTL version placed the countdown inside a green button on a green-tinted background — and testers, reading the matching colors as a slide track rather than a button, tried to swipe left instead of tapping accept. The fix wasn’t a redesign, just a correction: move the countdown text back above the button, where couriers already expected to find it from years of the old pattern, and let the button just be a button.

Building trust in layers, not one message

Because a single announcement doesn’t survive the forgetting curve, the rollout was split across five touchpoints instead of one:

  1. Push notification. A lock-screen announcement — first contact, low friction, easy to miss on purpose.
  2. Main onboarding modal. The full explanation, shown once, redesigned after the two rounds of testing above.
  3. A persistent static banner. A minimized reminder shown across every screen — the fact stays visible even after the modal is dismissed and forgotten.
  4. Reinforcement inside the order screen itself. At 5 seconds left, the countdown’s copy, color, and a device vibration escalate together — a second sensory channel for the moment attention is most likely to be on the road, not the screen.
  5. A dedicated timeout screen. If the countdown wins, the courier isn’t left guessing why an order disappeared — they’re told plainly, with a warning about what repeated rejections mean for their account.

What this proved

Worth being precise about this: the ~4% figure is the size of the problem this was designed to fix, validated through structured usability testing — it’s the target the design was built against, not yet a confirmed measured result from production. That’s a detail worth getting right rather than rounding up.

The more interesting proof here isn’t a number — it’s what happened before any screen got redesigned. A shelved feature is usually shelved for a reason, and the honest version of this project is that the reason was real: it hadn’t been tested enough to trust. Two specific rounds of testing found two specific failures that would have shipped straight into production if the original timeline had held. Finding “13 of 13 users got this wrong” before launch, instead of after, is the entire value of the month this took.

Team on this project:

Mahmoud Abdrabo — Product Designer Khalid Alharthi — Senior Product Manager Bady Ammar — Courier PM Lead