NEW: ML Mock & Coaching with a 20+ year experience coach. Save $20 on sessions for Premium.ML Mock & Coaching now available
NEW: ML Mock & Coaching with a 20+ year experience coach. Save $20 on sessions for Premium.ML Mock & Coaching now available
Overview
A repeatable routine for the silent-read window: restate the goal, make the numbers close, trace one request end to end, ask what breaks first, then rank and recommend. With a table of doc smells and a self-check.
Was this lesson helpful?
Finished this lesson?
Sign in to save your progress across devices.
Tip: use ← and → to move between lessons.
You have about ten minutes alone with the doc before the conversation starts. What you do with them decides the round. Reading top to bottom and underlining things that look odd produces a flat list of observations. The framework below produces a ranked list of findings, each with a fix, and it does so in the same ten minutes.
Five passes. Each one has a single question and a single output. Do them in order; later passes depend on earlier ones.
| The five passes | |||
|---|---|---|---|
| Pass | Question | Output | Time |
| 1. Restate | What is this system for, and under what constraints? | Two sentences you could say out loud | 1 min |
| 2. Numbers | Do the numbers in the doc close? | Per-unit throughput, units needed, units available, latency floor | 3 min |
| 3. Trace | Can one request get from client to response and back? | Gaps, contradictions, unowned state, single points of failure | 3 min |
| 4. Break | What fails first under load, and under failure? | The weakest component and what losing it costs | 2 min |
| 5. Rank | Which of these matter, in what order, and what would I change? | Top three with fix and trade-off; the rest as a list | 1 min |
Read the background and goals sections, then write down, in your own words, what the system must do and what it must not exceed. Two sentences. If you cannot do this, you are not ready to critique anything.
This pass seems trivial and it is the one candidates skip. It matters for two reasons. First, it is what you will say out loud in your opening, and saying it tells the interviewer you understood the doc before judging it. Second, it is where you catch the doc's own contradictions: a goal that the constraints make impossible is visible the moment you write both down next to each other.
Also write down the assumptions the doc states explicitly. Docs that say "we assume X" are telling you where the author was unsure. Each one is a candidate for a clarifying question, and one of them is usually the thing that breaks.
If the doc has any numbers, multiply them. Throughput per unit of capacity, units needed at average and at peak, units available, the smallest latency a request can possibly see. If the doc has no numbers, supply plausible ones and say they are yours.
The single highest-leverage habit in this round. A design doc with a QPS target, a per-request cost and a hardware budget has already told you whether it works; the author just did not do the division. Candidates who do it in the first five minutes set the agenda for the rest of the conversation.
What you are looking for:
Round aggressively. Orders of magnitude are what matter, and false precision costs you time.
Pick a single request and walk it through every box in the doc. Who receives it? Where does it wait? Who decides when it moves? How does its response find the way back? At each hop, ask three things:
The response path deserves its own trace. Docs are good at describing how requests go in and vague about how responses come out, particularly when something in the middle (a batcher, a queue, an async worker) breaks the one-to-one mapping between a request and the connection waiting for it.
Two scenarios, two minutes.
Under load. Traffic is three times the design point. Which component saturates first? What happens to the requests it cannot handle: do they wait forever, fail fast, or crash the component? A design with no backpressure and no load shedding will do the first or the third.
Under failure. The weakest component you found in pass 3 dies. What is lost? In-flight requests, queued requests, the mapping from responses to clients, the ability to make progress at all? Is the loss acceptable for this product, and did the author decide that or just not think about it?
You are not looking for every failure mode. You are looking for the one that would be on the incident report, and for whether the doc knows about it.
You now have somewhere between six and fifteen observations. Most candidates fail here: they present them in the order they found them, at equal volume. Rank them instead, using severity:
| Severity ladder | ||
|---|---|---|
| Level | Meaning | Example |
| Blocks the goal | If ignored, the project fails at its own stated objective | The hardware cannot serve the target QPS; runs are not reproducible in a tool whose purpose is iteration |
| Correctness | The system produces wrong results or loses data in normal operation | Responses cannot be routed back to the right client; concurrent saves silently overwrite each other |
| Reliability | Works normally, fails badly | In-memory queue on a single active instance; no backpressure under overload |
| Operability | Works, but you cannot run it | No health checks, no metrics, no retry on worker death, rate limits that need shared state the doc does not have |
Pick the top three. For each, write one line: the issue, the fix, the trade-off the fix introduces. A fix with no trade-off is usually a sign you have not thought it through; most real changes cost something, and naming the cost is what separates a reviewer from a critic.
Finally, write down one thing the doc gets right. You will say it early. It is not politeness; it is calibration. A reviewer who finds nothing good is as useless as one who finds nothing bad.
Patterns that show up in interview docs again and again. When you see one, you know what to ask.
| Smells and questions | |
|---|---|
| You see | You ask |
| "We assume X" with no justification | What happens if X is false? Is it false for the tail? |
| A goal with a number and a budget with a number | Have we divided one by the other? |
| "Stateless" next to a thing that holds a connection or a counter | Where does that state actually live? |
| "One active instance with a hot standby" | What does the standby know when it takes over? |
| "Round-robin" to workers that can be busy | What happens when the next worker in rotation is not free? |
| "In-memory queue" | What bounds it, and what is lost when the process dies? |
Run this after every practice attempt, before you open the answer key.
Next: how to deliver the review, because a correct ranked list said badly still scores badly.
| Clarity | The doc is inconsistent or incomplete, the design may be fine | Request flow contradicts the overview; a queue with no named owner |
| Nits | Would mention in a written review, not out loud | Naming, endpoint shape, minor wording |
| A request flow with a step the overview does not mention | Which one is the design? |
| Responses "are returned" with no mechanism | Returned how, to which connection, matched by what id? |
| "No rate limiting needed" | What is the worst day, and who pays for it? |
| A secret in a client, a config file, or a build step | Who can read it? |
| A mutable row referenced by immutable records | What did record 14 actually see? |
| "Save on every keystroke" | How many writes per second, and what happens with two tabs? |
| No capacity section at all | Let me do the numbers. Here is what I get. |