44
Submit Order (Prevent Double-Charge)
Idempotency keys, dedup window, retry storms.SavedSaved on this device — Saved on this device
01Clarifications
What would you ask before drawing a single box?
Ambiguity you would resolve with the interviewer: scope, scale, who uses it, what counts as done.
AI staff engineer
Enter to send · Shift+Enter for a new line
About Submit Order (Prevent Double-Charge)
Idempotency keys, dedup window, retry storms.
- Difficulty
- intermediate
- Time
- about 40 minutes
- Stages
- 10
- Topic
- System Design Fundamentals
How this problem is worked
Ten stages, from the questions you would ask an interviewer to the trade-offs you would defend. Each asks one question, and the simulator runs the architecture you draw against the requirements you wrote.
- 01ClarificationsWhat would you ask before drawing a single box?
- 02Functional reqsWhat must this system actually do?
- 03Non-functionalWhat must it promise about speed, uptime and correctness?
- 04Capacity estimationHow much load and data does this have to hold?
- 05API designWhat does the outside world call, and what comes back?
- 06Data modelWhat gets stored, and what is it looked up by?
- 07Use-case breakdownHow does each requirement actually get served?
- 08High-level designWhich components handle a request, and in what order?
- 09Deep divesWhich part breaks first, and what do you do about it?
- 10Trade-offsWhat did this design cost, and what breaks at 10×?
Primary sources for this problem
- Stripe — Designing robust APIs with idempotency
- Stripe API Reference — Idempotent Requests (24h window, 409 concurrent, param-mismatch error)
- Brandur — Implementing Stripe-like Idempotency Keys in Postgres (recovery points + atomic phases)
- AWS Builders' Library — Timeouts, retries, and backoff with jitter (Marc Brooker)
- Marc Brooker — Exponential Backoff And Jitter
- Google SRE Book — Handling Overload + Addressing Cascading Failures (client-side throttling, retry budgets)
More in System Design Fundamentals
The four primitives every later problem assumes — unique IDs, rate limits, caching a read-heavy endpoint, and making a retry safe.
- URL ShortenerShorten a long URL. Read-heavy. Don't collide.
- PastebinStore text/code blobs with TTL and access control.
- Distributed Unique ID GeneratorGenerate globally unique, monotonic-ish IDs at scale.
- Distributed Rate LimiterEnforce a per-key request limit across a fleet of enforcers — accurately, in under a millisecond, without becoming the outage.
Browse the full problem catalog, or see what the simulator does and does not model.