A store runs a 20%-off sale, then hands out a 10% coupon, and a customer uses both. Most humans — including the store owner — expect 30% off. The register says 28%. Nobody’s wrong about the arithmetic; they’re using different arithmetic.
The math part
Discounts stack sequentially, each one applying to the already-reduced price. Take $100: the 20% brings it to $80, then the 10% applies to the $80, taking $8 — not $10. Total discount: $28. Every percentage after the first is worth less than its sticker, and the gap widens as percentages grow — two 50% promotions make 75%, not a free order. This is the same reason two years of 50% growth isn’t 100%: percentages compound; they don’t add.
If you want additive behavior — 30 means 30 — the honest implementation is one promotion whose amount is the combined figure, not two stacked ones. Decide which contract you’re offering before the customer does the math on their receipt, because some of them will.
The order part
In Drupal Commerce (my home turf, though the logic rhymes everywhere), promotions evaluate in a defined order, and order changes outcomes. A $10-off-then-20%-off order and a 20%-off-then-$10-off order produce different totals on the same cart. When a client says “the discount is coming out wrong,” the answer is almost never a bug — it’s a sequence.
The part that turns everything off
Every promotion carries a compatibility setting — roughly, does this combine with others? One promotion marked “not with any other” doesn’t just decline to stack; depending on evaluation order it can win the slot and switch the rest off. The classic incident: a promotion that ran fine for months silently stops applying the day an unrelated auto-applied promotion goes live, and the config of the broken one checks out perfectly — because the broken one isn’t where the change happened.
The takeaway for store owners: before launching any promotion that will coexist with another, test the combination with a real cart, not each promotion alone. Two discounts that each work is not evidence they work together — that’s the whole trick of the math.