Restaurant Brands InternationalDesign LeadFeb 2025 – Mar 20263 brands · 4 squads

Designing at platform scale across Restaurant Brands International

As Design Lead I owned design governance, delivery quality and cross-stream alignment across RBI's multi-brand digital platform — and inside that remit, ran the discovery this case study is about.

Platform & delivery structure
Restaurant Brands International
Burger KingPrimary baseline
PopeyesAdapted expression
Firehouse SubsAdapted expression
Core Frontend
Transactions
Engagement
Iberia Squad

My role & impact

Team & cross-stream leadership

Formally led a 5-designer team across Core FE, Transactions, Engagement and Iberia — guiding solution direction, reviews and delivery quality.

Design governance & review

Reviewed cross-stream work before client reviews, helping teams hold requirement coverage, brand consistency and quality.

Design intake & classification

Co-developed an intake model for design requests, aligning PMs, BAs and stakeholders on effort and workflow before sprints.

Delivery predictability

Introduced Design QA as part of sprint, and ran workshops for developers to enable better Figma inspection and visual regression.

02Deliverables

Four workstreams, one remit.

I contributed across strategic discovery, platform delivery, design-system quality and campaign scalability — both hands-on and through cross-stream collaboration.

31React components

Design System v02

Partnered with Core FE developers and QA across 31 React components, adding Design QA into the sprint workflow and running Figma inspection workshops to reduce implementation drift early.

Design system component grid showing menu item cards in LTR and RTL variants across sizes
6systems mapped

Prepaid Offers discovery

Led a revenue-critical discovery outside my assigned stream — defining purchase and redemption flows, feasibility guardrails, support-tool needs, event mapping and Sanity-led campaign considerations.

2platforms, tested hands-on

iOS & Android Live Activity

Co-explored iOS Live Activities and Android Live Updates with the Menu & Delivery designer, using Xcode and Android Studio testbeds to clarify platform constraints and shape realistic order-status experiences.

Order status widgets showing progress from order placed to ready, with driver PIN and order number
1 → ncampaign → reusable model

Dragon Ball Z app takeover

Guided the conversion of a one-off campaign takeover pattern from the US implementation into a scalable, Sanity CMS-driven model — then supported a Phase 1 light-to-medium takeover for Dragon Ball Z across guest apps.

Of the four, one carried the most commercial risk and the least existing pattern. The rest of this study is that one.

03The discovery — chapter one
Revenue model discoveryDesign LeadBurger KingJul 2025 – Feb 2026

Designing Burger King's Buy Now, Redeem Later prepaid model

Burger King could sell meals. The discovery asked whether it could sell future meal value — and what systems needed to change to make that real.

Burger King
Restaurant #BK-2047
Westfield London · W12 8PP
  • Whopper Meal£6.49
  • Large Fries£1.99
  • Diet Coke£1.29
  • Total£9.77
  • Incl. VAT (20%)£1.63
  • Visa ···· 4821 — £9.77
Prepaid balance
unavailable
No stored-value model
BK prepaid infrastructure
The gap this work aimed to close
Starbucks
Store #SB-1204
Canary Wharf · London E14
  • Grande Caramel Latte£5.50
  • Blueberry Muffin£3.25
  • Stars Reward-£0.50
  • Total£8.25
  • Incl. VAT (20%)£1.38
  • Mastercard ···· 7392 — £8.25
Stored value
$1.77B
$1.77B
Best-in-class stored-value benchmark
What the category already proves
The proposition, in one ad
04Business context

This is a business opportunity, not a user complaint.

Burger King was not reacting to existing user pain. It was proactively exploring a proven model — one already working in China and across Europe.

“Burger King is exploring the opportunity to decouple the moment of purchase from the moment of consumption, enabling users to prepay and redeem later.”

— Discovery epic, TRX-4681

Capability gap: BK vs best-in-class

Maturity, scored out of 10
  • Stored value / floatStarbucks ($1.77B)
    BK1
    Best10
  • Loyalty depthMcDonald's (tiered)
    BK3
    Best9
  • SubscriptionPret (+28% orders)
    BK0
    Best8
  • Float trackingStarbucks (>50% via app)
    BK2
    Best9
Burger King Best-in-class
~$0M

unrealised float potential

Starbucks stored value
$1.77B
BK stored value
None
BK float tracking
None

Modelled from the Starbucks stored-value benchmark against BK transaction volume. An indicative size for the prize, not a forecast.

Five capability gaps, one unified opportunity

Gift cards / stored value
Major untapped float revenue
Loyalty
No tiering, no urgency
Subscription
No recurring revenue stream
B2B / vouchers
No bulk or corporate programme
UX / purchase–redeem
No "buy now, use later" model

The market gap was visible. The harder question was whether BK's platform could support a decoupled model at all.

05Platform readiness

Six systems that had never been asked to talk to each other.

Before any UX work could begin, I needed to know whether BK's platform could technically support a decoupled purchase-to-redemption model. Six systems, mapped against six critical readiness themes.

0Ready4Partial2Risk
Partial

CRM / Media Platform

Persistent ad attribution?

Setup varies by region
Risk severity 3 of 3: Could break ad measurement entirely
Partial

Deep Link / App Routing

Personalised offer deep links?

Offer ID persistence unverified
Risk severity 3 of 3: Wrong offer loads at entry
Partial

PSP / Payment

Prepaid payment without fulfilment?

New orchestration needed
Risk severity 2 of 3: No purchase confirmation shown
Partial

Loyalty / Offers Engine

Store & sync redemption state?

Real-time sync unverified
Risk severity 3 of 3: #1 trust failure if missed
Risk

CRM / Engagement

Event-based reminders?

Prepaid triggers not configured
Risk severity 2 of 3: Redemption rates underperform
Risk

POS / App Redemption

Redeem with minimal disruption?

Varies by market & franchisee
Risk severity 3 of 3: Highest-impact failure point

Not one system was outright ready. That finding is the reason this discovery ran for six months and produced a build-ready spec rather than a concept deck — the design work could not be trusted until the platform questions had answers.

With the feasibility landscape mapped, I needed to frame what we were actually trying to prove before designing anything.

06Discovery process

Proving the model before drawing a single screen.

Discovery was structured around five testable hypotheses, each tied to a specific business risk, and tracked through weekly stakeholder calls across the entire duration of the work.

  1. 1
    Jun 2025
    Discovery opened
    Epic raised; feasibility mapping begins
  2. 2
    Jul 2025
    “Not loyalty” decision
    Key frame established: prepaid ≠ Crown Rewards
  3. 3
    Jul – Aug
    Flows V1–V3 reviewed
    Dedicated cart, deep-link entry confirmed
  4. 4
    Aug 2025
    UJM & blueprint mapped
    8-stage journey + 8-stage blueprint complete
  5. 5
    Sep – Oct
    Edge cases resolved
    Unavailability, refunds, customisation policy
  6. 6
    Feb 2026
    MVP scope finalised
    22 items explicitly out of scope. Build-ready

Five hypotheses that kept the scope honest

Each one names the risk it exists to retire

H1Model risk

Users are willing to purchase prepaid items even if they cannot redeem immediately.

Decoupled model has standalone value. Not contingent on same-visit behaviour.

H2Redemption risk

Reminders within 48–72 hours of expiry significantly increase redemption rates.

CRM timing rules are critical infrastructure. Not optional in MVP.

H3Audience risk

First-time users engage more with value-led offers; existing users with convenience and variety.

Campaign targeting can serve acquisition and retention as distinct audiences.

H4Operational risk

Redemption success and satisfaction is higher via in-app QR than at store counters.

Mobile-first redemption flow should be the MVP primary path.

H5Roadmap risk

Offer personalisation (drink vs. fries) increases purchase intent.

CRM preference logic is a Phase 2 priority. Must be architected for now.

With the hypotheses framed, I needed to map exactly where users would lose trust on the journey.

07User journey map

Three places where trust breaks.

The eight-stage journey from ad impression to post-redemption surfaces three critical failure points — the moments where the decoupled model stops making sense to users.

Hover any stage to trace it on the curve below.

Ad impression
Hopeful

This looks like a good deal.

Click & landing
Curious

Where is this taking me?

Offer exploration
Uncertain

What's the catch?

Pain point
Purchase
Anxious

Hope I'm charged correctly.

Stored in app
Confused

Did I actually get it?

Pain point
Reminder
Relieved

Oh, I forgot this!

Redemption
Worried

Hope they accept this.

Pain point
Post-redeem
Resolved

That was smooth.

Where the trust curve breaks

The three dips are where the decoupled model stops explaining itself

Trust holdsTrust breaks

Seven UX opportunity areas

Each one is anchored to a stage, not to a screen

Improve landing clarity
Clarify value & redemption logic
Strengthen purchase reliability
Enhance offer findability
Optimise reminders
Ensure redemption acceptance
Close the feedback loop

Knowing where trust broke was not enough. One stakeholder decision then removed every shortcut we had for fixing it.

08The decision that changed everything

Prepaid is NOT a loyalty feature.

Stakeholders explicitly agreed: prepaid offers are paid discounted offers, not rewards. That single sentence killed several natural UX shortcuts and forced a distinct design path.

What it killed

Natural shortcuts to Crown Rewards integration, loyalty-adjacent UX patterns and points-accrual mechanics — all removed from scope.

What it enabled

A standalone identity: a “Prepaid” tag across surfaces, a dedicated purchase flow, and a category that could evolve independently of loyalty.

What it forced us to design from scratch

The entire post-purchase confirmation, offer storage experience and redemption flow — we had no existing pattern to borrow from.

Where should prepaid live?
New prepaid offer concept
Loyalty / Crown Rewards
Points accrual · Tier mechanics · Rewards tab
Descoped
Prepaid Offers (standalone)
Paid discounts · “Prepaid” tag · Dedicated flow
Confirmed

It also required new content fields in Sanity CMS — and revealed that no team had yet claimed ownership of prepaid content configuration.

09Design solution

Three flows, one clear path.

The full purchase-to-redemption experience across new users, existing logged-in users and in-restaurant redemption — a dedicated flow, distinct from every existing BK app pattern.

1The ad

Price and the decoupling promise sit in the same eyeline — nobody taps through to find out what “prepaid” means.

2Offer detail

Deep link resolves to the exact offer. Terms are on the purchase screen, not one tap behind it.

3Purchase complete

“Saved to Offers” is the whole trust fix — it names where the money went before the user has to look.

4Stored in app

The “Prepaid” tag and a countdown, not a rewards badge. Distinct identity, per the reframe.

5Redeem

QR first, cashier code as fallback — because POS readiness varies by market and franchisee.

Designed for the edges too

The happy path is the easy half. A prepaid model breaks trust hardest when the money is already spent and something goes wrong — an ad that outlived its campaign, an item the chosen store can't make today.

Every edge state resolves to a next action. None of them dead-end on an apology.

Expired ad

A dead link still ends somewhere useful.

Unavailability

Guide, never override: the offer stays valid, the route changes.

The flows were clear. Keeping them shippable required a different kind of discipline.

10Scope discipline

We said no to twenty-two things, so we could say yes globally later.

Twenty-two features were explicitly excluded from the MVP — not because they weren't valuable, but because shipping a focused test was more valuable than shipping a complete product.

0explicit exclusions
IA & navigation
Out of scope: Dedicated “Prepaid” tabOut of scope: In-app Transactions hubOut of scope: Unified Orders + Loyalty tab
Cart & payment
Out of scope: Mixed cartOut of scope: Cash paymentOut of scope: Intermediate cart pageOut of scope: In-store purchase
Platform readiness
Out of scope: Auto-select nearest storeOut of scope: Map auto-refreshOut of scope: Participating-stores-only viewOut of scope: Signed/expiring deep linksOut of scope: POS-sourced price
Refunds & support
Out of scope: Partial refundsOut of scope: Redemption refundsOut of scope: Support Tool write actionsOut of scope: POS/TLOG deep links
UX enhancements
Out of scope: Repeat customisation sheetOut of scope: Smart counter UIOut of scope: Order number on successOut of scope: Sanity-driven success artOut of scope: App-wide title-casingOut of scope: Advanced CRM nudges

Test before you scale

The MVP is a deliberate proof point. Every exclusion keeps the test clean — one market, one item, one flow — before global rollout.

Platform readiness first

Six of the 22 were removed because the underlying systems — POS, loyalty sync, deep links — were not yet validated for those scenarios.

Protect the critical path

Scope creep in any of these areas would have delayed the whole MVP. Each “no” protected the one thing that mattered: purchase → store → scan.

11System depth

From ad_id to “You redeemed this on 17 June at London BK.”

One user tap at the POS triggers a chain across six systems. Each system is a layer — watch a field originate in one layer, then carry down through every layer beneath it, all the way to redemption.

Hover a field to trace how far it has to travel.

INSTAGRAM ADDEEP LINKPSP CONFIRMATIONLOYALTY ISSUECRM TRIGGERPOS REDEMPTION

Three fields cross a system boundary. Those three are where the experience breaks.

CampaignCommerceIdentityOffer lifecycleRedemption

Support visibility: read-only in MVP

Support agents can see the full prepaid record across two tabs — Orders for the purchase, Loyalty for the offer's status. Write access is deliberately out of scope.

The reason is the lineage above: until is_redeemed is the single source of truth across POS and loyalty, a support agent editing state by hand would create a second version of the truth. Visibility answers the call. Control would have created the next one.

Support tool Orders tab showing a Prepaid Purchase entry with order status and details
Orders tab · purchase record
Support tool Loyalty tab showing a prepaid purchase of CHF 3.00 with status Claimed and a loyalty ID
Loyalty tab · offer status

Six months, six systems, one concept that did not exist when we started. Here is what held it together.

12Reflection

Seven principles. One I wish I'd used sooner.

Six months of discovery on a concept that didn't exist yet. What platform readiness looked like at the start against the end — and the principles that held the work together.

Platform readiness: before → after discovery

Validated confidence, not technical completion. Hover an axis for the delta.

AttributionDeep linkPaymentdecouplingOffer visibilityCRMreadinessPOSconsistency
Start of discovery End of discovery

Seven principles that emerged

  1. Make prepaid behaviour explicit. Never let users infer what happened to their money.
  2. Preserve user confidence after purchase. They need to know exactly where the offer went.
  3. Avoid mixing mental models. Prepaid ≠ loyalty ≠ coupon. Own a distinct identity.
  4. Keep the MVP operationally constrained. 22 explicit exclusions protect the critical path.
  5. Support agents need visibility, not control. Read-only access is enough for MVP trust.
  6. Handle store availability transparently. Guide, don’t override user expectations.
  7. Measure both purchase AND redemption. Purchase alone doesn’t prove the model works.
The one I wish I'd used sooner

Make prepaid behaviour explicit. Never let users infer.

Early flows assumed “buy now, redeem later” would be self-evident from context. It wasn't. The moment the copy and UI said plainly what had happened to the money, comprehension improved. That should have been the starting constraint, not a mid-discovery finding.

Where it landed

Scope finalised Feb 2026 — build-ready, one market, one item, one flow

0
Journey stages mapped
Ad impression through post-redemption
0
Systems given named owners
None of which had spoken to each other
0
Exclusions held to the line
Every one argued, none accidental
0
Hypotheses carried into build
Each tied to a business risk
Guest appsDiscoveryUX strategyCross-functionalSystems design
Jul 2025 – Feb 2026 · Restaurant Brands International
13App takeover · Platform model & delivery

From a hard-coded app takeover to a reusable, shipped platform model.

We analysed the U.S. team's SpongeBob implementation, defined a tiered takeover model, and shipped it as a Sanity-powered Dragon Ball Z takeover across guest app surfaces.

US implementation
  • Hard-coded per campaign
  • One market (US)
  • One campaign — SpongeBob
Rebuilt as a reusable model
Our approach
  • Configurable via Sanity CMS
  • Multi-market ready
  • Reusable across campaigns

The reusable model, in three intensities

Each tier is a fixed cost the business can choose from
Dragon Ball Z shipped at Light → Medium Mobile app Desktop

Surface mapping

Which app surfaces a takeover may claim, and in what order.

Feasibility alignment

What each intensity costs engineering, agreed before commitment.

Conversion guardrails

Where brand art must yield so ordering never gets slower.

Cross-platform guidelines

One spec that holds on mobile app and desktop alike.

Dragon Ball Z full-bleed takeover artwork in collaboration with Toei Animation
Takeover art
Rewards screen themed with Dragon Ball Z artwork and Senzu Bean Offers entry point
Rewards surface
Menu screen with a Senzu Bean Offers tab listing themed Whopper and Steakhouse Angus items
Menu surface
14Cross-platform · Testbed-validated design

iOS Live Activity and Android Live Update Notification

Neither platform's documentation clarified how these states would actually look or behave — so before the interface mocks were finalised, I built hands-on Xcode and Android Studio testbeds to replace assumptions with tested evidence.

Docs named the states. Not how they'd behave.

iOS Live Activities

Xcode · iOS Simulator · Cursor

  • Lock Screen
  • Standby
  • Compact
  • Minimal
  • Concurrent Activities

Android Live Update Notifications

Android Studio · Platform Samples · Cursor

  • Expanded
  • Compact
  • Minimal
  • Notification Drawer
  • Lock Screen

What the testbeds actually rendered

Captured from the simulators, not redrawn from documentation

iOS Live Activity card: "Your order will be ready soon" with progress track and order number 8697
iOS · Lock Screen
The same iOS Live Activity card mirrored for Arabic right-to-left layout
iOS · RTL
Android lock screen showing the Burger King live update notification below the clock
Android · Lock Screen
Android notification drawer with the Burger King order-on-the-way live update expanded
Android · Drawer
Two compact order-confirmed cards, one in English and one in Arabic
Compact · both directions
What the testbeds changed

Once we could see the compact and minimal states actually render, the order-status content had to be rewritten to survive at roughly a dozen characters — and mirrored for RTL without a second layout.

Built alongside the Menu & Delivery designer, whose interface mocks the testbeds fed directly.

Assumption
Design the expanded state, let the OS handle the rest.
Evidence
Compact and minimal states truncate hard, and differently per platform.
Consequence
Content constraints entered the brief before the first mock.