01 — The context
Three checkouts, three codebases, zero shared logic.
Three checkout experiences had been built over years by separate squads, each with its own fields, validation rules, and fraud logic. Desktop, responsive, and app behaved as strangers to a single buyer.
02 — The problem
New anti-fraud requirements were landing on three codebases at once.
Every fix doubled in cost, every change in copy risked contradicting the next surface. The order summary on iOS was obscured by the keyboard. There was no capacity for new compliance fields without a full redesign on each surface.
03 — What I did
Auditing divergence, designing convergence
1. Audited the 23 divergence points across the three flows and split them into must-unify, will-unify, and keep-separate categories.
2. Designed a single field architecture with shared validation states and anti-fraud fields.
3. Introduced AI-assisted copy and flow validation as a weekly ritual.
4. Led the phased rollout: desktop first, then responsive web, then native app.
04 — Process artifacts
From audit spreadsheet to shared architecture
05 — The solution
Three surfaces become one coherent system
One component library, three layout contexts. Shared validation on blur across all surfaces, same error copy, market-specific fields that adapt but never contradict. The iOS order summary stayed visible above the keyboard. Anti-fraud fields shipped once and propagated to all platforms.
06 — The result
One system, zero contradictions
Three surfaces collapsed into one design system. Fraud compliance rolled out once instead of three times. New anti-fraud fields now ship once and scale across all platforms. The weekly AI validation ritual caught 12 inconsistencies in the first 8 weeks.
07 — What I learned
Unification is a negotiation over ownership
The designs landed only because we named the exact 23 points up front. Without that audit, stakeholders would have debated "should iOS look native" forever. Naming the specific tradeoffs unblocks decisions.
08 — Decisions not made
What I chose not to change
1. I didn't redesign the payment flow. Payment integration was a separate system with its own constraints.
2. I didn't enforce a single validation timing. Some markets required on-submit validation for legal reasons.
3. I didn't deprecate the app checkout immediately. The native app team needed a migration path, not a deadline.