01Drive a shared agenda
Restate the problem, ask architecture-changing questions, state assumptions, estimate scale, and propose the two areas worth deeper attention. Tell the interviewer how you plan to spend time and invite correction.
Open with a short restatement and a few questions whose answers change architecture. For a public inference API, ask who the tenants are, which capabilities are required, whether requests stream, and what latency and spend limits matter. State supplied facts separately from assumptions. You do not need to collect every possible requirement before showing a first design.
Propose an agenda after the initial estimate: “I will cover the request contract and data ownership, then go deep on admission and streaming recovery.” This gives the interviewer a chance to redirect. Keep a visible list of invariants and unresolved questions so later choices can refer back to them. Check that the discussion is still solving the same problem after a constraint changes.
Allocate time adaptively. If the interviewer chooses the data model, shorten a less important capacity discussion rather than ignoring the request to preserve a memorized timeline. Reserve time to close with failure, security, cost, and risks. A useful structure prevents omissions while leaving room for collaboration.
- Keep a visible requirements/SLO list
- Use named arrows and numbered request flows
- Pause for steering at phase boundaries
02Narrate decisions, not drawing
Instead of ‘then add Redis,’ say ‘reads outnumber writes 100:1 and allow 30 seconds of staleness, so a regional cache removes primary load; here is invalidation and failure behavior.’
Narrate one numbered request end to end. A tenant submits an operation ID; admission reserves estimated token capacity; a worker streams typed events; completion reconciles usage and persists status. At each boundary explain authority, durability, deadline, and recovery. This exposes correctness more effectively than naming a gateway, queue, and database without connecting them.
Use numbers where they decide something. If the survivor region cannot serve failed-over traffic within the SLO, calculate the shortfall and choose admission or reserved capacity. If the bottleneck is one hot key, do not present aggregate capacity as the answer. Distinguish illustrative assumptions from measured limits so the listener can see what needs a benchmark.
Make tradeoffs in complete sentences. “This queue absorbs bursts but adds waiting time and an operational dependency; the client gets durable status and can cancel before execution” connects mechanism to consequence. Name the drawback before you are asked. A design review evaluates judgment, not whether every component seems beneficial in isolation.
- Mechanism follows constraint
- Every component gets an owner and failure mode
- Revisit estimates at bottlenecks
03Recover like a senior engineer
When a flaw appears, acknowledge it precisely, preserve the product invariant, and change the smallest necessary part. Explain migration or reconciliation if data/state already exists.
When you discover a flaw, name its effect precisely. “A retry can create a second charge because the provider result is not durably tied to the operation ID” is actionable. “Reliability is a concern” is too broad. Preserve the business invariant, then add the smallest repair and explain any new failure state it introduces.
For existing data, include transition behavior. Adding an idempotency table today does not identify yesterday's ambiguous operations. You may need a reconciliation process before enabling automatic retries. Acknowledging that limitation demonstrates operational reasoning; quietly redrawing the happy path leaves the real system in an undefined state.
After the mock, use evidence rather than a feeling of fluency. Pick timestamps showing whether you quantified the bottleneck, traced an uncertain effect, or revised a changed assumption. Rehearse the weakest segment by itself, then try a fresh prompt. Improvement should appear in a new decision or clearer explanation, not only a higher self-assigned number.
- Do not erase the whole design reflexively
- State what remains valid
- Close with risks, metrics, and next experiment