A promotion engine is supposed to be the one place discounts, codes, and offers are decided. In most retailers it is three places at once: a discount block inside the commerce platform's checkout code, a promo service someone wrote for the app, and a campaign calendar the merchandising team keeps in a spreadsheet. So a flash sale is a deploy, an exclusion is a ticket, and the person accountable for margin cannot change the rules that give it away.
Native platform discounts cover the simple cases and stop exactly where the money is. Stacking order, category exclusions, customer segments, per-cart caps, and margin floors either do not exist or exist as a checkbox with no audit trail, so the interesting rules leak into custom code. Then the code belongs to one channel: POS, the mobile app, the call center, and partner sites duplicate the logic or go without it, and they drift inside a quarter.
The failure mode is always the same and always expensive. A sitewide code lands on top of stock that was already marked down, and every clearance unit sells below landed cost until someone notices in the weekly margin report. Or the reverse: a cautious exclusion blocks a code on items that should have taken it, and support spends the weekend issuing manual credits.
Finance asks questions the code cannot answer either. Which rule version priced this order? Who approved the extra 20 percent? Which lines were excluded and why? When the answers live in a checkout service and someone's spreadsheet, every campaign post-mortem, every chargeback dispute, and every replatform starts with archaeology.
commerce-platform · promotions.config.tsdiscounts.push({ code: "SUMMER24", type: "percentage", value: 20, combinesWith: ["order", "shipping"] });
q3_campaign_calendar.xlsxcampaigndiscount
SUMMER24 sitewide20%
clearance event40%
PROMO-412Exclude clearance from sitewide codesblocked on platform release · commerce backlog
one code · three systems · no exclusion anywhere