T-Mobile for Business · E-commerce

One trade-in flow for four systems — and the modal argument that history settled

Four different doorways feed one ultramarine conveyor carrying identical phones - four systems become one flow that lifted completion ~10% per client.
RoleProduct Designer — owned the e-commerce flow; supported Account Hub, Education & Salesforce surfaces
Team4 designers, cross-functional engineering across multiple codebases
Timeline2 months to ship across all surfaces
Scale~2,000 business clients/month · ~200 orders per client · ~$50 per order
The 30-second version
ProblemTrade-in was the most broken part of TFB e-commerce; four surfaces (e-commerce, Account Hub, Education, Salesforce) all needed it, against rigid legacy systems.
DecisionOne shared flow instead of four forks; spreadsheet bulk upload matched to legacy data formats; argued for in-page micro-flows over modals — and lost.
OutcomeShipped across all four surfaces in 2 months. Order completion rose ~10%/client. The 25-device modal ceiling later proved the in-page case.

Trade-in was the most broken part of the T-Mobile for Business e-commerce experience — and one of the most commercially exposed, because promotions depended on it. Four different surfaces needed the same capability. We had two months.

01What shipped, what changed

The end-to-end flow shipped across all four surfaces inside the two-month window, and trade-in went from the most broken part of TFB e-commerce to a working, promotable capability. Order completion per client rose roughly 10% — from ~180 to ~200 monthly orders per client at ~$50 per order — which, across roughly 2,000 business clients a month, compounded into a material revenue impact.

02The system problem

Trade-in wasn't a page; it was an obligation spread across an ecosystem. Account Hub, the Education portal, the e-commerce purchase flow, and Salesforce-based rep tooling all needed customers and reps to move devices through the same underlying trade-in machinery — legacy systems with strict data formats, built long before anyone imagined a business customer trading in hundreds of devices at once.

The core design decision was to treat trade-in as one shared flow consumed by four surfaces, not four sibling implementations. I owned the e-commerce flow — the revenue path — and supported the other three; years later, when Salesforce trade-in became its own project, I supported that too.

E-commerce · mineAccount Hub EducationSalesforce / reps One trade-in flowshared logic · shared patterns Legacy trade-in& data systems
Four surfaces, one flow, one set of legacy constraints. Diagram recreated; no proprietary screens are shown in this case study.

03Decision: meet the legacy systems where they were

Business trade-in isn't one phone — it's a fleet. Reps and account owners needed to submit dozens or hundreds of devices, each with identifiers and condition data, into systems that accepted only rigid formats. The elegant answer everyone wanted — smart, guided, per-device entry — collapsed at fleet scale, and the AI-assisted parsing you'd reach for today didn't exist in a shippable form.

I designed a spreadsheet-based bulk upload instead: a template that matched our data systems' expectations exactly, with validation that caught format errors before submission rather than after failure. Less glamorous than a wizard; dramatically more honest about what the back end could digest and what a business customer managing 200 devices actually does — they live in spreadsheets already.

The senior move wasn't inventing a clever input. It was admitting the constraint and designing the most respectful version of it.

04Decision: the modal argument

The sharpest disagreement was structural. For the interactive trade-in steps, the other codebases wanted modals — dialogs layered over the page. I argued for in-page micro-flows: the trade-in sequence living in the page itself, as addressable steps.

My case, then and now:

Engineering pushed for modals for local reasons; my design lead sided with them, and modals shipped. The system worked — until businesses needed to trade in more than 25 devices at once, exactly the scale-driven failure the in-page architecture was designed to absorb. When I left, the team was scoping a more robust Salesforce trade-in that integrated directly with client databases — solving, at much greater cost, the bulk problem the original architecture had capped.

I was right about the pattern and unpersuasive about the stakes. Those are different skills, and the second one is what I upgraded next.

05What I'd do differently

Escalate the architecture argument beyond my design lead. I treated the modal decision as a pattern preference and let it be settled as one; it was actually a scalability decision wearing a UI costume. Today I'd write the one-page consequence memo — "here is the entry-count ceiling this creates, here is who hits it, here is the rebuild cost" — and put it in front of the people who'd own that cost.

Deep dive

The full working detail

Why each rule exists, and what it costs.

EvidenceMethodConstraintLesson
EvidenceModal vs. in-page micro-flow — the full comparison
DimensionModalIn-page micro-flow
Task lengthBest under ~1 minute, single decisionHandles multi-step, multi-entity tasks
Bulk data (25–200+ devices)Breaks; tables don't fit; spawns nested dialogsPage absorbs tables, pagination, review states
Error recoveryDismissal risks losing stateSteps addressable; partial progress persists
Deep-linking / resume / analyticsNone — one opaque stateURL per step; measurable funnel
AccessibilityFocus-trapping and screen-reader behavior notoriously fragileStandard document flow
Engineering cost of edge casesCompounds inside dialog stateShares the page's existing state model

Industry guidance (Nielsen Norman Group among others) has long held that modals are for brief, self-contained interruptions and degrade as task complexity grows. The 25-entry ceiling TFB later hit is the textbook failure mode.

EvidenceThe numbers, unpacked

Scale: roughly 2,000 business clients moving through the flow monthly, averaging ~200 orders per client at ~$50 per order. After the rebuild, order completion rose approximately 10% per client — from ~180 to ~200 monthly orders. Order volumes were tracked by the analytics team while it existed; the uplift compounds across the client base into a material revenue impact I deliberately state as a range rather than a computed total, because precision I can't defend is worse than a range I can.

MethodThe bulk-upload design in detail

Template mirrored the legacy systems' required fields exactly — device identifiers, condition codes, quantities — so a successful upload was guaranteed ingestible. Validation ran client-side at upload: row-level errors surfaced with plain-language fixes before submission, replacing the old failure mode of silent downstream rejection. The trade-off accepted: initial format learning cost for the user, in exchange for reliability at fleet scale and zero mystery failures.

ConstraintWorking across four codebases

Each surface had its own stack, release cadence, and design debt. The shared-flow strategy meant negotiating a common pattern language while letting each surface keep its shell. My e-commerce flow served as the reference implementation; I reviewed the others against it. The lesson that stuck: in multi-codebase work, the design system is the contract — where we had shared patterns, surfaces converged cheaply; where we didn't, every divergence became a meeting.

LessonHow I escalate architecture decisions now

The modal decision was settled as a pattern preference when it was actually a scalability decision in a UI costume. My practice since: when a disagreement has a growth ceiling in it, I write the one-page consequence memo — the specific limit this creates, who hits it, when, and the rebuild cost — and put it in front of whoever owns that cost, not just my design lead. Losing an argument is survivable; letting it be miscategorized is what costs the company later.