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 inventoried341
Done at the full ten-point bar51 rows (47 pages)
Remaining290
Chapters with at least one completed topic19 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.

ChapterTopicDrill
01The staff-level design interviewn/a
02Little's Law and queueingn/a
02Write skew and snapshot isolation28
03DynamoDB single-table design24
04Virtual threads vs reactive12
04GraphQL N+1 and DataLoader13
06Budgeting a context window9
07Filtered vector search and the recall cliffn/a
07Interleaving and position biasn/a
08A pod is healthy but slow19
10Revoking stateless JWTs30
11Migrating a Redux store to a server cache34
12Cardinality: the observability cost model44
14Team Topologies and splitting a team47
14Modular monolith vs microservices48
15Design a payments ledgern/a
16Making the reliability investment case40
17RTO and RPO, extracted and priced50
18Reverse due diligence59
19Drills 10 to 15, spoken form10-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.

ChapterTopicDrill
05Hybrid retrieval and reciprocal rank fusionn/a
05Evaluating RAG: two systems, two metric familiesn/a
05KV cache, GQA, paging and continuous batchingn/a
05LLM cost engineering6
05Prompt injection and the lethal trifecta5
05Evaluating an agent4
05Chunking, and why fixed-size is usually wrongn/a
02The tail at scalen/a
02Idempotency and exactly-oncen/a
04Watermarks in Flink15
10CVSS, EPSS and KEV31, 33
15Design a news feedn/a
16The engineer who has missed three commitmentsn/a
19Drills 1 to 6, spoken form1-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.

ChapterPageDrill
08Serverless or containers: walk the math21
08Where fsync fits in durability22
08eBPF for intermittent latency23
09Invalidating with complex dependencies17
06Knowledge graph vs vector index8
03Choosing a MongoDB shard key26
13Expand and contract64, 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.