Skip to the chapter
←System DesignGGroundworkSDSystem Design
System Design/Beginner/B1
1 / 36 written chapters
/

The cover
  1. B1The mental model
  2. B2Client-server basics
  3. B3Vertical vs horizontal
  4. B4Databases in design
  5. B5Caching fundamentals
  6. B6APIs & communication
  7. B7Walkthrough: URL shortener
  1. I1Load balancing in depth
  2. I2CDNs
  3. I3Message queues & async
  4. I4Consistency models
  5. I5Replication
  6. I6Rate limiting & throttling
  7. I7Designing for availability
  8. I8Storage systems
  9. I9Search systems
  10. I10Microservices
  11. I11Security basics
  12. I12Walkthrough: feed/chat
  13. I13Walkthrough: notifications
  1. A1CAP theorem in depth
  2. A2Transactions and isolation
  3. A3Storage engines
  4. A4Sharding at scale
  5. A5Time, ordering and IDs
  6. A6Distributed consensus
  7. A7Batch & stream processing
  8. A8Fault tolerance
  9. A9Observability at scale
  10. A10Release safety
  11. A11Capacity estimation
  12. A12Case studies
  13. A13Walkthrough: key-value store
  14. A14Walkthrough: web crawler
  15. A15Walkthrough: payments
  16. A16Tradeoff thinking

SDB1 · Part 1 · Beginner

What system design interviews test

There is no answer key — the interviewer is scoring how you got there, not where you landed.

18 min read2 diagrams8 sections0 exercises
1 of 36

In this chapter

  • The interviewer is scoring a process, not an answer
  • The 45-minute arc
  • Functional vs non-functional, and why only one of them shapes the design
  • Estimation you can do in your head, out loud
  • Why "it depends" is the right answer — and why it's usually said wrong

and 3 more

about 18 min
08On this page
  1. The interviewer is scoring a process, not an answer
  2. The 45-minute arc
  3. Functional vs non-functional, and why only one of them shapes the design
  4. Estimation you can do in your head, out loud
  5. Why "it depends" is the right answer — and why it's usually said wrong
  6. The deep dive: they pick the component, you supply three levels
  7. The failure modes that actually end interviews
  8. Recognizing it in an unseen problem

The interviewer is scoring a process, not an answer

A coding interview has a correct answer: the tests pass or they don't. A system design interview does not. Two candidates can draw the same boxes on the same whiteboard and receive opposite recommendations, because the artifact being evaluated is not the diagram — it's the sequence of decisions that produced it. The interviewer is filling in a rubric with rows like "gathered requirements before designing" and "articulated a tradeoff without being prompted." Your drawing is only evidence.

This is why strong engineers with real production experience sometimes fail the loop. They design the way they design at work — quietly, in their head, then present a conclusion. In a 45-minute interview an unspoken thought is a thought that did not happen.

What the rubric row saysWeak signalSenior / staff signal
Requirement gathering Starts drawing from the one-line prompt Spends 5-8 minutes turning a vague prompt into a bounded problem, and writes the scope down where both of you can see it
Structured thinking Jumps between topics as they occur; the board becomes a mess Announces the plan ("requirements, then scale math, then a high-level design, then we pick something to go deep on") and visibly follows it
Explicit tradeoffs Names a technology ("I'd use Kafka") Names the alternative they rejected and the property that decided it ("a queue over direct calls, because I want the write path to survive the consumer being down — cost is end-to-end latency and an at-least-once contract")
Calibration to scale Shards a database for a 500-employee internal tool Sizes the solution to the stated load and says out loud what would have to change to justify more
Depth Every component gets one sentence Can go three levels down on any box they drew — data model, failure behaviour, and what happens at 10x
Knowing what you don't know Bluffs a confident wrong number "I don't know Spanner's exact commit latency. I know it uses TrueTime, whose clock uncertainty is only a few milliseconds, so the real cost is the round trip to a majority of replicas. For a multi-region write I'd plan on tens of milliseconds and verify."
Collaboration Treats interviewer questions as attacks to deflect Treats them as new requirements, updates the design, and says what the change costs

The last row is the one candidates underrate most. The interviewer is simulating a design review with a colleague. If disagreeing with you is unpleasant, that is a hire-signal problem no amount of correct architecture fixes.

The 45-minute arc

Almost every system design round at a large company follows the same shape, whether or not the interviewer states it. Knowing the shape lets you budget time instead of discovering at minute 40 that you never discussed failure.

the classic failure: drawing boxes at minute 2 clarify requirements estimate scale high-level design deep dive (they choose) bottlenecks and failure 0-8 min 8-13 min 13-23 min 23-38 min 38-45 min The green phase is where most of the score lives — depth on one component beats a shallow tour of eight. The yellow phase is where most candidates lose the interview by skipping it.
Budget the clock out loud. Announcing "I'll spend about five minutes on requirements" is itself a scored signal — it tells the interviewer you have run this meeting before.
PhaseWhat you produceThe failure mode
Clarify (0-8) A written list of in-scope features, out-of-scope features, and the non-functional targets you'll design against Accepting the prompt at face value and designing something nobody asked for
Estimate (8-13) QPS (average and peak), storage per year, and one derived number that constrains the design Arithmetic theatre — computing numbers you never refer to again
High-level (13-23) 6-10 boxes, the data flow for the one or two critical paths, and the data model Twenty boxes with no data model; the model is what proves you understand the problem
Deep dive (23-38) One component taken to implementation-level detail, chosen by the interviewer Staying at the same altitude you were at in the high-level phase
Failure (38-45) What breaks first under 10x, what happens when each dependency dies, how you'd detect it Never getting here because the earlier phases ran long
Say it like this → "Before I draw anything: I want to spend a few minutes on requirements and rough numbers, then sketch a high-level design, then go deep wherever you're most interested. Does that work, or is there a specific area you'd like me to prioritise?"

Functional vs non-functional, and why only one of them shapes the design

Functional requirements are what the system does: users can shorten a URL, followers see a post, a rider is matched to a driver. They determine your API surface and your data model. Non-functional requirements are the properties the system must hold while doing it: latency, availability, consistency, durability, scale, cost. They determine the architecture.

This distinction earns its keep because functional requirements are usually easy and non-functional ones are where the interesting decisions live. "Users can post a tweet" is a row insert. "A tweet is visible to 100 million followers within two seconds" is the entire design.

Non-functional requirementAsk it asWhat the answer changes
Scale "How many daily actives, and what's the read-to-write ratio?" Whether you need caching, replicas, sharding — or none of the above
Latency "What's the p99 target for the read path?" Cache placement, whether cross-region calls are allowed on the critical path, sync vs async work
Consistency "If a user updates their profile, must they see it on the next read? Must their friends?" Read-your-writes routing, whether replicas can serve reads, single-leader vs multi-leader
Availability "Is it acceptable to be read-only during a regional outage?" Multi-region topology, failover strategy, and how much complexity is justified
Durability "Is losing the last second of writes a bug or a catastrophe?" Synchronous vs asynchronous replication, write-ahead log fsync policy, queue acknowledgement semantics
Cost "Are we optimising for engineer time or infrastructure spend?" Managed services vs self-hosted; whether "just add a bigger box" is allowed
⚠ Asking questions is not the same as gathering requirements Candidates learn that they should "ask clarifying questions" and then fire off eight of them without using any of the answers. The signal comes from the loop: ask, hear the number, say what it implies, write it down. "10 million DAU with a 100-to-1 read ratio — so this is a read-heavy system and I'll be spending my design effort on the read path" is worth more than the next five questions.

Estimation you can do in your head, out loud

The point of the scale math is not the number, it's the decision the number unlocks. You are looking for an order of magnitude that tells you which of three or four architectures is appropriate. Round aggressively; nobody wants to watch you long-divide.

The one conversion to memorise A day is 86,400 seconds. So 1 million requests per day ≈ 12 per second (11.6 exactly), and 1 billion per day ≈ 12,000 per second. In your head, rounding the day to 100,000 seconds gives 10 per second per million, which is fine when you only want the order of magnitude; the chapter uses 12 so the arithmetic stays honest. Almost every QPS estimate you will ever do in an interview is this ratio scaled up or down, then multiplied by 2-3 for peak.

A worked pass, in the amount of detail you'd actually speak: 100 million daily actives, each reading their feed 10 times a day, is 1 billion reads a day, so about 12,000 reads per second average and call it 30,000 at peak. Writes at one post per user per day is 100 million a day, roughly 1,200 per second — a 10-to-1 read/write ratio. At 1 KB per post that's 100 GB of new post data per day, so 36 TB a year before replication, media, or indexes.

Now use it. 30,000 reads per second is above the roughly 20,000 simple reads per second that this course plans one relational primary for (see the table below), so reads must be served from cache or replicas. 1,200 writes per second is well under the roughly 5,000 committed writes per second we plan for, which means sharding the write path is not yet justified and saying so is a senior signal. 36 TB a year means the hot dataset and the cold archive should not live in the same place. Three architectural decisions from four multiplications.

AnchorValue to quote
Seconds in a day~100,000 (86,400)
1M requests/day~12 QPS
Peak-to-average traffic ratio2-3x for consumer apps; 5-10x for event-driven spikes
A tweet-sized text record~200 bytes to 1 KB with metadata
A compressed photo~200 KB - 1 MB; a minute of 1080p video ~ 50 MB
One commodity app serverThousands of RPS for simple JSON, hundreds if it does real work per request
One relational primary (modern NVMe server, warm cache)Planning figures: ~20,000 simple indexed reads/sec, ~5,000 committed writes/sec
One cache node~100,000 ops/sec, sub-millisecond
Availability in nines99.9% = about 8.8 hours of downtime a year; 99.99% = about 53 minutes; 99.999% = about 5 minutes
⚠ The primary figures are planning numbers, not limits 20,000 reads/sec and 5,000 writes/sec are deliberately conservative: they leave headroom and assume you have not tuned anything. Strong hardware with batching and group commit does several times more (100,000+ reads/sec and 20,000-50,000 writes/sec are reported), and OpenAI has described running ChatGPT on a single Azure PostgreSQL primary with about 50 read replicas at millions of aggregate queries per second. The rule used across this course: start planning a change when sustained reads pass ~20k/s (add a cache or replicas) or sustained writes pass ~5k/s (partition or queue); at ~20k+ sustained writes you are sharding or queueing now. Measure, do not assume.

Two more anchors belong in your head. Quote latency as a percentile, not an average: p99 is what one user in a hundred sees, and a request that fans out to many backends hits the slow tail of at least one of them far more often than any single backend does (the "tail at scale" effect). And an availability target is only meaningful alongside how you measure it: an SLI (for example, the fraction of requests answered in under 300 ms without an error) and an SLO (the target for that fraction, over a window). The error budget is simply what the SLO leaves you to spend.

The ranges above are wide on purpose. Quoting a range with the caveat "depends on row size and whether it's index-only" reads as experience; quoting "Postgres does 8,342 QPS" reads as memorised trivia and invites a follow-up you can't answer.

Why "it depends" is the right answer — and why it's usually said wrong

"It depends" alone is the single most common way to sound senior and score as junior. It is a correct observation that transfers the work back to the interviewer. The complete form has three parts, and takes about fifteen seconds:

  • It depends on X — name the specific variable, not "the use case"
  • Here's how I'd decide — the threshold or test that resolves X
  • Absent that information, here's my default and why — commit to something
Say it like this → "Whether I cache the feed depends on the read-to-write ratio and how tolerant we are of stale data. If reads outnumber writes by more than about 10 to 1 and a few seconds of staleness is fine, caching is clearly worth it. You said 100 to 1 and this is a social feed, so I'm going to cache, with a short TTL plus invalidation on write."

The third part is what separates the two grades. A staff-level candidate is someone a team can be pointed at an ambiguous problem with, and who returns with a decision. Endless conditionality is the opposite of that.

"design a URL shortener" 1k links/day, internal tool one table, one app server, an index on the short code 100M links/day, global reads key-generation service, cache, CDN, multi-region replicas
The same prompt has two defensible answers that share almost no components. This is why the scale question comes before the drawing, not after it.

The deep dive: they pick the component, you supply three levels

Somewhere around minute 23 the interviewer will point at a box and ask you to expand it. This is not random — they are steering toward the part of the problem they consider interesting, and toward the depth signal they still need. Whatever they pick, the expansion has the same three levels:

  • Mechanism — what data structure or algorithm is inside the box, and the concrete data model (table columns, key format, index)
  • Behaviour under load — what the hot path costs, where the contention is, what happens at 10x traffic
  • Behaviour under failure — what happens when this box dies mid-request, when it's slow rather than dead, and how a client experiences that

A useful discipline while sketching: don't draw a box you can't take to level three. If you write "recommendation service" on the board and have no model for what's inside it, you have handed the interviewer a place to probe where you will have nothing. Either be ready to open it, or name it explicitly as out of scope: "there's a ranking service here; I'll treat it as a black box that returns an ordered list of IDs unless you want to go into it."

⚠ The slow-dependency question catches almost everyone Candidates prepare for "what if the database goes down" and freeze on "what if it's just slow." Slow is worse: connections pile up, thread pools saturate, and a single degraded dependency takes the whole service down through queueing. The expected vocabulary is timeouts, bounded retries with jitter, circuit breakers, bulkheads, and load shedding. Have one sentence ready on each.

The failure modes that actually end interviews

Failure modeWhat it looks likeThe fix
Drawing at minute 2 The prompt is 12 words and there are already six boxes on the board Force the requirements phase; write scope in a corner of the board and refer back to it
Designing for a billion when told a thousand Kafka, sharding, and a service mesh for an internal admin tool Match the design to the stated scale, then name the trigger that would change it
Silence Thirty seconds of quiet thinking; the interviewer can't score what they can't hear Narrate the search, not just the conclusion: "I'm weighing whether the fan-out happens on write or on read..."
Buzzword placement Naming a technology without a property to justify it Always pair the noun with the property: not "Redis", but "an in-memory store because I need sub-millisecond lookups on a small hot set"
Breadth as avoidance Adding new components whenever a question gets hard Depth is the scored axis after minute 23; go down, not sideways
Defending instead of updating Treating "what if writes are 100x higher?" as a criticism Treat every question as a new requirement: "then my single primary is out — here's what changes"
Bluffing Inventing a mechanism for a system you've only read the name of Say what you do know, name the boundary, reason from principles from there — this scores well, and getting caught bluffing is often terminal

Notice that only two of these are about knowledge. The rest are about conduct in a room. This is the actual reason system design is the biggest differentiator at senior and staff levels: it is the only round that measures how you behave when the problem is underspecified and someone is disagreeing with you.

Recognizing it in an unseen problem

  • The prompt is one sentence and deliberately ambiguous ("design Twitter") — that ambiguity is the first thing being tested, not an oversight to work around
  • If the interviewer volunteers a number ("about a thousand internal users"), it is a constraint they will hold you to; designing above it reads as poor judgement, not ambition
  • When they ask "why?" they are almost never disagreeing — they are giving you a scoring opportunity to state the tradeoff you skipped
  • When they say "let's say traffic grows 100x", they have moved to the bottlenecks phase; stop adding features and start naming what breaks first
  • If you have drawn a box you cannot open to three levels of detail, either open it now or declare it out of scope before they ask
  • If you find yourself saying "it depends" without immediately naming the variable and your default, you have handed back the question — finish the sentence

Dry run: the five-phase arc applied to "design a service that shows a user their order history"

PhaseApplied hereConclusion
1. Clarify (0-8 min)Ask DAU, read/write ratio, and whether a user must see an order they just placed immediately. Answers: 50M DAU, mostly reads, and yes — read-your-writes matters right after checkout.Scope written down: read-heavy, one hard consistency requirement tied to a specific moment (just after write)
2. Estimate (8-13 min)50M DAU × 5 order-history reads/day = 250M reads/day. Using the "1M requests/day ≈ 12 QPS" anchor: 250 × 12 = 3,000 QPS average, ~7,500 at a 2.5x peak. Writes: assume 10M new orders/day, so ~120 per second.7,500 peak reads is about 40% of the ~20,000/s we plan one primary for, and 120 writes/s is far below 5,000/s. Nothing forces sharding; the case for a replica is headroom, isolating history reads from checkout writes, and failover
3. High-level design (13-23 min)API + one orders primary (not sharded) with a standby, one or two read replicas, and a small cache in front of them. Data model: orders(user_id, order_id, created_at, status, ...), primary key (user_id, order_id). Name user_id as the shard key you would use if the trigger ever arrives (writes sustained above ~5k/s, or the dataset outgrowing one node).6-10 boxes, one critical read path and one critical write path, both traceable on the diagram
4. Deep dive (23-38 min)Interviewer points at "how do you page through years of orders?" — cursor pagination on (created_at, order_id), not offset, because the set is unbounded and grows forever.Taken to implementation detail: the exact query shape, not just the word "pagination"
5. Failure (38-45 min)"What if the user refreshes right after placing an order and hits a lagging read replica?" — pin that user's reads to the primary for a short window after their own write.Read-your-writes violation named and fixed, using exactly the consistency requirement surfaced back in phase 1

Notice phase 5 answers a question that phase 1 asked and phase 2's numbers never touched — that's the arc doing its job. The prompt changes every time; running clarify → estimate → design → deep-dive → failure in order, and using each phase's output in the next one, is the part that doesn't.

Before you move on
  • State the five phases of the interview arc and roughly how many minutes each gets, without looking at the table.
  • Turn a stated DAU number into a QPS estimate using the "1M requests/day ≈ 12 QPS" anchor, out loud, in under 15 seconds.
  • Explain why "it depends" alone reads as junior, and give the three-part version that reads as senior.
  • Say what changes in your design when an interviewer says "let's say traffic grows 100x" — and why adding features is the wrong reaction.
  • Walk the five-phase dry run above with a different prompt of your own choosing, keeping each phase's conclusion tied to what the previous phase established.
Sources and further reading
  • Spanner: Google's globally distributed database — the original paper; TrueTime uncertainty is a few milliseconds and commit cost is dominated by replica round trips
  • OpenAI: scaling PostgreSQL — one primary plus about 50 replicas at millions of queries per second, which is why the per-primary figures here are planning numbers
  • Google SRE book: service level objectives — definitions of SLI, SLO and error budget
  • Google SRE book: monitoring distributed systems — percentiles over averages and the four golden signals
  • The Tail at Scale — why fan-out makes the slow tail dominate
  • Interactive latency numbers by year — Colin Scott's extrapolation of the classic latency table
  • Designing Data-Intensive Applications, second edition — the standard reference for the tradeoffs this course builds on

Claims in this chapter were checked against these sources in October 2026. Figures marked "planning figure" are rules of thumb, not guarantees.

✓Practise

5 questions drawn from 8, scored out of 5. This is practice: it runs in your browser, saves nothing and does not change what you have marked read.

B1

Finished reading?

0 of 36 chapters read in this series

→Next stop

  1. Back toThe cover
  2. B1you are here
  3. Next · B2Client-server basicsA senior candidate can narrate everything between the keypress and the pixel — and knows what each hop costs in milliseconds.18 min read

01On this page

8 sections · 0%

  1. 01The interviewer is scoring a process, not an answer
  2. 02The 45-minute arc
  3. 03Functional vs non-functional, and why only one of them shapes the design
  4. 04Estimation you can do in your head, out loud
  5. 05Why "it depends" is the right answer — and why it's usually said wrong
  6. 06The deep dive: they pick the component, you supply three levels
  7. 07The failure modes that actually end interviews
  8. 08Recognizing it in an unseen problem

[] chapters · t top