Creating a Wallet Worth $400M+
Coupons are the bread and butter of Overstock, and later Bed Bath & Beyond after the acquisition. So it’s a little ironic that they were also our biggest source of customer complaints. I led the redesign of how coupons worked across the app, from a single overwritable code to a full wallet experience. It shipped in two quarters and coupon-attached transactions went on to drive hundreds of millions annually in GMS at peak.

Overstock
Lead Designer

Timeline
2 quarters to initial launch, evolved continuously after

Platform
iOS, Android

Team
Designer (me), UX Researcher, PM, 3 execs, 1 analyst, 1 dev lead, 2 devs

The Problem
Our coupons had a reputation. Not a good one.

Pulled from interstitial surveys, global ecosystem surveys, and hundreds of raw complaints, the pattern was consistent. Customers felt ripped off. Restrictions on certain categories weren’t clear upfront. Discounts didn’t apply to items already on sale. And our coupons were literally labeled “stackable,” but between the restrictions and the underlying system, they rarely actually stacked.

The real kicker was simpler than any of that. If you had a 20% off coupon attached to your account and then clicked a 10% off link from a marketing email, the 10% would auto-apply and silently override the 20%. Poof. Gone. No warning, no choice. Just a worse deal than the one you already had.

At the same time, our Apps vertical was tasked with growing MAU and GMS for the year. Coupons weren’t the obvious answer. Marketing was leaning toward loyalty and points. Execs were eyeing a search overhaul. Coupons became the lever, but not by default, I had to make the case.

Strategy & Approach
We were already pushing app-specific coupons hard through push notifications. The problem was what happened next. Push to app was an abysmal experience. Users tapped in, hit the override bug or a confusing restriction, and bounced.

That gap was my argument. We’re already investing in coupons as a traffic driver, so why not fix what happens once people actually arrive? I ran opportunity graphing sessions and pulled the org into user research and interviews to build the case. Marketing agreed fast, since it aligned with what they were already pushing. Execs wanted to see real validity first, so I went into our analytics platform and mapped the actual journeys, bounce rate and conversion rate for users arriving with a coupon attached. Paired with the complaint data sorted into distinct pain points, that made the case on its own. I didn’t need to argue opinion against opinion. I had the numbers.

I also pitched it beyond our own vertical. Whatever we learned in-app could inform decisions in desktop and mweb too, which helped get broader buy-in from teams outside our immediate org.

That didn’t mean the stakeholder group agreed on everything from there. Execs, marketing, PM, dev, three different sets of incentives pulling toward the same rough goal from different angles. The way I kept things aligned wasn’t persuasion by volume, it was going back to the data every time a disagreement surfaced.

Key Solutions
The Wallet
Before this, there were no real coupon codes, our marketing channels needed trackable links, not codes, so instead users had a single cookie tied to their account holding the most recent coupon they’d clicked. One coupon in, one coupon out. Whatever you had before just got overwritten.

The fix was obvious once I saw the override problem clearly. Collect coupons, don’t overwrite them. The wallet let users accumulate every coupon they’d interacted with and choose which to apply, instead of the system silently picking for them. That one shift, collection instead of overwrite, was the foundation everything else in this project sat on top of.

Terms & Conditions, One Tap Away
A huge share of the “bait and switch” complaints traced back to restrictions customers never saw until checkout. Terms and conditions used to live buried in subpages nobody opened. I moved them into the coupon detail sheet itself, one tap away from wherever a customer was looking at a coupon.

This wasn’t just a UI move. Marketing had real concerns going in, if we’re too upfront about restrictions, does the coupon feel less valuable? I pushed back. Hiding the terms wasn’t going to solve the actual problem we’d identified, the bait-and-switch feeling itself. We landed on a compromise: clear terms, one tap away, with wording that took the sting out without hiding anything. Would I have preferred going further on transparency? Sure. But it solved the core trust issue, and that was the actual goal.

Surfacing the Best Coupon
Because we had the purchase and coupon data, I wanted the system to just tell users which of their coupons was the best one for their cart. Straightforward idea. Not a straightforward build. PM flagged the cost, dev lead flagged the lift, and the automated recommendation didn’t make it in.

What we landed on instead was a coupon wallet inside cart itself, plus a savings callout near the add-to-cart button showing what a customer could save. Users could toggle through their own coupons and find the best one themselves, rather than the system doing it for them automatically. PM was happy, since it was largely backend-driven and lighter to ship. I still think full automated surfacing would build more trust than self-discovery does. But the compromise solved the real problem well enough to matter, and there were a handful of smaller asks like this throughout the project that landed the same way.

$400M+
Annual GMS at peak
5%
Cart abandonment drop
2.7%
Conversion lift, coupon tab
4%
Conversion lift, cart
Results & Impact
At peak, coupon-attached transactions were $400M+ annually in GMS, gross merchandise sold through carts where a coupon from the wallet was applied.

That number holds up because of what it actually unlocked. Before the wallet, coupon usage was suppressed by the override bug itself, customers were losing value they’d already earned, so usage never reflected real demand. Once that was fixed, we were able to lean much harder into push campaigns driving coupon traffic into the app, the same channel that had been sending people into a broken experience before. During peak season, the app was carrying up to 50% of total user traffic. The wallet is what made that scale of investment actually convert.

More than the numbers, it changed how coupons functioned in the app. What used to be a single fragile string of value became something customers could actually trust and manage.

Reflection
The hardest part of this project wasn’t the design, it was reconciling what marketing wanted customers to feel with what customers actually needed to trust us. Those two goals overlapped more than either side expected going in, but getting there took real back and forth, not just alignment on paper.

The miss I still think about: personalized coupon surfacing. Based on what’s sitting in someone’s cart or wishlist, we could’ve been showing relevant coupons proactively, even small ones, tied to actual purchase intent. It was out of scope at the time, and we never circled back to it. With where AI-driven personalization is now, that gap looks less like a missed feature and more like a missed loyalty play.