# Design a coupon and promotion system: system design interview question

> Concurrent coupon use with exact limits, discount combinations, expiration dates, repeated requests, and uncertain payment outcomes.

Source: https://sysround.com/questions/design-coupon-and-promotion-system
Updated: 2026-11-05


Difficulty: hard. Levels: Senior, Staff+.

## How the interviewer opens it

"Design a service that evaluates discounts and redeems coupons during purchases. It must enforce expiration dates, usage limits, and rules about which promotions can apply together."

## What to clarify first

- Scale and traffic concentration
- Traffic mix and data size
- Eligibility and discount types
- Promotion combinations
- Usage limits
- Expiration and checkout
- Latency
- Consistency and durability
- Payment and policy changes
- Scope boundaries

## Scope of a strong answer

Core requirements:

- Evaluate cart eligibility and calculate permitted discount combinations.
- Enforce expiration dates and global and per-customer usage limits.
- Reserve coupon capacity during checkout, then confirm or release it.
- Handle repeated requests and uncertain payment outcomes without duplicate coupon use.

Usually out of scope:

- Build the payment provider.
- Build a promotion editor or customer segment service.
- Detect fraud or prevent customers from creating multiple accounts.
- Restore coupon capacity after refunds.
- Calculate shipping charges, tax, or currency conversion.

## What interviewers probe

### Coupon use limits

Several purchases can compete for the last use across different codes. Each purchase can also consume several promotion limits at once.

### Discount decisions

Eligible promotions can conflict or change each other's discount amounts. Cart changes and policy edits can invalidate an earlier result.

### Purchase completion

Payment and coupon state change in separate systems. A timeout can leave capacity occupied without a known purchase outcome.

## Common mistakes

- Treat an evaluation result as a guarantee that coupon capacity remains available.
- Check usage limits separately from the transaction that reserves capacity.
- Let different codes bypass the same promotion's customer limit.
- Expire unresolved payments and give their capacity to another purchase.
- Calculate discount combinations without a fixed application order or rounding policy.
- Choose distributed locks or database shards before measuring the stated load.

## The bar by level

- **Senior:** Separate evaluation, reservation, and confirmation. Enforce all promotion limits in one transaction. Define money arithmetic, policy versions, and recovery after uncertain payment.
- **Staff+:** State the invariants across checkout and payment. Resolve expiry races and delayed outcomes. Bound contention for popular promotions. Explain safe regional ownership or capacity allocation.

Practice this question with an AI interviewer: https://sysround.com/practice/new?problem=coupons-promotions


---
SysRound (https://sysround.com) is an AI practice tool for system design interviews. It has a voice or typed AI interviewer and a shared whiteboard. At the end, you get feedback on each skill and a model answer. The AI feedback can be wrong.
