Build status
This book is written incrementally, a few topics per session, and this page is
the honest state of it. A topic page that has not been written yet is marked
[todo] in its chapter index and in the queue rather than
existing as a stub, because a thin page marked complete is worse than a missing
one: it hides.
The definition of done and the session process live in CLAUDE.md in this
directory. The decisions log, including every place this book improves on or
departs from its source document, lives in state/DECISIONS.md.
Progress
Counts
| Queue rows inventoried | 341 |
| Done at the full ten-point bar | 51 rows (47 pages) |
| Remaining | 290 |
| Chapters with at least one completed topic | 19 of 19 |
Words under book/ | ~134,000 |
Priority mix of the remaining queue: 82 P1, 86 P2, 94 P3, 28 P4.
Counts on this page are produced by state/check.py, not tallied by hand (D9).
What "done" means here
A topic is only marked [done] in QUEUE.md when the file contains all ten of:
precise definition (including what it is confused with), the problem it solves,
real mechanics with code or math, a worked example with numbers, named production
evidence, the tradeoff debate with a committed position, three to six follow-up
questions answered in full, at least one common misconception, an interview
delivery note, and two to four primary sources.
Thin files are not marked done. A thin file marked done is worse than a todo, because it hides.
Session log
Session 0 and 1 (2026-08-03)
Setup and the first working batch.
Setup. Created the directory structure, copied the source document to
source/ as read-only, wrote CLAUDE.md as the standing instruction set, wired
the book into book.toml with src = "book" and into the site's build.sh as
its own landing-page section.
Inventory. Read the source end to end and extracted the queue into
QUEUE.md, grouped by target chapter and prioritised P1 to P4. The source's own
gap register (§51) supplied the P2 and P3 tagging; the drill bank (§25, §34,
§38.8, §39.7) and the design-question lists (§5.2, §6.6, §15.10) supplied P1.
Topics completed (13). Chosen for breadth across chapters rather than depth in
one: Cassandra tombstones, Kafka exactly-once, Reactor flatMap vs concatMap,
gRPC behind an L4 load balancer, prefill vs decode, diagnosing confidently wrong
RAG, CFS throttling, cache stampede, SSE vs WebSockets, PKCE, burn-rate alerting,
canary vs A/B, and the toxic code reviewer.
Also written: 00-how-to-use.md, 19 chapter index pages, the recitables sheet
seeded with 40 entries, and 42 flashcards.
Session 2 (2026-08-03)
Twenty topics, chosen so that every one of the 19 chapters now has at least one completed page. Nineteen of the twenty are P1.
| Chapter | Topic | Drill |
|---|---|---|
| 01 | The staff-level design interview | n/a |
| 02 | Little's Law and queueing | n/a |
| 02 | Write skew and snapshot isolation | 28 |
| 03 | DynamoDB single-table design | 24 |
| 04 | Virtual threads vs reactive | 12 |
| 04 | GraphQL N+1 and DataLoader | 13 |
| 06 | Budgeting a context window | 9 |
| 07 | Filtered vector search and the recall cliff | n/a |
| 07 | Interleaving and position bias | n/a |
| 08 | A pod is healthy but slow | 19 |
| 10 | Revoking stateless JWTs | 30 |
| 11 | Migrating a Redux store to a server cache | 34 |
| 12 | Cardinality: the observability cost model | 44 |
| 14 | Team Topologies and splitting a team | 47 |
| 14 | Modular monolith vs microservices | 48 |
| 15 | Design a payments ledger | n/a |
| 16 | Making the reliability investment case | 40 |
| 17 | RTO and RPO, extracted and priced | 50 |
| 18 | Reverse due diligence | 59 |
| 19 | Drills 10 to 15, spoken form | 10-15 |
Correction logged. The session 0 total of 354 topics was an arithmetic error
in the per-chapter tally; the queue contains 341 rows. Corrected here, in
QUEUE.md, and recorded as decision D9 in DECISIONS.md. Nothing was removed
from the queue; only the reported total changed.
Session 3 (2026-08-03)
Fourteen topic pages plus a drill batch, weighted deliberately toward the reader's moat: chapter 05 went from 2 pages to 9, because a search / recommendations / GenAI background targeting staff roles is where depth converts directly into interview advantage, and the 2026 loop weights it heavily.
| Chapter | Topic | Drill |
|---|---|---|
| 05 | Hybrid retrieval and reciprocal rank fusion | n/a |
| 05 | Evaluating RAG: two systems, two metric families | n/a |
| 05 | KV cache, GQA, paging and continuous batching | n/a |
| 05 | LLM cost engineering | 6 |
| 05 | Prompt injection and the lethal trifecta | 5 |
| 05 | Evaluating an agent | 4 |
| 05 | Chunking, and why fixed-size is usually wrong | n/a |
| 02 | The tail at scale | n/a |
| 02 | Idempotency and exactly-once | n/a |
| 04 | Watermarks in Flink | 15 |
| 10 | CVSS, EPSS and KEV | 31, 33 |
| 15 | Design a news feed | n/a |
| 16 | The engineer who has missed three commitments | n/a |
| 19 | Drills 1 to 6, spoken form | 1-6 |
Structural addition: the drill map. 19-drill-bank/index.md is now a complete
table of all 66 source drills plus 12 the expansion added, each pointing at the page
that teaches it and marked queued where it does not exist yet. That closes the
loop the book was missing: a reader can go from any drill they failed straight to
the page, and the gaps are visible rather than implied.
The checker earned its keep. It caught an em dash I introduced in the drill batch, which the manual pass had missed. That is exactly the class of error it exists for.
Next session. The remaining P1 drills with no page: zero trust and the sequencing (10, drill 32), OpenSearch zero-downtime reindex (03, drill 27), the director who wants a date you cannot commit to (16, drill 39), two teams building the same service (16, drill 41), and deploy-versus-release with the pipeline as a system (13, drill 46).
Verification schedule
Every tenth session: audit three random [done] topics against the ten-point
bar, run the stranger test on one (could a strong senior answer a hostile
follow-up from this file alone?), log failures in DECISIONS.md and fix them.
First verification pass due after session 10.
Session 4 (batch 2): the compute, storage and delivery gaps
Seven topics, all P1 drills that previously resolved to queued in the drill map.
| Chapter | Page | Drill |
|---|---|---|
| 08 | Serverless or containers: walk the math | 21 |
| 08 | Where fsync fits in durability | 22 |
| 08 | eBPF for intermittent latency | 23 |
| 09 | Invalidating with complex dependencies | 17 |
| 06 | Knowledge graph vs vector index | 8 |
| 03 | Choosing a MongoDB shard key | 26 |
| 13 | Expand and contract | 64, 66 |
Chapter 08 went from 2 pages to 5 and is now the third-deepest chapter. The compute-and-kernel drills (19 to 23) are fully covered for the first time.
The expand-contract page deliberately answers two drills at once, because the cache-format rollback failure (64) and the three-version column rename (66) are the same problem: state written by one version that another version cannot read. Splitting them would have produced two thin pages that each omitted half the mechanism.
State after this batch: 59 pages, ~177k words, 167 flashcards, 69 of 341 queue rows closed. Every one of the 66 drills in chapters 19's map now resolves to a page except 35, 36, 51, 52, 53, 54, 58, 60 and 65.
All 19 site targets build green under mdBook 0.4.40; state/check.py passes.