The delivery framework: six moves, every time
Clarify, estimate, contract, design, deepen, close. Same order for every prompt.
What you will be able to do
- Run the six phases in order on any prompt
- Allocate the 45 minutes of design time across the phases
- Say a transition sentence that keeps the interviewer oriented
- Recognise the specific failure each phase is designed to prevent
- Work one prompt end to end from clarify to wrap-up
Why a fixed order
Under time pressure, candidates improvise, and improvised rounds reliably fail the same way: a beautiful diagram that answers the wrong problem. A fixed order protects you from that. It also makes you legible — an interviewer who knows which phase you are in can follow a round without effort, and can see the moment you move from breadth to depth.
The framework is six phases. The names change between companies; the underlying moves do not.
Phase 1 — Clarify (5 minutes)
Goal: turn one vague sentence into a list of features, a list of non-goals, and a scale. Ask questions whose answers change the design, and skip the ones that do not.
| Ask | Because it decides |
|---|---|
| Who uses this, and what is the one action they must be able to do? | The feature set, and therefore which components exist at all |
| What is the read to write ratio? | Cache strategy on one side, queue and partitioning on the other |
| How fresh must the data be — milliseconds, seconds, or is a minute fine? | Strong consistency versus replicas and eventual consistency |
| Is this customer facing, or internal batch? | Latency targets, and whether synchronous calls are acceptable |
| What is explicitly out of scope? | Ten minutes of your remaining time |
Then state the scope back in one sentence: "So the core is short links and redirects, custom aliases and analytics are stretch, and out of scope are billing, spam detection, and the UI." That sentence is your contract for the rest of the round.
Phase 2 — Estimate (3 minutes)
Goal: convert the product description into numbers you can reuse in every later decision. Four figures are enough: requests per second, storage per year, bandwidth at peak, and the read/write split. Round aggressively — 86,400 seconds per day is 100,000, and 100,000 is the only number you need.
Given: 100M new links per month, 10:1 read to write. writes = 100M / (30 days x 100k s/day) ~= 33 per second reads = 10 x 33 ~= 330 per second storage = 100M x 0.5 KB x 12 months ~= 600 GB per year Peak is usually 3-5x average, so design the write path for ~150/s.
Say the numbers with their consequence attached, not on their own: "330 reads a second is nothing for Postgres, but the read path is 10x the write path, so a cache in front of it is the obvious first lever." An estimate with no decision attached is decoration.
Phase 3 — Entities and contract (5 minutes)
Goal: agree on the nouns of the system and the calls that touch them, before any boxes are drawn. This is the cheapest place to discover a misunderstanding, because nothing has been built on top of it yet.
- Entities: the four to six things the system stores, with their key fields. Link { code, targetUrl, ownerId, createdAt, expiresAt }.
- The one or two access patterns that matter: read a link by code; list a user's links by creation date.
- The API: five calls at most, each with a request and a response shape. POST /links, GET /{code}, GET /links?user=, DELETE /{code}, GET /{code}/stats.
- Say which of these is on the hot path. For a shortener it is the redirect, so that is the one to optimise later.
The API is the highest-value five minutes in the round. Every box you draw afterwards exists to serve one of these calls, and the interviewer can now check your design against something concrete.
Phase 4 — High-level design (15 minutes)
Goal: a diagram where every functional requirement from phase 1 is satisfied by some path through the boxes. Correct and complete matters here; fast and scalable does not yet. A design that works end to end and clearly will not scale is a better answer than one that scales but drops a feature.
Phase 5 — Deep dives (15 minutes)
Goal: two or three hard parts solved properly, each with options, a choice, a cost and a number. Pick them by risk, not by interest — the thing most likely to break under the stated scale is the thing to solve.
For a shortener, the three candidate dives are code generation without collisions, the hot read path, and analytics that cannot slow redirects down. Choose two and say why you chose them: "Collisions and the redirect hot path are where this breaks at scale, so let me spend the time there rather than on the admin UI."
| Move | Sounds like |
|---|---|
| Name the options | "For codes I could hash the URL, use a counter encoded in base62, or generate random strings and check." |
| Pick one and justify | "Counter plus base62 is shortest and never collides, but it leaks volume and forces a central sequence." |
| Name the cost | "That means one write bottleneck; I would hand out ID ranges per app server so the counter is not on the hot path." |
| Attach a number | "Seven base62 characters gives 3.5 trillion codes, so we never run out." |
| Name what breaks it | "If a range is lost with a crashed server we leak codes — acceptable, since codes are cheap." |
Phase 6 — Wrap-up (5 minutes)
Goal: show you know where your own design is weakest, and what you would do next with more time. Three sentences do it:
- Recap: "We scoped short links with analytics, chose counter-based codes with per-server ranges, cached the redirect path, and streamed click events."
- Weakest part: "The analytics pipeline is the least proven piece — at 100k events a second I would want to verify consumer lag before trusting it."
- Next with more time, or your questions for them: "Next I would add abuse detection and expiry sweeps. Happy to go deeper on anything."
Worth remembering
- The order is fixed: clarify, estimate, contract, high-level design, deep dives, wrap-up. The clock within it is flexible.
- Phases one to three take 15 minutes and remove most of the ambiguity. The following 30 are where depth is scored.
- Every transition gets a sentence: "That covers scope, so let me estimate scale and then draw the design."
- The wrap-up is not filler. Naming the weakest part of your own design is a scored move.