The Twelve Worked Designs
Every design in Track C, worked end to end: nine sections, then attacked by a hostile staff-level interviewer, then revised. Six critiques per design, each naming a real defect in the first draft.
Attempt each one yourself before reading it. Reading a worked answer teaches you what good looks like; writing one under a clock teaches you to produce it. The value is in the second.
Table of Contents
- How to Use These
- The Twelve
- The Two Hard Parts, Per Design
- Cross-Cutting Patterns
- What the Critiques Found
- The Order to Work Them
How to Use These
For each design, in this order:
- Read only the prompt. Stop there.
- Write your own, 45 minutes, against the template. Timer on, diagram in Excalidraw.
- Score yourself against
../../../diagnostics/RUBRIC.mdbefore reading further — you are measuring your judgement, not your ability to recognize good judgement when shown it. - Read sections 1–10 and note every gap.
- Read the hostile critique. Try to answer each one before reading the revision.
- Read the revision. The gap between your answer and it is the actual finding.
- Everything you missed goes into
../../../review/at the 1-day interval.
The critique is the point. Every one of these designs is wrong in section 5 and right in the revision, and the six defects found per design are the kind you will find in your own work if you learn to attack it. That is the transferable skill — not the designs themselves.
The Twelve
| # | Design | The two hard parts | Why it is in the set |
|---|---|---|---|
| d01 | Fault-tolerant job scheduler | exactly-once dispatch under scheduler failure · worker liveness, leases, split brain | The reported screen question. Do this first |
| d02 | Distributed versioned KV store | global version ordering · consistent snapshots across shards | The distributed counterpart to the reported coding question. Connects the two rounds |
| d03 | Distributed rate limiter | atomic check-and-decrement · fail-open vs fail-closed | Small surface, deep tradeoffs. Good early confidence |
| d04 | Webhook delivery system | per-destination isolation · at-least-once without flooding | The reported take-home, as a design round |
| d05 | Load shedding gateway | what signal to shed on · what to drop | The reliability primitive everything else leans on |
| d06 | Feature store | point-in-time correctness · training/serving skew | Your background — expect the hardest push |
| d07 | Log analytics pipeline | ingest backpressure · index cost vs query cost | Ingest, index and query want opposite things |
| d08 | Multi-region metadata store | where the write goes · read-your-writes across regions | Where consistency stops being free |
| d09 | Search / retrieval serving | the fan-out tail · index freshness vs latency | Your strongest area; portfolio-adjacent |
| d10 | Event streaming platform | ordering vs parallelism · consumer group rebalancing | The thing the others depend on |
| d11 | Distributed lock service | why a correct lock is not enough · sessions and clocks | Fencing, in full. The highest-value single concept |
| d12 | Multi-tenant control plane | isolation and blast radius · reconciliation | Ties the set together |
The Two Hard Parts, Per Design
The single most-weighted rubric line is whether you identified the right hard parts. Here they all are — and the drill is to read a prompt and name them in 60 seconds, before any diagram.
The four questions that find them (warmup §0.3):
- Where must ≥2 machines agree on state?
- Where can data be lost?
- What is the highest-rate or highest-cardinality thing?
- Where does one tenant's behaviour affect another's?
Notice how often the answer is the same shape: something must be agreed on, and something must not be lost.
Cross-Cutting Patterns
The same ideas recur, which is the point — twelve designs, roughly a dozen primitives.
| Pattern | Where it appears |
|---|---|
| Fencing tokens | d01 (job dispatch) · d02 (shard rebalance) · d11 (the whole design) · d12 (cell migration) |
| The outbox / no dual write | d01 (dispatch) · d04 (event → deliveries) · d10 (as the log itself) |
| Per-X isolation caps | d04 (per destination) · d05 (per class) · d09 (per shard) · d12 (per tenant) |
| Circuit breakers | d04 · d05 · d09 |
| Reserved floors, not pure priority | d05 (shed classes) · d12 (fair queueing) · d04 (backlog drain) |
| Bloom filters / probabilistic pruning | d07 (segment pruning) · d09 (index) · and in Track A ch.9 |
| Predecessor queries | d02 (as-of reads) · d06 (point-in-time join) · Track A ch.1 |
| Immutable segments + merge | d07 · d09 · d10 |
| Static stability / last-known-good | d08 (config) · d12 (data planes) |
| The recovery ramp | d01 (catch-up) · d04 (circuit close) · d07 (backlog) · d10 (consumer lag) |
| Cells / shuffle sharding | d12 · noted in d05 |
| Level-triggered, not edge-triggered | d12 (reconciliation) · d08 (config push) |
| Session guarantees over linearizability | d02 · d08 |
If you can name where a primitive recurs, you understand it. If you can only name where you first read about it, you do not yet.
What the Critiques Found
Seventy-two critiques across twelve designs. The defects cluster, and the clusters are the lesson — these are the things your first draft will get wrong too.
| Defect class | Count | Example |
|---|---|---|
| A stated SLO the design violates | 8 | d01: enqueue gap makes dispatch 60 s late against a 1 s SLO |
| An uncosted hot path | 11 | d05: circuit state read on every request = 1M reads/s |
| A guarantee overclaimed | 9 | d04: fencing cited for a resource we do not control |
| A failure mode with no detection | 7 | d09: degraded results silently corrupting A/B tests |
| Arithmetic never done | 10 | d10: 40 GB segment × 60 replicas = 2.4 TB from one node |
| A policy that starves someone | 6 | d04: backlog never drains under sustained load |
| A recovery path that is untested | 5 | d12: the emergency rollout nobody has run in 8 months |
| A shared dependency claimed absent | 4 | d12: registry, secrets, DNS, metrics |
| Wrong granularity | 8 | d11: a global fence for a per-resource comparison |
| An assumption that only holds when healthy | 4 | d09: hedging calibrated on the healthy distribution |
The most common single failure is arithmetic never done. Ten of twelve first drafts asserted something that a two-line calculation disproves. That is the cheapest possible improvement to your own designs: before defending a component, size it.
The Order to Work Them
Mandatory first, in this order:
- d01 — the reported screen question. Leases, fencing, at-least-once.
- d11 — fencing in full. d01 uses it; this explains it.
- d02 — the bridge to the coding round.
Then by leverage:
- d05 — the primitive the rest lean on
- d04 — feeds
../../../projects/ - d09 — your strongest area; make it your best answer
- d06 — your background, hardest push
- d10 — ordering vs parallelism
- d03 — quick, and sharpens the fail-open decision
- d08 — where consistency stops being free
- d07 — the economics of indexing
- d12 — the synthesis
One per week, 45 minutes to write plus 30 to critique. Twelve weeks, which fits inside the 26-week program with room to redo the two mandatory ones cold.
References
../WARMUP.md— every primitive used across all twelve, from zero../README.md— Track C drills, the critique loop, the rubric../calculators/envelope.py— the arithmetic in every §2../../../diagnostics/RUBRIC.md— how these are scored../../../CHEATSHEET.md— the same material, dense, for the morning of a round