Design patterns for a centralized pricing engine that supports fast campaign rollout, auditability, and peak-hour stability across large retail chains.
Business context
Retail chains need fast campaign launch while preserving margin rules and legal constraints. Spreadsheet-driven pricing cannot scale to 100+ stores.
Reference architecture
Diagram (Mermaid)
Design decisions
- immutable pricing events for full audit trail
- simulation step mandatory before publish
- staged rollout by region to limit blast radius
- rollback package generated for every campaign
Key data contracts
- product_id, store_group, start_at, end_at
- price_strategy (absolute, percentage, bundle)
- min_margin_guardrail
- legal_compliance_flags
Deployment workflow we use
- draft campaign with simulation snapshot
- review exception list (margin floor, legal blocks)
- approval by pricing owner and category manager
- canary release to 5-10 stores
- full rollout when margin + basket KPIs stay within guardrail
SQL validation query before publish
sql
SELECT sku, store_group, proposed_price, expected_margin_pct
FROM campaign_price_preview
WHERE campaign_id = :campaign_id
AND expected_margin_pct < min_margin_guardrail
ORDER BY expected_margin_pct ASC
LIMIT 200;Incident controls
- every publish creates a rollback package
- policy engine blocks overlapping campaigns with conflicting priority
- all writes are evented for full audit trail
KPI dashboard minimum set
- margin delta by category and store cluster
- promo sell-through in 6h / 24h / 72h windows
- rollback frequency by campaign owner
- pricing latency from approval to POS propagation
Final takeaway
A pricing engine is both a business control system and a reliability system. Treat campaign release like software release.