Track A — Coding Under Time Pressure
The reported onsite has two coding rounds, and the first uses a progressive multi-part format that the source candidate explicitly said he did not know how to prepare for (
../../research/source-report.mdrow 41). That makes it the least-practised round in the loop and the highest-leverage thing in this program.This track is not a LeetCode grind. It is a taxonomy of stateful systems problems built to match what these loops reportedly ask.
→ Study guide: WARMUP.md — the ten patterns from first principles, with complete runnable implementations, complexity tables and failure modes. Read that to learn the material; read this file to know what to practise and how you are scored.
→ QUIZBANK.md — 150 questions asked after your code works, with mechanism-level answers. The round is not decided by the tests passing; it is decided by the ten minutes afterwards when the interviewer asks why. Work a harness problem, then answer that section out loud before reading it.
Table of Contents
- What This Round Actually Is
- Concept Inventory
- The Progressive Harness
- The Problem Set
- Drill Set
- Time-to-First-Correct
- The Talk-While-Coding Checklist
- Failure Modes
- Self-Assessment Rubric
- References
What This Round Actually Is
Three reported facts define it:
- Progressive gates. Each problem has roughly four stages of increasing difficulty. Each stage must work before the next opens. The reported pass bar is clearing two; at least one source reports a stricter bar. Assume the stricter one — the asymmetry of that error is total.
- Volume. Multiple sources report that you write substantially more code than in a typical FAANG interview, and that solutions are judged on production quality — real edge cases, maintainable structure — not on cleverness.
- Practical, not algorithmic. One source states flatly that string-manipulation puzzles do not appear. What appears is stateful data structures, versioning, streaming, parsing, caching, scheduling, and concurrency.
The structural consequence, and it is not obvious: the gated format inverts the normal optimization. In a standard round you can spend fifteen minutes designing before writing. In a gated format, every minute of upfront design is stolen from stages 2–4, and a gate you never open scores zero regardless of how elegant your unwritten design was.
So you need a habit most senior engineers have spent a decade unlearning: build the smallest correct thing fast, then extend it under pressure. But — and this is the tension the format actually tests — your stage-1 code must be extensible, because you will be extending it in eight minutes with no warning about the direction.
Fast and extensible. That is trainable, and this track trains it.
Concept Inventory
Every item names the file that teaches it and the problem that drills it.
A1. Stateful data structures
| Concept | Taught in | Drilled by |
|---|---|---|
| Versioning and MVCC | harness/problems/versioned_kv/README.md | versioned-kv |
| Snapshot isolation, write skew | same | versioned-kv gate 4 |
| Tombstones and logical deletion | same | versioned-kv gate 2 |
| Compaction and reachability GC | same | versioned-kv gate 3 |
| Predecessor queries and why they need order | same | versioned-kv gate 1 |
| LRU via intrusive linked list + dict | Track A drill notes | lru-ttl-cache |
| TTL: lazy vs sampled vs active expiry | same | lru-ttl-cache gate 2 |
| Write-ahead logging and replay | same | wal-store |
| Inverted indexes and segment merging | same | text-index |
A2. Streaming and incremental algorithms
| Concept | Taught in | Drilled by |
|---|---|---|
| Online vs offline algorithms | harness/problems/token_stream_differ/README.md | token-stream-differ |
| Delta records vs state snapshots | same | token-stream-differ gates 3–4 |
| Bounded lookahead as the price of being online | same | token-stream-differ gate 2 |
| Checkpoint / rollback / undo semantics | same | token-stream-differ gates 3–4 |
| Chunk-boundary-safe tokenization | catalog brief | streaming-parser |
| Windowed deduplication and its correctness cost | catalog brief | event-dedupe |
| Resumable iteration with serializable state | ../../diagnostics/ANSWER-KEY.md | resumable-iterator |
A3. Concurrency and backpressure
| Concept | Taught in | Drilled by |
|---|---|---|
| Bounded queues and real backpressure | catalog brief | bounded-queue-backpressure |
| Graceful shutdown and drain | same | bounded-queue-backpressure gate 2 |
| Cancellation propagation | Track B | bounded-queue-backpressure gate 3 |
| Bounded concurrency (semaphores) | catalog brief | async-crawler |
| Per-key sharded locking | catalog brief | rate-limiter gate 3 |
| Single-flight / stampede control | catalog brief | lru-ttl-cache gate 4 |
| Load shedding vs queueing | Track C | bounded-queue-backpressure gate 4 |
A4. Rate limiting and scheduling
| Concept | Taught in | Drilled by |
|---|---|---|
| Token bucket, lazy refill, injectable clocks | catalog brief | rate-limiter |
| Fixed vs sliding window, and the boundary burst | same | rate-limiter gate 2 |
| Distributed limiting, fail-open vs fail-closed | same | rate-limiter gate 4 |
| Heap-based delayed execution, deterministic ties | catalog brief | job-scheduler-inmem |
| Fixed-rate vs fixed-delay recurrence | same | job-scheduler-inmem gate 2 |
| Backoff with jitter (full / equal / decorrelated) | ../README.md | job-scheduler-inmem gate 3 |
| Priority without starvation; per-tenant caps | same | job-scheduler-inmem gate 4 |
A5. Parsing and memory
| Concept | Taught in | Drilled by |
|---|---|---|
| Char-level state machines over regexes | catalog brief | streaming-parser |
| Dependency graphs, topological order, cycle detection | catalog brief | spreadsheet-eval |
| Incremental recomputation | same | spreadsheet-eval gate 3 |
| Symlink resolution and ELOOP | catalog brief | path-resolver |
__slots__, measured | Track B | object-pool gate 2 |
memoryview and zero-copy | Track B | object-pool gate 3 |
| Bloom/cuckoo filters and error direction | catalog brief | event-dedupe gate 3 |
The Progressive Harness
cd tracks/coding/harness
./progressive.py list # the catalog
./progressive.py start token-stream-differ # begin; prints gate 1 ONLY
./progressive.py test token-stream-differ # run current gate; unlock on pass
./progressive.py chart # time-to-first-gate trend
The harness enforces the format's actual constraint: gate N+1 is not printed until gate N's tests pass. You cannot design for requirements you have not seen, which is precisely the difficulty the real round exercises.
It records, per gate: wall-clock time at first pass, and how many test runs it took. From that it derives the metric that matters — see below.
Rules for using it honestly:
- Do not read
problems/*/README.mdorsolution.pybefore finishing. They contain the gate structure. - Do not open the gate tests. Same reason.
- Narrate out loud, recorded, every time.
- When the budget expires, stop. A problem finished in 70 minutes tells you nothing about a 45-minute round.
The Problem Set
Fifteen problems, four gates each. Run ./progressive.py list for the live catalog.
| Problem | Themes | Budget | Gates | Source-report link |
|---|---|---|---|---|
versioned-kv | state, memory | 45m | ✅ | Row 7 — the reported screen question |
token-stream-differ | streaming, state, memory | 45m | ✅ | Rows 19–20 — the reported onsite question |
rate-limiter | state, concurrency | 40m | ✅ | Corroborated as a recurring pattern |
lru-ttl-cache | state, memory | 40m | ✅ | Corroborated as a recurring pattern |
resumable-iterator | state, memory, streaming | 40m | ✅ | Corroborated; also the D1 diagnostic |
job-scheduler-inmem | scheduling, concurrency | 45m | ✅ | Companion to row 8's design question |
streaming-parser | parsing, streaming | 45m | ✅ | Off-report breadth |
spreadsheet-eval | parsing, state | 45m | ✅ | Corroborated (dependency evaluation) |
path-resolver | state, parsing | 35m | ✅ | Corroborated (cd with symlinks) |
bounded-queue-backpressure | concurrency, streaming | 45m | ✅ | Row 23 — concurrency theme |
wal-store | state, memory | 45m | ✅ | Off-report breadth |
text-index | state, memory, streaming | 45m | ✅ | Your home turf — should be your fastest |
event-dedupe | state, memory, streaming | 40m | ✅ | Feeds the webhook project |
async-crawler | concurrency, streaming | 45m | ✅ | Corroborated (multithreaded crawler) |
object-pool | memory, concurrency | 35m | ✅ | Row 23 — memory-efficiency theme |
All fifteen have automated gate tests — 60 gates, all green. Run them against the
reference solutions any time with python3 harness/runtests.py; the whole suite takes about
six seconds. Each problem's solution.py carries a module docstring explaining the
representation that survives all four gates, and the harness prints the WARMUP chapter that
teaches the pattern once you finish.
Roughly a quarter of the set is deliberately off the source report. One candidate account must not be allowed to narrow preparation into a blind spot — see the anti-narrowing clause.
Drill Set
| Drill | Cadence | What it trains |
|---|---|---|
| Full gated run | 3×/week | The actual round. One problem, budget enforced, narrated, recorded |
| Gate-1 sprint | Daily, 12 min | Only gate 1 of a fresh problem. Trains time-to-first-correct in isolation |
| Cold re-run | Weekly | A problem from ≥3 weeks ago, from scratch. Exposes memorization vs skill |
| Extension drill | Weekly | Take a finished problem and have me invent a fifth gate. Trains extending under surprise |
| Invariant-first | Every problem | Write the assertion that pins the tricky invariant before implementing |
| Typing throughput | 10 min, 3×/week | Type a known-good 120-line solution from memory. Reported signal is code volume; keyboard speed is a real, trainable variable |
| Narration-only | Weekly | Solve with your hands off the keyboard, speaking the code. Brutal, and it fixes the go-silent-when-stuck reflex faster than anything else |
Time-to-First-Correct
The metric the whole track optimizes. ./progressive.py chart plots it.
Why it dominates: in a gated format an unopened gate scores zero. Two candidates who both understand the problem perfectly, one reaching gate 1 at minute 8 and the other at minute 20, do not finish 12 minutes apart — they finish one to two gates apart, because the later gates are where the time goes.
| Time to G1 | Reading | The fix |
|---|---|---|
| ≤ 8 min | Strong | Work on extensibility, not speed |
| 9–15 min | Normal | Volume. Gate-1 sprints daily |
| 16–25 min | Over-designing | Set a 10-minute alarm. When it fires, whatever you have must run |
| > 25 min | Format failure | Gate-1 sprints only, for two weeks, before any full runs |
The trap on the other side: rushing gate 1 with a representation that dies at gate 3 costs more than a slow start. Both failure modes are visible in the harness log — a fast G1 followed by a long G3 gap is the signature of a bad representation, and it is exactly what the extension drill trains against.
The reconciliation is not "design longer." It is asking better clarifying questions in the first two minutes. In both automated problems, one question at minute one determines whether gate 3 is additive or a rewrite. That is the skill.
The Talk-While-Coding Checklist
Every problem, every time, out loud:
- Restate the problem in your own words.
- Clarify — at least two questions, and at least one that could change your representation. (Not "should I handle empty input." Something like "is the source replayable?" or "are versions global or per key?")
- State the approach in two sentences, and name the data structure.
- State the complexity before implementing, not after.
- Write the test for the tricky invariant first.
- Code, narrating decisions — not keystrokes. "I'm recording the event count per feed so I can unwind it later" is a decision. "Now I'm writing a for loop" is a keystroke.
- When stuck, keep talking. Say what you tried and why it failed. Silence is the single costliest narration failure: the interviewer cannot give you a hint they do not know you need, and it reads as lost even when you are thinking productively.
Self-score 0–5 after each recording. Anything below 3 twice in a row triggers a narration-only drill.
Failure Modes
| Failure | Symptom in the harness | Fix |
|---|---|---|
| Over-designing gate 1 | Time-to-G1 > 16 min | Gate-1 sprints; 10-minute alarm |
| Under-designing gate 1 | Fast G1, then a rewrite at G3 | Better clarifying questions, not longer design |
| Rewrite at any gate | Large gap between gate times | Extension drill; ask "what breaks if this needs to be reversible?" |
| Silent debugging | Narration score ≤ 2 | Narration-only drill |
| Testing at the end | Many test runs on the final gate | Invariant-first drill |
| Complexity blindness | Passes tests, cannot state the complexity | State it out loud before coding, every time |
| Not reading the spec | Failures on edge cases stated in the brief | Re-read the brief after your first passing run, before submitting |
| Ignoring the budget | Completions over budget | Stop at the budget. Log the gate you were on |
| Memorization | Cold re-run much slower than the original | You learned the answer, not the skill. More variety, less repetition |
Self-Assessment Rubric
Level bands
| Level | Standard |
|---|---|
| L0 | ≤1 gate within budget, or time-to-G1 > 25 min |
| L1 | 2 gates within budget; time-to-G1 9–15 min; occasional rewrites |
| L2 | 3 gates within budget; time-to-G1 ≤ 12 min; no rewrites; narration ≥ 3 |
| L3 | 4 gates within budget; time-to-G1 ≤ 8 min; representation survives all gates; narration ≥ 4 |
Hire-bar translation
| Verdict | What it looks like |
|---|---|
| No hire | No working solution, or needed substantial hints to reach one |
| Hire (senior) | Working solution, some prompting, reasonable complexity stated |
| Strong hire (senior) | Working, unprompted, clean, tested the tricky invariant first |
| Hire (staff) | Above, plus the initial design anticipated the next stage |
| Strong hire (staff) | Above, plus taught the interviewer something about the problem |
L3 is not "solved it." L3 is "chose a representation at minute three that made minute forty easy."
References
harness/progressive.py— the harnessharness/problems/__init__.py— the full catalog with gate briefs../../research/source-report.md— rows 7, 17–23, 41../../research/findings.md— corroborated problem patterns../python-internals/README.md— where Coding 2's follow-ups live- Sedgewick, R. and Wayne, K. Algorithms, 4th ed. — for the structures, not the puzzles
- Kleppmann, M. Designing Data-Intensive Applications, 2nd ed. — Ch. 3 (LSM, B-trees, WAL), Ch. 7 (snapshot isolation, write skew)
- Brooker, M. Exponential Backoff and Jitter. https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/