Scope#
A method for producing and defending a design with traceable requirements, capacity math, storage and consistency choices, overload behavior, recovery targets, and observable acceptance criteria.
Read the notes in order. The first note shows how to turn a vague prompt into a bounded contract and explains the artifacts that appear in every later design. The sequence then follows one request through an API and the network before adding data modeling, relational-engine behavior, distribution, coordination, asynchronous work, caching, scheduling, and recovery. The final note combines those pieces in nine worked interview designs.
Orientation and decision ledger#
Every note continues the same illustrative system: merchants create and inspect tenant-scoped orders, update their status, and trigger email or push notifications. Payment execution, inventory ownership, template editing, and provider internals stay outside the boundary. The fixed workload is 1,000 average and 5,000 peak order creates each second, 20,000 peak reads each second, 4 KB per stored order, 30 days of hot history, p99 create latency below 250 ms, 99.9% monthly create availability, and 99% of notification dispatches starting within five seconds. The stress case assigns 20% of creates to one tenant; regional recovery targets a 15-minute RTO and 30-second RPO.
Reading sequence: SD1 → SD2 → SD3 → SD4 → SD5 → SD6 → SD7 → SD8 → SD9 → SD10 → SD11.
| Note | Main job | Decision added to the running design | Deeper derivation |
|---|---|---|---|
| SD1 | Bound and size the prompt | Contract, SLOs, 10.4 TB raw hot data, and exclusions | DS1: remote calls and ambiguous outcomes |
| SD2 | Define the request path | Four API operations, one-second deadline, and tenant-scoped idempotency | DS1: deadlines, retries, and operation identity |
| SD3 | Choose data paths | PostgreSQL authority, ordered tenant index, archive, and analytic projection | DB1 through DB3 |
| SD4 | Open the relational engine | Bounded pools, MVCC/WAL boundary, and observable concurrent index migration | DB4 through DB7 |
| SD5 | Distribute ownership | 64 shards, three zonal copies, and eight buckets for the hot tenant | DS6: placement, DS7: replication, and DB11: Cassandra |
| SD6 | State correctness | Per-order versioning plus a transactional outbox and idempotent consumers | DS5: consensus, DS7: transactions, and DB4: isolation |
| SD7 | Buffer notification work | At-least-once queue, retry identity, dead letters, and backlog arithmetic | DS8: stream processing and DB15: CDC |
| SD8 | Protect scarce capacity | Terminal-receipt cache, 30,000-RPS admission ceiling, and priority shedding | DB9: Redis and cache failure |
| SD9 | Reconcile worker capacity | 75 workers across three zones with explainable placement and spare nodes | DS8: scheduling and shared resources |
| SD10 | Recover a region | Active-passive fencing, 15-minute RTO, 30-second RPO, and SLO evidence | DS10: security and recovery and DB6: database recovery |
| SD11 | Defend the complete design | Final ledger plus a requirement perturbation that forces a redesign | Revisit the derivation beside the decision that changed |
These notes assume ordinary product-engineering experience. Product names such as Kafka, Cassandra, ECS, and EKS are defined before their mechanics are used. When a mechanism appears, ask four questions: what problem forced it into the design, what promise does it make, where does that promise end, and how would an operator know it stopped working?
Difficulty labels describe the depth inside a note, not another reading order. Follow the note numbers; a later Core note may apply an Advanced mechanism introduced earlier.
Reading the module will not by itself make someone ready for every system-design interview or production on-call rotation. Use it to build a repeatable reasoning method, then practice unfamiliar prompts, draw request and recovery paths, run load tests, restore backups, and review real incidents. Production judgment comes from making the written assumptions collide with measured systems.
Useful background#
- Comfort reading an HTTP API and a relational schema
- Basic familiarity with processes, networks, and persistent storage
- Ability to do unit conversions and percentage calculations
If those foundations are rusty, read cloud infrastructure for service boundaries and low-level infrastructure for processes, memory, networks, and storage. Read distributed systems before or alongside SD5–SD10: that module derives the time, replication, consensus, and failure mechanisms that system design applies. The data systems foundations provide the slower path through storage engines, indexes, transactions, and the database products used from SD3 onward. None is a hidden prerequisite for starting SD1; the ledger links provide a second explanation when a mechanism needs more detail.