I spent last month going through recordings of conversations with retailers and listening to people talk about promotion stacking is surprisingly close to watching a Succession episode.
Picture this: 4 discounts land in one cart, all approved, all certain they’re the number one papa’s boy. And boom! Your margin is now on the floor.
So let’s talk about succession rules. Pardon me, stacking rules. And about why this is so rarely a fight about the actual rules and so often a tug of war between teams who were never in the same room, the same timezone, or the same conversation.
Pleny of heirs, one basket
Waystar’s problem was never a shortage of good plans. 4 people held a legitimate claim on the same thing, the rule for choosing between them lived informally in one man’s head, and he revised it according to his mood, his health, and whoever had most recently disappointed him.
Your checkout: identical, minus the man.
Merchandising owns the sitewide reduction, growth built the newsletter welcome promo, and the loyalty team slapped on a bonus 5% always-on member special.
Each of those was approved by somebody with every right to approve it, but none of them were approved together. So nobody signed off 45% off. It simply arrived, the way things arrive when 4 correct decisions meet in one cart and there’s no Logan in the room.
What everyone gets wrong
Promotion stacking gets talked about as configuration. Can A combine with B? And promo engines talk about it that way so this is a house criticism as much as anything.
But the teams that are stuck are rarely stuck on “our system can’t do this.” Systems can express it. They’re stuck because two parts of the business both put money on the table and nobody agrees whose money loses.
One team, working across physical and digital stores, described it as a governance failure rather than a technical one. Historic codes with no expiry, lots of channels, lots of systems, multiple teams generating discounts and not talking to each other.
To make matters worse, visibility of how things stack is usually poor and it lies unregulated until you see a very low margin order come through.
So stacking itself isn’t the fish. You either allow it or you don’t, you set the rules, you’re done before lunch. The governance is the bigger fish: who is allowed to spend, whose budget it leaves, and who gets to say no out loud.
If you want the take on the actual stacking config, give this piece a read >
The ladder nobody climbs in order
Now, if you stop calling it stacking, the whole thing turns into 6 questions. They only work in order, because each one is unanswerable until you’ve done the one above it.
What’s actually live right now? Every offer, every channel, every code, including the ones from campaigns that ended two Novembers ago. Most teams won’t be able to build this list because incentives get created in 5 systems by 4 teams across 3 timezones and at least 2 languages.
Who’s allowed to receive what? Inspect eligibility: customer, product, cart, channel, journey stage, and every combination of those. Stacking properly belongs here, by the way. Interaction rules are a subset of eligibility, which is why bolting a stacking config onto vague eligibility never works.
What happens when two of them turn up at once? Now onto the collision: which campaign wins, do they combine, in what order do they calculate, what’s the ceiling. This is the part everybody starts at and starting here is exactly why it doesn’t stick.
Can you explain the outcome afterwards? Why did this customer get this discount? Why didn’t they get the one they expected? If support, marketing and engineering are reverse-engineering your promo engine from a single order, you have an observability problem and it eats a person’s week every month forever.
What is it costing? Contribution per order, apportioned between the discounts that landed on it. Genuinely hard to do, because when 4 incentives share a cart, deciding which one ate the margin is ambiguous. Most teams find out retrospectively, in a low-margin order, which is the worst possible moment.
What’s the cheapest thing that would have worked? The top part and the only one that makes money. What’s the least expensive incentive, or combination, that gets this person to convert? Sometimes 10% off, sometimes free shipping, sometimes absolutely nothing, because they were buying anyway.
So audit the thing (properly)
Here comes the ask, and you won’t enjoy it. You can’t fix what you can’t see, and right now you can’t see it.
List every live incentive: public codes, auto-applied cart promos, loyalty earn and burn rules, member specials, welcome flows, referral rewards, partner and affiliate codes, gift card promos, anything that can reduce the order value.
Give every line five columns: Owner, and it has to be a human with a name, not “CRM.” Funding source, meaning whose budget genuinely absorbs it. Then channel, eligibility, expiry.
Sort by expiry: Everything with no end date is a Connor: technically still in the running, funded from somewhere nobody can locate, and about to embarrass you.
Build the worst-case cart: Take your most stackable basket and apply everything that could legally apply to it at once. The number you get is your actual maximum discount. Most teams have never calculated this, which means most teams don’t know their own worst case. You will not enjoy it and you should do it anyway.
Pull the bottom 1% of orders by margin from the last 90 days and write down which incentives were on them. This is your evidence, and it’s usually the same 3 or 4 combinations repeating.
Ask 2 people from different teams to describe your stacking rules: Compare the answers. If they don’t match, and they won’t, you’ve just found the problem.
That’s it. A day of work, mostly spreadsheet, and at the end you can answer the first 5 questions on the ladder, which puts you ahead of nearly everyone.
What the show was actually about
4 seasons of heirs circling, 3 siblings who each spent a lifetime preparing for the chair, and the company goes to Tom, the son-in-law.
Your promo stack ends the same way. Merchandising, growth and loyalty can argue about stacking until February, but none of them decide anything. The checkout decides, at 11pm on a Friday, based on whatever it was configured to do 18 months ago by somebody who has since left.
That’s your Tom. So: if a 45% order goes out tomorrow, who answers for it?
Anyway, if you’re curious how other teams handle this or you just want to compare notes with people fighting the same fight, that’s what marginmaxx is for. WhatsApp, invite-only group!





