The template: seven steps for a 45-minute interview
Treat these time boxes as a starting point, not a schedule you must defend. Confirm the interview length and adjust when the interviewer asks for a deeper discussion.
Keep a small requirements list beside the diagram. Every major component should support a requirement, enforce a correctness rule, or address a specific bottleneck.
- Requirements, 5 minutes: agree on core operations, scope, and quality targets.
- Estimates, 4 minutes: size the traffic, storage, or connections that affect the design.
- APIs and data, 6 minutes: define the important requests, entities, keys, and correctness rules.
- Baseline architecture, 8 minutes: trace one complete write path and read path.
- Deep dives, 14 minutes: resolve one or two problem-specific challenges with the interviewer.
- Failure and operations review, 5 minutes: check retries, overload, recovery, security, and monitoring.
- Recap, 3 minutes: connect decisions to requirements and name the remaining limitations.
1. Clarify what you are designing
Start with user actions rather than infrastructure. For a URL shortener, ask whether users need custom aliases, expiration, analytics, or editable destinations. Agree on the core flow before adding optional features.
Separate functional requirements from quality targets and correctness rules. Low redirect latency is a quality target; never assigning the same active code to two destinations is a correctness rule. If the interviewer leaves something open, state an assumption and invite correction.
- Who uses the system, and what are the two or three essential operations?
- What is explicitly out of scope?
- What latency, availability, durability, and freshness matter for each operation?
- Which outcomes must never happen, such as overselling a seat or charging twice?
- Is the initial scope one region, several regions, or a global service?
- What should users see when a dependency is unavailable?
2. Estimate only what changes a decision
Use back-of-the-envelope estimates to identify pressure points, not to fill the board with arithmetic. Distinguish average traffic from peak traffic, and request rate from concurrent connections. State whether each input came from the prompt or is your assumption.
For example, assume 10 million daily active users each make 20 reads per day. That is 200 million reads per day, or roughly 2,300 reads per second on average. If you assume a peak of five times the average, plan the discussion around roughly 12,000 peak reads per second, then explain which layer must absorb that load.
- Average requests per second = daily requests / 86,400.
- Stored bytes = write rate × average record size × retention, with separate allowances for indexes, replicas, and backups.
- Transfer rate = requests per second × average payload size.
- For chat or live feeds, estimate active connections and per-event fan-out.
- Check skew: a single popular key, document, or customer may matter more than the overall average.
- End each estimate with a consequence, such as needing a CDN, bounded retention, or partitioned writes.
3. Define APIs, data, and correctness rules
Sketch only the APIs needed to explain the main flows. Include inputs, identifiers, important responses, and retry behavior. For booking, a request that creates a temporary hold is different from one that confirms a reservation, so expose that distinction.
Then describe the source-of-truth records and their access patterns. Choose a database based on required transactions, queries, indexes, and scale rather than saying that SQL cannot scale or NoSQL is always faster. Make the atomic boundary explicit: what must commit together, and what can happen later?
- Name the main entities, identifiers, and relationships.
- Show the lookup keys and indexes for the critical queries.
- Define uniqueness constraints and state transitions.
- Explain whether a retried create or payment request needs an idempotency key.
- Specify pagination, expiration, and deletion behavior where relevant.
- Separate authoritative state from caches, search indexes, and derived counters.
4. Draw the simplest complete architecture
Start with a design that can serve the agreed workload: clients, request routing, application logic, and durable storage. Add a cache, queue, object store, or specialized index only when you can explain what it solves. A small number of well-defined services is easier to reason about than a diagram full of unexplained microservices.
Walk through one write and one read from start to finish. Say when the system acknowledges success, where data becomes durable, and which steps are synchronous. If background processing is involved, show how work is recorded durably and how its status becomes visible.
- Label arrows with actions such as create hold, persist message, or fetch destination.
- Identify the source of truth for each important piece of state.
- Show cache hits and misses if caching is necessary.
- Explain why asynchronous work is safe to defer.
- Check that the diagram actually supports every in-scope operation.
5. Spend the deep dive on the system's hard part
Propose one or two areas and ask which the interviewer wants to explore. The best deep dive is usually where scale, concurrency, or failure threatens a core requirement. Do not spend ten minutes on load balancing when the problem is preventing two buyers from purchasing the same seat.
For each decision, state the requirement, a viable alternative, your choice, and its cost. For example: “I will use conditional updates for seat holds so competing requests cannot both acquire the same seat. Contended requests may fail and retry, so I will also limit admission during bursts.”
- URL shortener: code uniqueness, redirect caching, and hot destinations.
- Notification system: durable dispatch, duplicate delivery, and provider failures.
- News feed: fan-out on write versus read, including high-follower accounts.
- Chat: reconnects, offline delivery, and the scope of message ordering.
- Booking or payments: concurrent state transitions and uncertain external outcomes.
- Search: index freshness and permission checks when visibility changes.
6. Test failures, retries, and security boundaries
Challenge the design with concrete failures: a worker crashes after performing a side effect, a database write succeeds but the response is lost, or a cache serves an old value. Explain what the client observes and how the system recovers. A retry is not a complete answer unless you explain whether repeating the operation is safe.
State consistency requirements per operation. Search results may tolerate delay while inventory allocation requires an atomic decision. Check authorization on protected resources, including paths through caches and background workers; possession of an object ID should not imply access.
- Where does a timeout leave the outcome unknown, and how can it be resolved?
- Which operations are idempotent, and where is deduplication state stored?
- Can a database update succeed without its corresponding event being published?
- Are retries bounded, delayed with backoff, and safe during an outage?
- What happens when a queue backs up or a dependency becomes slow?
- Which data may be stale, and what enforces the required freshness elsewhere?
- What data needs access controls, encryption, retention limits, or an audit trail?
7. Explain growth and how you would operate the system
Identify the first likely bottleneck before proposing sharding or more regions. Name the constrained resource: CPU, database write throughput, storage, network transfer, connection count, or a hot partition. Explain what measurement would justify the next architectural change.
Tie monitoring to user-visible behavior and internal health. Useful signals include request latency and errors, queue age, replication lag, cache hit rate, and rejected work. Include a correctness check where needed, such as reconciling payment records against external settlement results.
- Explain what can scale horizontally and what still coordinates through shared state.
- Choose partition keys using access patterns and skew, not just even hashing.
- Describe admission control or load shedding when adding capacity is too slow.
- Define degraded behavior, such as delaying analytics while preserving checkout.
- Distinguish replica failover from recovery after deletion or corruption.
- If proposing multiple regions, explain write ownership, replication, and failover behavior.
Close with decisions, not a component inventory
Use the final minutes to summarize how the design meets the agreed requirements. Name the two most important trade-offs and one unresolved risk. For example: “Redirects use a cache to reduce database reads, but destination edits may remain stale until invalidation or expiration. The next scaling concern is a small number of extremely popular codes.”
Adapt the framework to the prompt. A distributed cache interview needs early discussion of ownership, eviction, and failover; a payment interview needs early discussion of ledger correctness and uncertain outcomes. If time is short, prioritize a complete core flow and its hardest correctness problem over optional features.
- Restate the core scope and assumptions.
- Connect major choices to latency, scale, durability, or correctness.
- Name the most important compromise and when you would revisit it.
- Identify the next bottleneck or validation step.
- Avoid introducing a new subsystem during the recap.
Where it comes up
Questions to practice with this guide.
- Design a URL shortener like BitlyIt is a compact way to practice the full framework, from traffic estimates and key design to redirect caching and hot-key behavior.
- Design a ticket booking system like TicketmasterIt tests whether the template leads to explicit inventory invariants, atomic holds, and payment-race handling rather than a generic architecture.
- Design a notification systemIt exercises the asynchronous path, including durable dispatch, retries, duplicate delivery, and provider failures.
- Design a chat app like WhatsAppIt shows how to adapt estimates and deep dives for persistent connections, message ordering, reconnects, and offline delivery.
Questions people ask
What is the best system design interview framework?
Use requirements, estimates, APIs and data, baseline architecture, deep dives, failure review, and recap. This gives the conversation structure while leaving room for problem-specific decisions. The strongest framework makes assumptions and trade-offs visible rather than prescribing the same components every time.
How should I manage time in a system design interview?
For a 45-minute interview, aim to have a complete baseline within roughly the first half so there is time to explore the hard parts. Confirm the interview length, use approximate time boxes, and adjust to the interviewer's questions. Leave a few minutes to check failures and summarize your choices.
Should every system design include a cache, queue, and sharded database?
No. Each component should address a demonstrated requirement or bottleneck, and each introduces costs such as stale data, duplicate processing, or operational complexity. Start with a complete baseline, then explain what evidence would justify adding more infrastructure.