Back to Blog
System DesignInterview TipsDistributed SystemsFAANG

The System Design Interview Framework: A Step-by-Step Guide (2026)

Amit Singh

Amit Singh

Author

June 25, 2026
16 min read

The secret to system design interviews is that they are not open-ended — they follow a script. Clarify the requirements, estimate the scale, sketch the API and data model, draw a high-level design, deep-dive the one or two hard parts, then name the trade-offs. Run that loop and "design Instagram / a URL shortener / a rate limiter" all become the same seven moves with different details. This is the framework I teach, with timings for a 45-minute round, an estimation cheat-sheet you can memorize, and a calculator you can play with.

System design interviews feel intimidating because there is no single right answer. But interviewers are not grading the answer — they are grading the process: can you take an ambiguous prompt, reason about scale, and defend your decisions like a senior engineer? A framework makes that process repeatable, and repeatable is what survives interview nerves.

The 7-step framework

The 7-step loop
1 Clarifyrequirements2 Estimatescale3 APIthe contract4 Data modelaccess pattern5 HLDboxes + flow6 Deep divethe hard part7 Trade-offswhat breaks at 10xiterate
The same seven moves run on every 'design X' question. The deep dive is where the interview is won; a new requirement sends you back around the loop.
StepTimeWhat you do
1. Clarify requirements~5 minPin functional + non-functional scope; ask, don't assume
2. Estimate scale~5 minBack-of-envelope: QPS, storage, read/write ratio
3. Define the API~3 minThe handful of endpoints the system exposes
4. Data model~4 minCore entities + access patterns first, then pick the store
5. High-level design~8 minBoxes and arrows: clients → services → storage
6. Deep dive~15 minThe 1–2 genuinely hard parts (the interview is won here)
7. Bottlenecks & trade-offs~5 minWhat breaks at 10×, and what you'd change

1. Clarify requirements

Separate functional ("shorten a URL and redirect it") from non-functional ("highly available, sub-100 ms reads, read-heavy"). The non-functional requirements drive every later decision, so surface them now. Quantify them: not "fast" but "redirects under 100 ms at the 99th percentile"; not "reliable" but "99.99% available." Write them on the board and get the interviewer to agree — this is the contract you will be graded against.

A compact non-functional checklist to run through every time: availability (how many nines), latency (target percentile), consistency (strong or eventual, and where), durability (can we ever lose data), scale (users, QPS, data size), and the read/write ratio.

2. Estimate scale

Do the arithmetic out loud. Daily active users → requests/sec → storage over N years. You are not after precision; you are showing you can reason about whether the bottleneck is compute, storage, or network — and driving the number to a conclusion. "100 million reads a day is about 1,200 per second average, call it 12,000 at peak — that is why we need a cache, not just a database" is the move. Naming the read/write ratio early is a senior signal: it decides whether you optimize for reads (caching, replicas) or writes (sharding, queues).

You do not need a calculator — you need a few anchors and round powers of ten.

The estimation cheat-sheet

Time: a day ≈ 86,400 s ≈ 10⁵ seconds. So X per day ≈ X / 10⁵ per second. Apply a peak factor of 2–10× over the average.

Data sizes: char ≈ 1 byte · UUID ≈ 16 bytes · timestamp ≈ 8 bytes · a typical metadata row ≈ a few hundred bytes · 1 KB ≈ 10³, 1 MB ≈ 10⁶, 1 GB ≈ 10⁹, 1 TB ≈ 10¹² bytes.

Latency anchors: memory read ≈ 100 ns · SSD random read ≈ 100 µs · network within a datacenter ≈ 0.5 ms · disk seek ≈ 10 ms · cross-continent round trip ≈ 70–150 ms. Memory is roughly 1,000× faster than SSD, which is the whole reason caches exist.

Availability ("nines"): 99% ≈ 3.65 days down/year · 99.9% ≈ 8.8 hours · 99.99% ≈ 52 minutes · 99.999% ≈ 5 minutes.

Storage formula: records × bytes/record × retention-years. QPS formula: daily-events / 10⁵ × peak-factor.

Try it on your own numbers — set the scale and watch the QPS and storage fall out:

Back-of-envelope estimator

interactive
116/s
Write QPS (avg)
11.6K/s
Read QPS (avg)
34.8K/s
Read QPS (peak 3×)
9.1 TB
Storage (5 yr)

A day is about 10⁵ seconds, so events ÷ 86,400 gives QPS; multiply by a peak factor for spikes; storage is records × bytes × retention. The read:write ratio is the number that decides whether you optimize for reads (caching, replicas) or writes (sharding, queues).

3. Define the API

A few clean endpoints. This forces clarity about what the system actually does and creates the contract your design has to satisfy. Default to REST with plural resource names (POST /urls, GET /{shortCode}); reach for WebSockets or SSE when the system is genuinely real-time (chat, presence, live feeds). Derive the user from the auth token, never from the request body.

4. Data model

Name the core entities first — the nouns the system is about (users, posts, follows; or URLs and clicks) — then the access pattern, and only then the technology. "I need a key-value lookup by ID" → a KV store; "I need range queries and joins" → relational; "I need append-heavy writes and time-range reads" → a wide-column store like Cassandra. Picking a database before stating the access pattern is a classic junior mistake; stating the access pattern and letting it choose the store is the senior version of the same step.

5. High-level design

Draw the major components and the data flow between them, one API endpoint at a time. Keep it simple — clients, a load balancer, stateless services, storage, a cache. Resist over-engineering; you add a queue, a second service, or a CDN only when a specific requirement forces it, and you say which requirement. A clean diagram you can talk through beats a sprawling one you cannot.

6. Deep dive (where the interview is won)

The interviewer will push on the hard part — the part that does not scale naively. This is where you show depth, and where mid, senior, and staff candidates separate. Frame each hard choice as a Bad → Good → Great progression so the trade-offs are explicit: for unique IDs, naive prefix (collides) → hashing (collision retries) → counter + base62 (guaranteed, but needs coordination). Common deep-dive territory: sharding strategy, cache invalidation, consistency vs availability, how you avoid a single hot spot, and how the system recovers when a component dies. Spend your time here, not on the easy boxes.

7. Bottlenecks & trade-offs

Proactively name what breaks at 10× scale and the trade-offs you made — consistency vs latency, cost vs performance, 301 vs 302 redirects, SQL vs NoSQL, push vs pull. Map them to reality: "this is the fan-out-on-write vs fan-out-on-read decision Twitter makes." Interviewers love a candidate who critiques their own design before being asked; it is the clearest signal of seniority in the whole round.

The reusable building blocks

Every "design X" answer is assembled from the same dozen components. Know what each one is for and the one trade-off it carries, and most of the high-level design writes itself:

BlockWhat it's forThe trade-off to name
Load balancerSpread traffic across stateless serversL4 (fast, dumb) vs L7 (smart, routing/TLS)
Cache (Redis/Memcached)Serve hot reads from memory (~1,000× faster than disk)Invalidation + staleness; warmup; eviction (LRU)
CDN / edgeServe static + cacheable content near the userCost + invalidation across PoPs
ReplicationCopies for read scale + failoverReplication lag → eventual consistency
Sharding / partitioningSplit data so no node holds it allHot keys; cross-shard queries are painful
Message queue (Kafka/SQS)Decouple producers from consumers; absorb spikesAsync = eventual; need idempotent consumers
Consistent hashingAdd/remove nodes without reshuffling everythingMore complex than mod-N; needs virtual nodes
Object store + CDN (S3)Store large blobs (images, video) cheaplyEventual consistency; not for low-latency metadata
Bloom filterCheap "definitely-not / maybe-yes" membershipFalse positives; cannot delete (basic version)

Each of these gets a full treatment in the fundamentals pillars and the spoke walkthroughs linked below — this table is the index.

The framework on a real problem

Here is all seven steps run tight on the canonical question, a URL shortener, so you can see the loop in motion:

  1. Requirements — shorten a URL, redirect on lookup; highly available, redirects under 100 ms, read-heavy (~100:1).
  2. Estimate — 100 M new URLs/month ≈ 40 writes/s; at 100:1 that is ~4,000 reads/s (more at peak) → the read path needs a cache, the write path is trivial.
  3. APIPOST /urls returns a short code; GET /{code} returns a 301/302 redirect.
  4. Data model — one entity (a URL mapping), pure primary-key lookup by short code → a KV store or an indexed table; shard by hash of the code.
  5. High-level design — client → load balancer → stateless service → cache → database; a read replica or CDN edge in front of reads.
  6. Deep dive — generating the short key (counter + base62 vs hashing) and scaling the read-heavy path (cache → replicas → edge). This is the whole interview.
  7. Trade-offs — 301 (cacheable, fast, loses analytics) vs 302 (control, every hit returns); cache stampede on a hot link; the counter as a single point of coordination.

The full URL shortener walkthrough expands every one of these into the depth an interviewer probes.

What's expected at each level

The same question is graded differently by seniority — calibrate how much the interviewer leads versus how much you drive:

  • Mid-level: reach a working high-level design with prompting; pick a reasonable approach for the crux; recognize the obvious trade-offs when asked.
  • Senior: drive the deep dive yourself; quantify the scale; articulate the Bad/Good/Great for the hard part; name failure modes and the read/write asymmetry without being asked.
  • Staff+: lead the whole conversation; bring up multi-region, failover, and cost unprompted; reason about second-order effects (hot keys, thundering herds, consistency under partition) and product trade-offs.

Common mistakes to avoid

  • Jumping to a solution before clarifying requirements or estimating scale.
  • Ignoring non-functional requirements (availability, latency, the read/write ratio) — they drive the whole design.
  • Picking a database before the access pattern.
  • Over-engineering — adding queues, microservices, and caches no requirement asked for.
  • Burning the clock on easy boxes and arriving at the deep dive with five minutes left.
  • Going silent during the deep dive. Narrate; the interviewer is grading your reasoning, not just the diagram.

Worked walkthroughs: the framework on every classic problem

This is the hub. Each walkthrough below runs the same seven steps and then goes deep on where that problem is actually decided:

And the fundamentals every one of them rests on: how a web request travels (DNS → TCP → TLS → HTTP).

Bottom line

System design interviews reward a repeatable process more than encyclopedic knowledge. Internalize these seven steps, memorize the estimation anchors, learn where the crux lives in each classic problem, and you will walk into any "design X" question with a plan instead of a blank page. The framework is the easy part to learn and the highest-leverage thing to practice — so practice it out loud, on real problems, until the loop is automatic.


Written by Amit Singh — Senior SDE at Amazon, Claude Certified Architect, and founder of AlgoEngineer. We run live mock system-design interviews with senior-engineer feedback in our System Design course.

Run a system design interview with the 7-step framework

The repeatable loop for any "design X" question, with time budgets for a 45-minute round.

  1. 1

    Clarify requirements (~5 min)

    Separate functional requirements (what it does) from non-functional ones (availability, latency, consistency, scale, read/write ratio). Write them down and get the interviewer to agree before designing anything.

  2. 2

    Estimate scale (~5 min)

    Do back-of-envelope math out loud: daily active users → requests/sec → storage over N years. Drive the numbers to a conclusion about where the bottleneck is.

  3. 3

    Define the API (~3 min)

    List the handful of endpoints the system exposes. This is the contract the rest of the design must satisfy.

  4. 4

    Design the data model (~4 min)

    Name the core entities and the access pattern first, then pick the store that serves that pattern.

  5. 5

    Draw the high-level design (~8 min)

    Sketch clients → load balancer → stateless services → storage → cache, and trace the data flow for each endpoint.

  6. 6

    Deep dive the hard part (~15 min)

    Go deep on the one or two components that do not scale naively — sharding, cache invalidation, consistency, hot keys. This is where the interview is decided.

  7. 7

    Name bottlenecks and trade-offs (~5 min)

    Proactively call out what breaks at 10x scale and the trade-offs you made, before the interviewer asks.

Frequently asked questions

What are the steps of a system design interview?
Seven moves, in order: (1) clarify functional and non-functional requirements, (2) estimate scale with back-of-envelope math, (3) define the API, (4) design the data model starting from the access pattern, (5) draw the high-level design, (6) deep-dive the one or two genuinely hard parts, and (7) name bottlenecks and trade-offs. Interviewers grade the process, not a single right answer.
How much time should I spend on each step in a 45-minute interview?
Roughly: 5 minutes clarifying requirements, 5 estimating scale, 3 on the API, 4 on the data model, 8 on the high-level design, 15 on the deep dive, and 5 on trade-offs. The deep dive is where the interview is won, so protect that time — do not burn 25 minutes drawing boxes everyone already agrees on.
What do interviewers actually grade in a system design round?
Your reasoning, not your recall. They want to see you take an ambiguous prompt, quantify it, make a defensible design, and critique your own trade-offs like a senior engineer. A working design with clearly-stated assumptions beats a "perfect" design arrived at silently. At senior and staff level they also expect you to drive the deep dive yourself rather than wait to be prompted.
How do I estimate scale quickly without a calculator?
Use round powers of ten. There are about 100,000 seconds in a day (86,400 ≈ 10^5), so X requests per day is roughly X/10^5 per second. Multiply by a peak factor of 2–10x for spikes. For storage, multiply records × bytes-per-record × retention. Memorize a few anchors (a day ≈ 10^5 s, a UUID = 16 bytes, 99.99% availability ≈ 52 minutes of downtime a year) and the rest is arithmetic.
Is the same framework used for every system design question?
Yes — the seven steps are identical for a URL shortener, Instagram, WhatsApp, a rate limiter, or a web crawler. What changes is which step holds the hard part: key generation and read scaling for a URL shortener, feed fan-out for Instagram, connection management for WhatsApp, the URL frontier for a crawler. Learn the framework once, then learn where the crux lives in each problem.

Ready to Ace Your Interviews?

Join thousands of students who have successfully landed their dream jobs at FAANG companies.