Delivery in Mexico
DiDi Food Courier App: Promo bundle & Substitutions Workflows
DiDi Food Courier App: Promo bundle & Substitutions Workflows
DiDi Food Courier App: Promo bundle & Substitutions Workflows
Delivery in Mexico
DiDi Food Courier App:
Promo bundle & Substitutions
Timeline
4 months · 2024
User
DiDi Food couriers fulfilling retail orders in Mexico
Role
UX Designer
UX Researcher
Illustration Design
Team
2PM
Ops specialist
3 Engineers
1 Data Analyst
Overview
I closed a critical gap in DiDi Food’s courier app for retail picking in Mexico. The app supported standard picking flows, but not the complex exceptions of real-store fulfillment.
I designed promo bundle validation and pre-checkout substitution to resolve these cases before checkout and keep orders moving.
I closed a critical gap in DiDi Food’s courier app for retail picking in Mexico. The app supported standard picking flows, but not the complex exceptions of real-store fulfillment.
I designed promo bundle validation and pre-checkout substitution to resolve these cases before checkout and keep orders moving.
Result
Streamlined the end-to-end ecosystem, optimizing the workflow from item picking to exception handling.
Value
Reached 77,000 monthly active couriers —improving courier usability and merchant trust and platform's revenue.
Impact
77K monthly active couriers
Order cancellations ↓ 18%
Average substitute processing time ↓ 43%
Result
Guided exception handling
Clearer in-app decisions
Faster stockout resolution
Product Area
Courier-facing Operations
Retail Fulfillment
Exception Handling
Result
Streamlined the end-to-end ecosystem, optimizing the workflow from item picking to exception handling.
Product Area
Courier-facing operations Retail fulfillment
Exception handling
Impact
77K monthly active couriers
Order cancellations ↓ 18%
Average substitute processing time ↓ 43%
Delivery in Mexico
DiDi Food Courier App:
Promo bundle & Substitutions
Feature 01
Buy-X-Get-Y Bundle Validation.
Problem Solved
When a promo bundle item was out of stock, couriers lacked a clear rule to follow, and the system failed to support proper handling.
Feature 02
Out-of-Stock Substitution.
Problem Solved
When an item was unavailable before checkout, couriers had no clear in-app substitution path, causing delays, manual coordination, and lost orders.
Designed the courier-facing experience
Designed UI, interaction patterns, and localized content.


Simplified a high-friction workflow
Reduced friction in issue handling within the picking flow.
Aligned operational logic across teams
Aligned pricing and settlement logic across Ops and Backend

What I Drove
User Problem
DiDi Food's courier app lacked the logic to handle grocery retail exceptions like complex promotions and inventory shortages, leaving couriers no a clear way to resolve orders before checkout.
Objectives
The goal was to create one in-app stockout flow before checkout that guided couriers to the right action—cancel bundle items or substitute regular items—to reduce cancellations and keep orders moving.
Challenge
The challenge was handling one stockout moment with two distinct rules: promo bundles had to be canceled as a whole, while regular items needed a substitution path before checkout.
How might we
How might we design intuitive, reliable exception handling during high-pressure picking so couriers can make accurate decisions and restore trust—while protecting revenue for the platform, profitability for merchants, and earnings for couriers?
What I Drove
What I Drove

Designed the courier-facing experience
Designed UI, interaction patterns, and localized content.

Simplified a high-friction workflow
Reduced friction in issue handling within the picking flow.

Aligned operational logic across teams
Aligned pricing and settlement logic across Ops and Backend
Aligned design decision across Ops and Backend
Before & After Design




Before & After Design




Before & After Design


User Problem
End-to-End fulfillment flow
DiDi Food's courier app lacked the logic to handle grocery retail exceptions like complex promotions and inventory shortages, leaving couriers no clear way to resolve orders before checkout.
Objectives
End-to-End fulfillment flow
The goal was to create one in-app stockout flow before checkout that guided couriers to the right action—cancel the whole bundle or substitute regular items—to reduce order cancellations and keep orders moving.
Challenge
End-to-End fulfillment flow
The challenge was handling one stockout moment with two distinct rules: promo bundles had to be canceled as a whole, while regular items needed a substitution path before checkout.
HMW
End-to-End fulfillment flow
How might we design intuitive, reliable exception handling during high-pressure picking so couriers can make accurate decisions and restore trust—while protecting revenue for the platform, profitability for merchants, and earnings for couriers?






Where the flow breaks
Where the flow breaks
Picking Was the Bottleneck
End-to-End fulfillment flow
Mapping the full flow revealed Picking as the critical bottleneck.
This is where digital orders meet shelf reality, so I focused on resolving unavailable items before checkout.



Two Failure Scenarios


Scenario 01
Promo bundle Failure
Partially fulfilled bundles led to unsolvable pricing disputes — ending in manual cancellation of entire bundles.


Scenario 02
Substitution Barrier
Couriers are powerless when items are out of stock. Lacking a digital way to suggest swaps, they waste minutes coordinating with customers via calls and text messages.
Two Failure Scenarios
End-to-End fulfillment flow

Scenario 01
Promo bundle Failure
Partially fulfilled bundles led to unsolvable pricing disputes — ending in manual cancellation of entire bundles.

Scenario 02
Substitution Barrier
Couriers are powerless when items are out of stock. Lacking a digital way to suggest swaps, they waste minutes coordinating with customers via calls and text messages.
Scenario 02
Substitution Barrier
Couriers are powerless when items are out of stock. Lacking a digital way to suggest swaps, they waste minutes coordinating with customers via calls and text messages.
One stockout. Two different fixes. The app had neither.
One stockout. Two different fixes. The app had neither.
Define the Decision Tree
Define the Decision Tree
So I turned those two fixes into one decision tree with two branches:
Promo Bundle: incomplete sets cannot be submitted.
Substitutes: customer choice first, then system recommendations, then manual search.
Zooming into the Picking Phase: To handle complex edge cases, I designed a "Bifurcated Decision Tree" that separates items into two distinct workflows:
The 'Hard Lock' for Promos Bundle: Strict validation for bundles (Buy X Get Y). If any part is missing, the set is cancelled to prevent delivering incomplete offers.
The 'Soft Path' for Substitute Items: Flexible substitution logic. The system guides pickers through 3 specific scenarios (e.g., user-specified vs. system-recommended) to find the best alternative.

A correct decision tree still has to survive the shelf.
Execution Constraints
Environmental constraints
Couriers make time-sensitive decisions while moving through crowded stores — often with limited attention and only one free hand. From desk research and remote field visits, I distilled four physical constraints that shaped the interaction design during picking.

Glove Use
Frequent removal is impractical; touch precision remains compromised

Low Attention
Picking is fast and interruption-heavy—couriers can’t read dense screens.

One-Handed Use
Often holding items or a basket, couriers need core actions within easy thumb reach.

Time Pressure
Average in-store time is short; trial-and-error cost is high
In-Store Picking Guardrails
I turned three of the four constraints into a design rule each. Time pressure isn't a fourth rule — it's the reason the other three can't slip.
01
Glove-friendly touch targets
Primary CTA buttons ≥ 48×48 dp
Button spacing: ≥ 16 dp to reduce mistouch
Glanceable status & rules
Keep promo/exception status persistent (chips + icons); details on tap.
Surface only critical numbers and the next action.
High Contrast Optimization: for bright outdoor use
WCAG AAA (≥7:1)
No low-contrast UI
02
Thumb-first, one-handed operation
Bottom 1/3 screen: high-frequency core actions
Top 1/3 screen: low-frequency actions
Thumb-Optimized: 65% screen coverage
Bottom 1/3 screen: high-frequency core actions
Top 1/3 screen: low-frequency actions
03
Key Insight
Reliability came from making the decision tree executable under real store constraints — not from defining the rules alone.
From decision tree & guardrails to workflow
Hifi Guided Workflow
To keep the decision tree’s complexity behind the scenes, I used strategic checkpoints.
Normal picking stays uninterrupted; exceptions only appear when the courier can still fix them before checkout.
①
Promo bundle picking
Detect bundle item
Validate required quantity
Block incomplete submission

②
Out-of-stock exchange
Detect out-of-stock item
Prioritize customer choice
Guide recommended/manual replacement

①
Promo bundle picking
Detect bundle item
Validate required quantity
Block incomplete submission

②
Out-of-stock substitution
Detect out-of-stock item
Prioritize customer choice
Guide recommended/manual replacement

Pre-launch: issues uncovered
Building the hi-fi flow surfaced four real-world issues beyond the happy path—localization, cognitive load, experience gaps, and validation constraints. These became the focus for our next iteration and testing plan.
Risk
Spanish runs ~30% longer than English. Will labels and buttons still fit?
My call
Reserved ~30% extra width up front, so Spanish never overflows.
Risk
How to cut cognitive load during rushed, interrupted picking?
My call
One decision per screen; short, literal copy, details only on tap.
Risk
One UI for everyone, or split by experience level?
My call
One UI for both — in-flow hints guide novices without blocking experts.
Risk
How to validate decisions with limited research bandwidth?
My call
Fast internal rounds with the DiDi ops team as proxy users — not a formal field study.
A flow that works in Figma still has to survive a real store.
From decision tree & guardrails to workflow
Toward the end of the design process
From decision tree & guardrails to workflow
Risks I designed around
Building the hi-fi flow surfaced four real-world issues beyond the happy path—localization, cognitive load, experience gaps, and validation constraints. These became the focus for our iteration and testing plan.
Risk
Spanish runs ~30% longer than English. Will labels and buttons still fit?
My call
Reserved ~30% extra width up front, so Spanish never overflows.
Risk
How to cut cognitive load during rushed picking?
My call
One decision per screen; short, literal copy, details only on tap.

Risk
One UI for all, or split by experience?
My call
One UI for both — in-flow hints guide novices without blocking experts.
Risk
How to validate with limited research bandwidth?
My call
Fast internal rounds with DiDi ops as proxy users — not a formal field study.
Design Trade-offs under limited dev resources
Case A:
Scalability
Problem: Illustrative design couldn't scale with promo complexity
Solution: From high-maintenance one-off design to scalability
Why: Moving from V1 to V2 was a strategic shift to ensure the app could handle complex, dynamic promotions without sacrificing Ul cleanliness or development speed.
Before


After✨


Before

After

Process Simplification
Problem: The original stockout flow was long, fragmented, and heavily manual.
Solution: Shorten the flow and guide couriers with a clear in-flow resolution path.
Why: A shorter, guided flow reduces effort, lowers decision burden, and helps couriers resolve exceptions more efficiently.
Before


After


Case B:
Error prevention
Problem: Popover hints were easily missed under pressure
Solution: Move bundle guidance from a hidden popover to a persistent footer rule.
Why: This shift prioritizes error prevention over minor space-saving, ensuring a smoother and more reliable checkout experience for all users.
Before


After✨


Process Simplification
Problem: The original stockout flow was long, fragmented, and heavily manual.
Solution: Shorten the flow and guide couriers with a clear in-flow resolution path.
Why: A shorter, guided flow reduces effort, lowers decision burden, and helps couriers resolve exceptions more efficiently.
Before


After✨


Case B:
Error Prevention
Problem: Popover hints were easily missed under pressure
Solution: Move bundle guidance from a hidden popover to a persistent footer rule.
Why: This shift prioritizes error prevention over minor space-saving, ensuring a smoother and more reliable checkout experience for all users.
Before

After

Process Simplification
Problem: The original stockout flow was long, fragmented, and heavily manual.
Solution: Shorten the flow and guide couriers with a clear in-flow resolution path.
Why: A shorter, guided flow reduces effort, lowers decision burden, and helps couriers resolve exceptions more efficiently.
Before

After

Case B:
Error prevention
Problem: Popover hints were easily missed under pressure
Solution: Move bundle guidance from a hidden popover to a persistent footer rule.
Why: This shift prioritizes error prevention over minor space-saving, ensuring a smoother and more reliable checkout experience for all users.
Before


After


Verifiable design impact
Impact

How do stakeholders like it?

Substitutions are much smoother now. If the customer already chose a replacement, I use it; if not, the app suggests a solid list—I pick one and send it, no more long back-and-forth.
Lily Au
Sr. Designer of DiDi Global
Substitutions are much smoother now. If the customer already chose a replacement, I use it; if not, the app suggests a solid list—I pick one and send it, no more long back-and-forth.
Lily Au
Sr. Designer of DiDi Global
Default quantities cut down the fiddling. If a Buy X Get Y promo isn’t complete, the app blocks it upfront, so I don’t have to call and explain—much more efficient.
Anoushka Halder
Courier of DiDi
Default quantities cut down the fiddling. If a Buy X Get Y promo isn’t complete, the app blocks it upfront, so I don’t have to call and explain—much more efficient.
Anoushka Halder
Courier of DiDi

What I learned
01
When Design Meets Engineering Constraints
Fixed launch dates and engineering constraints forced me to move away from a waterfall process, using interactive prototypes to surface trade-offs early and align decisions faster.
I learned that good design is not about maximizing flexibility everywhere, but about protecting non-negotiable business rules while creating feasible flexibility where it matters.
01. Fixed launch dates left design with minimal iteration time. I pivoted from waterfall handoffs to interactive prototypes, using them to surface trade-offs early and drive decisions faster.
02. Key trade-off: Maintained strict promo integrity (non-negotiable) while expanding substitute flexibility from "exact match" to "similar products"—balancing quality with feasibility.
02
Systematize the Workflow Before Optimizing the Interface
The core problem was not a bad interface, but an undefined workflow that pushed promo and substitution decisions onto couriers manually.
I learned to design for correctness first: turn messy human judgment into clear system logic, then gradually open up flexibility once the workflow is reliable.
Key Insight: The real problem wasn't "bad interfaces"—it was unstructured workflows. Couriers used calls and messages to manually validate promos and negotiate substitutes, creating unmeasurable inefficiency.
Design Approach: Strong constraints first, flexibility later.
Auto-filled promo bundle quantities
Blocked incomplete submissions
Curated high-quality substitute lists
Philosophy: Guarantee correctness first, then gradually open up flexibility—transforming business breaking points into
verifiable system capabilities.
Impact: Defined 3 pre-launch metrics (promo completion rate, exchange confirmation rate, processing time) to make hidden costs visible and optimizable.