Twelve questions, and what an answer looks like
coreadvancedTwelve questions, in four families. Sizing and choosing: how to estimate peak requests per second, how to choose between SQL and NoSQL, how to choose a cache strategy. Making reads fast: how to scale a read-heavy system, how to handle database contention, how to detect N+1 queries and network bottlenecks. Doing it exactly once: how to prevent double processing, how to handle retries, how to design idempotent APIs. Surviving failure: how to model an asynchronous workflow, how to design for regional failure, how to recover from a dependency failure. What makes the list useful is not the topics — it is that every one of them can be answered with a product name, and none of those answers survives a single follow-up. "We use Redis" is not a cache strategy; the strategy is which pattern, keyed on what, invalidated how, and what happens on a miss storm. "We use SQS" is not a way to prevent double processing; delivery is at-least-once, so the consumer has to be idempotent regardless. A real answer names a mechanism and the condition under which it stops working, and it can usually be given in three sentences. If it takes longer, the answer is being reconstructed rather than recalled — which is the actual thing the list measures.
Think of it as
Twelve questions a colleague could ask you at a whiteboard with no warning. The test is not whether you could work each one out — you could — it is whether the answer is already assembled. Assembled answers are what let a design conversation stay on the part that is specific to this system, instead of re-deriving standard machinery in the room.
What we're doing: Answer two of the twelve out loud, and see where the follow-up lands.
- 12
- Working forward from a business number rather than from an infrastructure guess is what makes the estimate checkable. Every step is one arithmetic operation someone can dispute.
- 20
- Naming the peak factor is the whole answer. An unstated 5x and an unstated 20x produce very different systems and look identical in a design document.
- 48
- This is the most common product-name non-answer in the whole list, and it is wrong on the facts: standard queues are explicitly at-least-once, so the guarantee being cited does not exist.
- 68
- Moving the effect outside the database is the standard follow-up for any idempotency answer, and it is where a memorised answer separates from an understood one.
Why this works: Every strong answer here is three or four sentences and contains one stated assumption. That assumption is what the follow-up targets — which is the point: an answer with no assumption in it cannot be examined, and an answer that has never been examined is the one that fails in a design nobody questioned.
Answering with a product name
Wrong
Better
What you see: A design conversation where every question is answered instantly, nothing is disputed, and the resulting system has three technologies in it that nobody can say what problem they solve.
Why: A product name is a possible implementation of an answer, not the answer, so it skips the step where the problem gets characterised. That step is the only part that is specific to your system — and it is exactly the part a follow-up question is aiming at.
- Sizing and choosing
- Peak RPS — average × a stated peak factor
- SQL vs NoSQL — by access patterns
- Cache strategy — pattern + key + TTL + invalidation
- Making reads fast
- Scale a read-heavy system
- Database contention
- N+1 and network bottlenecks — count queries in a trace
- Doing it exactly once
- Prevent double processing
- Retries — bounded, jittered, transient only
- Idempotent APIs — one problem, three directions
- Surviving failure
- Async workflows — a state machine with terminal states
- Regional failure — RPO and RTO decide the shape
- Dependency failure — timeout · breaker · degraded mode
The twelve, with an answer that names a mechanism
The same question, answered two ways
Remember: Twelve questions in four families: sizing and choosing (peak RPS, SQL vs NoSQL, cache strategy), making reads fast (read-heavy scaling, contention, N+1 and network bottlenecks), doing it exactly once (double processing, retries, idempotent APIs — one problem from three directions), and surviving failure (async workflows, regional failure, dependency failure). Each answer names a mechanism and one stated assumption, and fits in three sentences. A product name is not an answer, and the follow-up question is always aimed at the assumption you did not say out loud.
See also: core formulas · choosing a data model · cache patterns · idempotent consumer design · idempotency keys for post requests · backoff and jitter · rpo vs rto · combining the defenses

