
What's in this brief
- Before you start: what to have ready
- Why system design rounds are lost in the first five minutes
- Step 1: Learn the building blocks as trade-offs, not definitions
- Step 2: Get fluent with back-of-envelope estimation
- Step 3: Practice the opening: requirements, scale, and scope
- Step 4: Draw the high-level design before you optimise anything
- Step 5: Go deep on one component when the interviewer asks
- Step 6: Rehearse the trade-off conversation out loud
- Step 7: Run timed mock interviews and keep talking
- Step 8: Prepare for the follow-ups on bottlenecks and scale
- How to split your system design prep hours
- Where a 45-minute design round actually goes
- The numbers worth carrying in your head
- A worked example: sizing a link-shortening service
- Choosing a datastore without reciting a list
- What the interviewer is actually scoring
- How the round changes with seniority
- Practising when you have never built at scale
- Common mistakes in system design interviews
- Troubleshooting: blanking, unfamiliar domains, and short runways
- Five questions to ask your own diagram
- The system design prep checklist
- The bottom line
A system design interview is the round where the strongest engineer in the pipeline can still lose, and the reason is almost never a gap in knowledge. It is a gap in sequence. The prompt lands, some version of “design a service that does X”, and the candidate does the thing that feels productive: they start drawing. Boxes appear, a database shows up, a cache gets bolted on, and eleven minutes later the interviewer asks a question about write volume that quietly reveals the whole diagram was built for a system nobody asked for. The knowledge was there. The order was wrong.
This breakdown gives you an eight-step process for system design interview prep, built around that failure mode. It covers the building blocks you need to reason about rather than recite, the back-of-envelope estimation that turns a vague design into a defensible one, the opening minutes that decide the round, how to draw a high-level design and then deepen exactly one part of it, how to hold the trade-off conversation, and how to rehearse all of it out loud under a timer. It sits alongside our walkthrough on preparing for a technical interview, which covers the loop as a whole; this one is only about the design round. Keep the companion open and enter your inputs once as you read.
Key takeaways
- The round is lost by drawing first. Spend the opening several minutes on requirements, scale and explicit non-goals before a single box goes on the board.
- Learn the building blocks as trade-offs rather than definitions, because the interviewer is testing why you would reach for a queue, not whether you can define one.
- Back-of-envelope estimation is the cheapest skill to acquire and the one that most changes how a design reads: numbers turn opinions into constraints.
- Draw one coherent high-level design, then go deep on exactly one component when asked, rather than half-building six.
- This format punishes silent thinking harder than any other round, so the practice that matters is timed and spoken out loud, not read.
Before you start: what to have ready
System design preparation goes wrong when it becomes reading. Reading feels like progress, produces no rehearsal, and leaves you with vocabulary you cannot deploy under a clock. Assemble a short list of inputs first, then spend almost all of your hours practising rather than consuming.
You need a few things in front of you:
- Confirmation that the round exists and how long it runs. Ask your recruiter whether the loop includes a design round, how long it is (forty five and sixty minutes are both common), and whether it is a whiteboard, a shared drawing tool, or a conversation with no visual aid at all.
- An honest inventory of what you have built. Every service, cache, queue, background job and database you have actually touched, however small, because those are the experiences your reasoning will be built from.
- A drawing surface you can practise on. A physical whiteboard, a tablet, or the shared drawing tool the employer uses. Practise on the surface you will be assessed on, because they feel different.
- A timer and, ideally, a practice partner. The clock and the audience are the two conditions that make this round hard, and neither can be simulated by reading.
- A weekly hour budget you can actually protect. Not an aspirational number. The plan is only as real as the time behind it.
Time estimate: an illustrative twenty five to seventy total hours depending on your level and how much distributed systems exposure you already have, spread across the weeks you have. Difficulty: moderate, and the hard part is discipline rather than any single concept, because the uncomfortable practice (speaking a half-formed design out loud to another person) is exactly the practice that works. Enter your weeks, your weekly hours, your target level, your exposure and your round length in the companion on this page, and it reads back your available hours, an illustrative runway, how many timed mocks that affords, and how many minutes to spend before you draw. Then work the eight steps in order.
Why system design rounds are lost in the first five minutes
Watch enough design rounds and the same story repeats. The prompt is deliberately underspecified, because the ambiguity is the test. A candidate who treats the prompt as complete starts solving immediately, which reads as decisiveness for about four minutes and as recklessness for the remaining forty one. A candidate who treats the prompt as an opening offer starts asking, and every answer narrows the design space before any effort is spent inside it.
The asymmetry is brutal. Clarifying costs you five to ten minutes and buys certainty about what you are building. Not clarifying costs you nothing up front and can cost the entire round, because a design built for the wrong scale, the wrong read-write mix or the wrong consistency requirement cannot be rescued by good component choices later. You end up defending decisions that were never wrong on their own terms, only wrong for a system you were never asked to build.
There is a second, subtler reason the opening matters. The requirements you agree become the constraints you can point at for the rest of the round. When you later say a relational store is the wrong fit here, that claim is either an opinion or a consequence, and the difference is entirely whether you established the write volume ten minutes earlier. Numbers and agreed requirements are what convert your preferences into reasoning, and reasoning is the thing being scored.
So the single highest-value habit in system design interview prep is not learning another architecture pattern. It is rehearsing the first several minutes until asking comes before drawing automatically, even when your hands want to move.
Step 1: Learn the building blocks as trade-offs, not definitions
Start with the components, but learn them the way you will need them. Knowing that a load balancer distributes traffic across servers is a definition, and definitions do not survive a follow-up question. Knowing that a load balancer lets you scale horizontally, removes a single point of failure, adds a hop of latency, and creates a new question about where session state lives is a trade-off, and trade-offs are what the conversation runs on.
Work through the core set: load balancing, caching, replication, partitioning, queues and asynchronous processing, and the main storage families. For each one, learn four things rather than one. What problem does it solve. What does it cost you (latency, complexity, consistency, money, operational burden). When would you not use it. What new problem does adding it create. That last question is the one candidates skip and interviewers love, because every component you add to a diagram is a component that can fail.
Caching is the clearest example. It solves read latency and reduces load on the datastore. It costs you memory, and it introduces staleness. You would not use it for data that must be exactly current, or for a read pattern with no hot set worth caching. And adding it creates invalidation, a cold-start problem after a deploy, and a new failure mode where the cache dies and your database takes the full read load at once. A candidate who can say that has not memorised anything; they can reason about caching in a system they have never seen.
Watch out for the encyclopedia trap: collecting more components rather than deepening the ones you have. A candidate fluent in six building blocks and their trade-offs outperforms one who can name twenty. Our walkthrough on becoming a cloud engineer covers where this infrastructure knowledge sits in a wider career path if you are building it from scratch.
Step 2: Get fluent with back-of-envelope estimation
Estimation is the highest-return-per-hour skill in system design interview prep, and almost nobody practises it. The arithmetic is trivial. The habit of reaching for it is not. A design without numbers is a set of preferences; a design with numbers is a set of consequences, and the second one is much harder to argue with.
The mechanics are small enough to learn in an afternoon. There are 86,400 seconds in a day, which people commonly round to about 100,000 to make division fast. Requests per day divided by that gives you requests per second. A record count multiplied by an average record size gives you storage. Requests per second multiplied by an average response size gives you bandwidth. Units move three zeros at a time: a thousand bytes is a kilobyte, a thousand kilobytes a megabyte, then a gigabyte, then a terabyte, then a petabyte. That is the whole toolkit.
Then drill it. Take a prompt, invent a plausible daily volume, and compute writes per second, reads per second, storage per day, storage over five years, and read bandwidth, out loud, in under three minutes. Do it for a photo service, a chat app, a metrics pipeline, a ride matcher. You are not training accuracy, you are training the reflex to reach for a number and the confidence to round hard while someone watches.
Round aggressively and say so. Announcing “call it a hundred thousand seconds a day, so about twelve hundred writes a second” is better practice than silently computing 1,157, because the interviewer can follow your reasoning and correct an assumption instead of an arithmetic slip. Watch out for the opposite failure too: estimating and then never using the number. A figure you compute and abandon is theatre. Every estimate should change something downstream, or you should not have bothered producing it.
Step 3: Practice the opening: requirements, scale, and scope
This is the step the whole breakdown exists for. Rehearse the first several minutes of the round until they run without conscious effort, because that is the stretch where the outcome is mostly determined and the stretch where nerves push hardest toward drawing something.
The opening has three parts. First, functional requirements: what the system must let users do, stated as a short list of concrete actions. Ask which actions are core and which can wait, and write the core ones where you can see them. Second, non-functional requirements: how the system must behave, which usually means availability, latency expectations, consistency, durability and the read-write mix. These are the requirements that actually determine the architecture, and they are the ones candidates most often skip. Third, scale: agree a rough order of magnitude for users, requests and data, because everything downstream depends on it.
Then, and this is the part almost nobody does, state what you are explicitly not solving. Saying “I am going to treat authentication, payments and analytics as out of scope unless you want them” does three things at once. It shows you understand the real system is bigger than the round. It prevents you from wandering into a subsystem that earns no credit. And it gives the interviewer a cheap way to redirect you if one of those was actually the point.
Practise this as a script until the shape is automatic: clarify the actions, pin the non-functional requirements, agree the scale, name the non-goals, then restate the whole thing in two sentences and get agreement before drawing. As an illustrative budget, on a forty five minute round that is about fourteen minutes on requirements and estimation combined, which the companion reads back for your round length. Watch out for turning it into an interrogation. Five or six sharp questions with stated assumptions beats twenty, and a candidate who asks endlessly without ever committing looks as unable to decide as one who never asked at all.
Step 4: Draw the high-level design before you optimise anything
With requirements agreed and numbers on the board, draw one coherent design that satisfies them, and keep it deliberately plain. The goal is a diagram where a reasonable person can trace a request from a client through to storage and back, and trace the same path for a write. Nothing clever yet. Clever comes later, and only where the numbers justify it.
Work outside in. Start with the client and the entry point, add the service or services that handle the core actions, add the datastore, and only then add the pieces the requirements demanded: a cache if the read-write ratio is lopsided, a queue if work can be deferred, a blob store if you are moving large objects. Draw the data flow, not just the components, because arrows with labels are what make a diagram legible. Then walk it out loud end to end, once for the main read path and once for the main write path, and check that every requirement you agreed in Step 3 is actually served by something on the board.
Keep the API surface light but present. Naming the two or three main operations, roughly what they take and what they return, is usually enough to anchor the design without turning into a specification exercise. Similarly, sketch the data model at the level of what entities exist and what the main access patterns are, because access patterns are what determine partitioning later.
Watch out for premature optimisation, which in this round means adding infrastructure the requirements never asked for. Sharding a database that comfortably fits on one node, or adding a message queue to a synchronous flow that has no slow work in it, does not read as sophistication. It reads as pattern-matching. Add each component when a number or a requirement forces it, and say which one forced it.
Step 5: Go deep on one component when the interviewer asks
Once the high-level design is agreed, the round almost always narrows. The interviewer picks one part and asks you to go a level deeper, and this is where the difference between vocabulary and understanding becomes visible in about ninety seconds. The instruction to follow here is simple and counterintuitive: go deep on exactly one thing, properly, rather than adding a shallow layer of detail to everything.
Let the interviewer choose if they will, because their choice tells you what they want to assess. If they leave it to you, pick the component where your agreed numbers create the most pressure. If reads outnumber writes by a hundred to one, the caching and read path is the interesting part. If the write volume is enormous, partitioning and the write path is. If durability was called out as critical, replication and failure handling is. Announce your reason for choosing before you dive, because the reason is itself a signal.
Depth means mechanism, not more boxes. For a cache, that is what you key on, what the eviction policy is, how invalidation works on a write, and what happens on a cold start. For a partitioned datastore, it is what the partition key is, why that key spreads load evenly, what queries become expensive because of it, and how you would rebalance. For a queue, it is what happens to a message that fails repeatedly, whether processing is idempotent, and what ordering guarantee you actually need.
Watch out for the drift where a deep dive becomes a second high-level design. If you find yourself introducing three new subsystems, you have gone sideways rather than down. And watch out for refusing to commit: “it depends” is a fine opening to a deep dive and a terrible substitute for one.
Step 6: Rehearse the trade-off conversation out loud
There is no correct answer to a system design prompt, and internalising that changes how you prepare. The interviewer is not holding a reference architecture and checking your diagram against it. They are watching how you reason when two reasonable options conflict, which is exactly what the job involves. So the skill to rehearse is not choosing well; it is making the choice legible.
A trade-off answer has a repeatable shape. Name the options. Name what each one costs and buys, in terms of the requirements you agreed earlier. Pick one. Say what would make you pick the other. That last sentence is doing an enormous amount of work, because it demonstrates that your choice was a decision rather than a habit, and it invites the interviewer into the conversation rather than closing it.
Use real trade-offs, not slogans. Strong consistency costs you availability during a partition and adds coordination latency on writes, which is fine for a balance transfer and wasteful for a view counter. Denormalising speeds reads and makes writes more expensive and more error-prone, which is a good trade when reads dominate by two orders of magnitude. Adding a queue smooths bursts and improves perceived latency, and it costs you end-to-end simplicity, ordering guarantees and a new class of debugging problem. Synchronous replication protects you from data loss and slows every write; asynchronous replication is fast and can lose the last few writes on failover.
Watch out for reciting a rule as if it settled the question. Invoking a well-known theorem, or asserting that a particular database family is simply better at scale, is the sound of a slogan doing the work reasoning should be doing. Watch out too for agreeing instantly when an interviewer pushes back. Being persuaded by a new argument is good; folding because someone frowned is not.
Step 7: Run timed mock interviews and keep talking
Every other step can be practised alone. This one cannot, and it is the step that separates candidates who understand system design from candidates who can perform it. Book real mock interviews, run them against a timer, and speak continuously.
The reason this format punishes silent thinking more than any other round is structural. In a coding round, the code on the screen is evidence of your progress even while you are quiet. In a design round, silence produces nothing observable at all. Ten seconds of quiet thought looks identical to being stuck, so an interviewer with no window into your reasoning has to assume the worst. Narration is not a communication nicety here; it is the only artefact you produce apart from the diagram.
Simulate the real conditions properly. Ask a peer or a mentor to give you a prompt cold, without preparation on your side, and to hold you to the clock. Use the drawing surface the employer will use. Have them interrupt you, change a requirement partway through, and push back on a choice, because all three happen and all three are easier the second time. Afterwards, debrief on process rather than outcome: where did you go quiet, where did you draw before you scoped, where did you assert instead of reason. Fix one or two specific habits, then run another.
As an illustrative planning figure, a forty five minute mock plus a thirty minute honest debrief is about an hour and a quarter, so a prep plan reserving roughly twenty two percent of its hours for mocks affords a handful of them at typical budgets. The companion reads back how many your own inputs afford. Watch out for skipping mocks because they are awkward to arrange. The awkwardness is the training stimulus, and avoiding it means your first live performance doubles as your first rehearsal.
Step 8: Prepare for the follow-ups on bottlenecks and scale
Most design rounds end with a predictable set of pressure questions, which means most design rounds end with free points for anyone who rehearsed them. The three that recur are: where does this break, what happens when a piece of it fails, and what would you change if the load were ten times higher.
For bottlenecks, walk your own diagram and find the component under the most pressure from your own numbers. Usually it is the datastore on the hot path, or a single service that every request passes through, or the network in and out of one machine. Name it before you are asked. A candidate who says “the read path through the primary database is the first thing that will bend, and here is the number that says so” has demonstrated more than one who waits to be told.
For failure modes, take each component in turn and answer what happens when it dies. If the cache dies, the datastore takes the full read load, which may be an outage rather than a slowdown, so you talk about warming, request coalescing, or capacity headroom. If a service instance dies, the load balancer stops sending it traffic, which only works if health checks exist and state is not stored locally. If a datastore replica dies, you talk about failover and what it costs you in consistency or lost writes.
For ten times the load, do not answer with a list of technologies. Rerun the estimates, find which constraint moves first, and address that one. Ten times the reads is a caching, replication and read-fanout problem. Ten times the writes is a partitioning problem, and partitioning brings a partition key question with it. Ten times the data is a storage tiering and retention question. The structure of the answer, recompute then address the binding constraint, matters more than the components you name.
How to split your system design prep hours
People assume system design preparation is mostly reading, which is why so much of it fails to transfer. The illustrative split below shows how the hours for a mid-level candidate might divide, so the practice that only works out loud actually gets protected time instead of being deferred until the week of the interview.
Illustrative prep-hour split for a system design round
Rough share of design-specific prep time across the eight steps, for planning only. Shares sum to 100 percent and shift by level and exposure.
Illustrative shares for planning, not measured data. A candidate with production distributed systems experience shifts weight away from building blocks and toward mocks; someone starting cold does the reverse.
Two things stand out. Building blocks take the largest single slice because everything else is built on them, but they still take less than a third, which is the correction most candidates need. And mocks take the second largest slice, ahead of both estimation and deep dives, because they are the only activity that trains the actual performance. The twenty two percent reserved for mocks is what the companion uses to read back how many timed sessions your hour budget affords.
Where a 45-minute design round actually goes
Knowing how the time divides inside the round is itself preparation, because the most common pacing failure is spending thirty minutes on a high-level design and then being asked for a deep dive with eight minutes left. The illustrative split below shows a workable shape for a forty five minute round.
Illustrative time split inside a 45-minute design round
Rough share of the round each phase tends to take. Shares sum to 100 percent; minutes shown are for a 45-minute round.
Illustrative proportions, not a rule any interviewer enforces. A sixty minute round stretches every phase; a round where the interviewer drives hard on one subsystem can spend far more than 27 percent on the deep dive.
The number worth internalising is the first one: requirements and estimation together take about thirty one percent of the round, roughly fourteen of the forty five minutes, before a single component is drawn. That feels wrong while it is happening and reads as competence afterwards. On your round length, the companion converts that share into the minutes you should be spending before you draw.
The numbers worth carrying in your head
You do not need a memorised table, but a handful of orders of magnitude make estimation fast and stop you proposing something physically implausible. Treat all of these as approximations that hold to within an order of magnitude rather than precise figures, and say so when you use them.
Time and volume. A day is 86,400 seconds, commonly rounded to about 100,000. A month is roughly 2.6 million seconds. One request per second sustained is about 86,400 requests a day, so a million requests a day is somewhere near a dozen per second. That single conversion turns most product-sounding numbers into infrastructure-sounding ones instantly.
Size. Units move three zeros at a time: kilobyte, megabyte, gigabyte, terabyte, petabyte. A short text record with a few fields and index overhead is commonly modelled at a few hundred bytes. A compressed photo is often modelled in the low hundreds of kilobytes; a minute of standard-definition video in the low tens of megabytes. Pick a round figure, announce it as an assumption, and move.
Latency, as orders of magnitude only. Reading from memory is measured in microseconds. A solid-state drive read is commonly modelled at a few hundred microseconds. A round trip inside one datacentre is often modelled at well under a millisecond, a spinning-disk seek at several milliseconds, and a round trip across a continent at tens to low hundreds of milliseconds. The useful conclusions from that ordering are structural: a network hop is far more expensive than a memory read, geography dominates single-datacentre optimisation, and a request that makes twenty sequential remote calls has a latency problem no cache will fix.
A worked example: sizing a link-shortening service
Run one prompt through the process to see how the numbers drive the design. The prompt is a link-shortening service: users submit a long URL and get a short code back, and anyone visiting the short code is redirected. Everything below is an illustrative sizing exercise, not a measurement of any real service.
Requirements first. Functional: create a short link, resolve a short link, and optionally expire one. Non-functional: redirects must be fast and highly available, link creation can be slower, and a redirect returning a slightly stale target is tolerable while losing a created link is not. Out of scope, stated explicitly: user accounts, analytics dashboards and abuse detection. Now the scale assumption: call it 100 million new links a day, with reads outnumbering writes 100 to 1.
Now the arithmetic. Writes: 100 million divided by roughly 100,000 seconds a day is about 1,200 writes a second. Reads at a hundred times that is about 120,000 reads a second, from 10 billion redirects a day. Storage: model each record at about 500 bytes including the code, the target URL, timestamps and index overhead, so 100 million times 500 bytes is 50 GB a day. Over a year that is roughly 18 TB, and over five years roughly 91 TB. Bandwidth: writes at 1,200 a second times 500 bytes is under a megabyte a second, which is nothing; reads at 120,000 a second times a small redirect response of about 500 bytes is about 60 MB a second, near 480 megabits a second.
Those five numbers have already made the design decisions. Reads dominate writes by two orders of magnitude, so the read path gets a cache and read replicas and the write path stays simple. Ninety one terabytes over five years does not fit comfortably on one node, so the store is partitioned, and the short code is the obvious partition key because every read is a lookup by exactly that key. Sixty megabytes a second of egress is unremarkable, so bandwidth is not the constraint and you can say so and move on.
The short code length falls out of the same arithmetic. With 62 characters available per position (letters in both cases plus digits), six characters give about 56.8 billion combinations and seven give about 3.5 trillion. At 100 million links a day you generate 36.5 billion a year, which exhausts six characters in under two years and leaves seven characters with roughly ninety years of headroom. Seven it is, and that conclusion came from a number rather than a preference. Try your own inputs in the companion or the ROI calculator to see how a different runway changes the plan.
One honest caveat worth voicing in the round. A common cache-sizing shortcut assumes the hot set is the objects behind about twenty percent of a day’s reads, which here would be 2 billion entries at 500 bytes, near a terabyte of cache. Saying that out loud immediately tells you the cache is a distributed fleet rather than one machine. It is also worth noting that real link traffic concentrates on far fewer distinct links than that shortcut implies, so the true hot set is usually much smaller. Flagging the limitation of your own heuristic is a strong signal, not a weak one.
Choosing a datastore without reciting a list
Storage choice is where slogans do the most damage, because there is a ready-made sentence for every position and none of them are reasoning. The way out is to derive the choice from the access patterns you already established rather than from a family preference.
Ask what the queries actually are. If every read is a lookup by a single key and there are no joins or ad-hoc queries, almost any store works and the deciding factors become partitioning, operational simplicity and write throughput. If the workload involves relationships, multi-entity transactions and queries nobody has written yet, a relational store’s flexibility and transactional guarantees earn their keep. If the workload is append-heavy time series with range scans by time, that is a different shape again, and forcing it into a general-purpose store is how you end up with an index larger than the data.
Then ask what the consistency requirement really is, per operation rather than per system. Most systems are not uniformly strict or uniformly relaxed. In the shortener above, losing a created link is unacceptable while serving a slightly stale redirect target is fine, which points at durable synchronous writes and a cheerfully eventual read path. Being able to make that distinction per operation is one of the clearest markers of someone who has run a system rather than read about one.
Finally, ask what the growth curve does to the choice. A store that is ideal at 50 GB and painful at 90 TB is a real risk if the five-year projection lands in the second range, and saying “this works now and here is the migration trigger” is a legitimate answer. Watch out for two failure modes: choosing a store because it is fashionable, and choosing one because it is familiar, then reverse-engineering a justification. Both read the same way from the other side of the table.
What the interviewer is actually scoring
No two employers use the same rubric, and pretending otherwise is how candidates end up optimising for a scoring system that does not exist. What is consistent is the set of behaviours that recur in feedback across this format, and they are worth preparing against directly.
Did you scope before you designed. This is the one the whole breakdown is built around, and it is usually visible in the first five minutes. Is the design coherent. Not optimal, coherent: can a request be traced end to end, does every agreed requirement have something serving it, is there anything on the board that nothing needs. Can you go deeper. One level down on one component, with mechanism rather than more names. Do you reason or assert. Every significant choice should come with what it costs and what would change your mind.
And underneath all of it, can you communicate. Whether you narrate continuously, whether your diagram is legible, whether you respond to a challenge by engaging rather than freezing or capitulating. In a round with no correct answer, communication is not a soft skill sitting beside the technical assessment. It is the channel through which the entire technical assessment happens.
Notice what is not on that list. There is no credit for naming more technologies, no credit for the specific database you chose, and no credit for a diagram that resembles a published architecture. Two candidates can produce completely different boards and both pass, because the board is evidence of reasoning rather than the thing being graded. Preparing as though there is a right answer is the same mistake as designing before scoping: it optimises for the wrong test.
How the round changes with seniority
The prompt often looks identical across levels, which misleads people into preparing identically. The expectations underneath it are not the same at all, and matching your preparation to the level you are targeting is one of the cheapest adjustments available.
At entry level, a design round may not appear at all, and where it does it is usually a lighter conversation about whether you understand what the pieces are and how a request travels through a simple system. Fluency with the building blocks and a clean, coherent high-level design is close to sufficient. Estimation is a bonus rather than an expectation. Our walkthroughs on becoming a software developer and getting an entry-level IT job cover where this sits in an early-career path.
At mid level, the round is real and the deep dive is where it is decided. You are expected to scope properly, produce numbers, choose components for stated reasons, and go one level down on the component the interviewer picks. Trade-off vocabulary is expected to be genuine rather than recited. This is the level the eight steps in this breakdown are calibrated for.
At senior level and above, the emphasis shifts again, toward judgment about what not to build, operational reality (deployment, monitoring, failure recovery, cost), and the ability to hold a design conversation as a peer rather than a candidate. Interviewers push harder on ambiguity and are more interested in how you handle a changed requirement mid-round than in the original design. If you are targeting that level, weight your practice toward the follow-ups in Step 8 and toward mocks with someone who will genuinely argue with you. Our note on becoming a DevOps engineer covers the operational vocabulary that becomes non-optional at this end.
Practising when you have never built at scale
Most candidates preparing for this round have never operated a system at the volumes the prompts assume, and treating that as a disqualification is both wrong and self-defeating. The round is answerable without it, because it is testing reasoning rather than recall of a system you happened to work on.
Start from the experience you do have and scale the reasoning up. You have probably added an index to a table that got slow, cached something expensive, moved work into a background job, or watched a deploy behave badly because of state stored in the wrong place. Every one of those is a small instance of a large pattern, and being able to say “I hit this at a hundred requests a second and here is why the same pressure appears at a hundred thousand” is a genuinely strong answer.
Then borrow shapes from public writing. Engineering write-ups, conference talks and open documentation describe real architectures and the reasons behind them, and reading a few closely gives you vocabulary and a sense of what production concerns look like. Read them for the reasoning rather than the diagram, and resist collecting architectures to reproduce. Building a small project that deliberately includes a cache, a queue and a background worker teaches more per hour than reading a dozen case studies, and it also gives you honest material for the behavioural parts of the loop, which our walkthrough on building a tech portfolio covers in detail.
Be straightforward about the boundary. Saying “I have not run this at that scale, but here is how I would reason about it and here is what I would want to measure first” is credible. Bluffing operational experience is not, and it tends to unravel on the second follow-up question.
Common mistakes in system design interviews
Weak performances in this format cluster around a short list of habits, and naming them is most of the fix:
- Drawing before scoping. Starting the diagram in the first two minutes is the defining failure of this round. It produces a competent design for a system nobody asked for, and no amount of later quality recovers it. Ask, agree, then draw.
- Designing without numbers. A design with no estimates is a set of preferences, and every choice inside it is an assertion. Compute writes per second, storage and bandwidth early, then let those numbers force the components.
- Reciting components instead of reasoning about them. Naming a cache, a queue and a load balancer without saying what each one costs is pattern-matching. Interviewers detect it immediately with one follow-up about failure behaviour.
- Going shallow everywhere instead of deep on one thing. Adding a thin layer of detail to six components demonstrates less than working one component down to mechanism. Pick one, say why, and commit.
- Thinking in silence. Quiet time produces no observable artefact in this round, so it reads as being stuck. Narrate continuously, including the parts where you are deciding what to do next.
- Treating a memorised design as the answer. Interviewers change constraints on purpose, and a memorised architecture cannot move with the change. Practise re-deriving from requirements instead.
- Over-engineering the first pass. Sharding a dataset that fits on one node, or adding a queue to a flow with no deferrable work, reads as pattern-matching rather than judgment. Add each piece when something forces it.
Every one of these is a sequencing or communication failure rather than a knowledge gap, which is why they are so fixable and why they cost so many strong engineers the round.
Troubleshooting: blanking, unfamiliar domains, and short runways
Preparation rarely survives contact with the real round intact, so here is how to handle what actually goes wrong.
What if I blank on the prompt? Fall back to the opening script, because it works without inspiration. Ask what the core user actions are, ask about scale, restate the problem in your own words, and write the requirements on the board. By the time you have done that you will usually have a first component, and if you do not, the requirements themselves suggest one. A visible, calm process beats a fast answer, and interviewers are generally more interested in your recovery than your smoothness.
What if the domain is unfamiliar? Say so and ask. Being handed a prompt about an industry you have never worked in is common, and the design skills transfer completely once you know what the system must do. Two or three questions about the core actions and the traffic shape usually give you everything you need, and asking them is exactly the behaviour Step 3 rehearses.
What if the interviewer keeps changing the requirements? That is usually deliberate, and how you respond is the assessment. Acknowledge the change, say which part of the design it invalidates, and adjust that part rather than starting over. A candidate who can amend a design under a moving requirement is demonstrating the thing the job is actually made of.
What if my runway is very short? Triage. With a handful of hours, rehearse the opening script until it is automatic, drill estimation for one session, and run one timed mock. Those three cover the failure modes that sink most rounds. Skip the breadth reading entirely, because vocabulary you acquired yesterday will not survive a follow-up question, and the companion will flag a thin budget as tight rather than pretending otherwise.
Five questions to ask your own diagram
Before you declare a design finished, and as a self-check during practice, run the board through five questions. They take about two minutes and they catch most of what interviewers ask next.
Can I trace one request end to end? Follow a single read from client to response and a single write from client to durable storage, out loud, naming every hop. If a hop is vague, that is the part you do not actually understand yet.
Does every requirement have something serving it? Go back to the list you agreed in Step 3 and point at the component responsible for each one. Anything unclaimed is a gap; anything on the board that no requirement needs is a candidate for deletion, and deleting it is a good look.
Where does this break first? Find the component your own numbers put under the most pressure and say so before you are asked. It is almost always the hot-path datastore, a single choke-point service, or one machine’s network capacity.
What happens when each piece dies? Take the two or three most important components and answer what the system does without them. This is where cache stampedes, health checks, local state and failover consistency all surface naturally.
What would I change at ten times the load? Rerun the estimates rather than listing technologies, find which constraint binds first, and address that one. If you can answer those five questions about your own board, you have already answered most of the wrap-up. Run your own numbers in the companion as you practise.
The system design prep checklist
Save this and work it in order:
- Step 1, learn the blocks as trade-offs. For load balancing, caching, replication, partitioning, queues and the storage families, know what each solves, costs, excludes and introduces.
- Step 2, drill estimation. Requests per second, storage per day and over five years, and bandwidth, computed out loud in under three minutes, rounding hard and saying so.
- Step 3, rehearse the opening. Functional requirements, non-functional requirements, agreed scale, explicit non-goals, restated in two sentences before you draw anything.
- Step 4, draw one plain high-level design. Client to storage and back, both paths traceable, no component present that a requirement or a number did not force.
- Step 5, go deep on one component. Pick the one your numbers pressure most, say why, and work it to mechanism rather than adding more boxes.
- Step 6, rehearse trade-offs. Options, costs, a decision, and what would change your mind, using real trade-offs instead of slogans.
- Step 7, run timed mocks out loud. Cold prompts, a real clock, the employer's drawing surface, interruptions, and an honest debrief on process.
- Step 8, prepare the follow-ups. Bottlenecks named before you are asked, failure behaviour per component, and a recompute-then-address answer for ten times the load.
A candidate who works all eight is preparing on process rather than on hope. The parts most often skipped, the opening script and the out-loud mocks, are precisely the parts that decide the round, so protect those when the temptation is to read one more architecture write-up. Set up your own plan in the companion or the ROI calculator before your next loop, and see our note on negotiating a tech salary for what happens after the offer, and on getting promoted in tech for the design conversations that follow you into the job.
The bottom line
System design interview prep is not a race to memorise architectures. It is a sequence: learn the building blocks well enough to weigh them, get fluent with the arithmetic that turns opinions into constraints, rehearse the opening until asking beats drawing, produce one coherent design, go deep on exactly one component, make every trade-off legible, practise out loud under a clock, and have the bottleneck and scaling answers ready before they are requested. Candidates lose this round by starting to solve before they know what they are solving, and that is a habit, which means it is fixable in a way that raw knowledge gaps are not.
Spend the first several minutes on requirements and scale even when it feels like wasted time, because it is the only part of the round that cannot be recovered later. Let numbers force your components rather than choosing components you like and justifying them afterwards. Say what you are not solving. Say what would change your mind. Keep talking, because silence is the only thing in this format that is scored as nothing. Enter your weeks, hours, level, exposure and round length in the companion, see how many timed mocks your budget affords, and go and be bad at a few of them in private before you are watched.
CredYard publishes this breakdown to describe how system design interviews are commonly structured and how candidates can prepare for them, not to represent the practice of any particular employer, interview platform, training provider or certification, and nothing here is career, hiring or professional advice. The hour budgets, time splits, sizing assumptions and the link-shortening worked example are illustrations of a method rather than measured statistics, benchmarks or promises about any outcome, and the arithmetic in them is deliberately rounded to the order of magnitude that estimation in this format calls for. Interview formats, expectations by level and what individual interviewers value differ widely by employer, team and region and change over time, so confirm the shape of your own round with the recruiter and treat your own practice and results as the inputs that matter.
Frequently asked questions
How long does it take to prepare for a system design interview?
There is no single number, because it depends on how much distributed systems work you have already done and the level you are targeting. As an illustrative planning frame, someone with production experience across services, caches and databases might need a few weeks of focused evenings, while a candidate who has only ever worked inside one application might plan for a couple of months of steady practice. A useful way to budget is in hours rather than calendar weeks: an illustrative twenty five to seventy hours depending on level, weighted toward the areas you have never touched. The companion on this page reads your weeks and weekly hours back as an available total so you can see whether your runway is realistic before you start.
What is the first thing to do in a system design interview?
Clarify what you are building before you draw anything. Ask what the core user actions are, which of them are in scope, who the users are, and what scale the system is expected to handle, then state the assumptions you are making so the interviewer can correct them cheaply. Agreeing the functional requirements, the non-functional requirements and an explicit list of what you are not solving usually takes several minutes, and those minutes are the single highest-return part of the round. Candidates who skip this step almost always design the wrong system beautifully.
Do I need to memorise system design case studies?
Memorising a canonical answer to a well-known prompt is one of the weaker ways to prepare, because interviewers routinely alter a constraint and watch what happens. A memorised design collapses the moment the requirement shifts, while a candidate who understands why a queue was added can move with the change. Study a handful of common prompts to build vocabulary and pattern recognition, but practise re-deriving the design from requirements rather than reciting it. The skill being tested is reasoning under constraints, not recall.
How much maths do I need for back-of-envelope estimation?
Very little, and none of it is hard. You need to divide comfortably by the number of seconds in a day (86,400, which people usually round to about 100,000 for speed), multiply a per-record byte size by a record count, and convert between kilobytes, megabytes, gigabytes and terabytes by moving three zeros at a time. Rounding aggressively is not sloppiness here, it is the point: an estimate that is right to within an order of magnitude tells you whether a design needs one database or a partitioned fleet. Say your rounding out loud so the interviewer sees the reasoning rather than guessing at your arithmetic.
What if I have never worked on a large-scale system?
Most candidates have not, and the round is designed to be answerable without it. What the interviewer wants to see is whether you can reason about trade-offs, so build the reasoning from smaller experience you do have: a slow endpoint you cached, a report you moved to a background job, a table that grew until you added an index. Read publicly available engineering write-ups for vocabulary and shapes, then practise applying them to prompts out loud. Being honest about the limits of your experience while reasoning clearly reads far better than confident hand-waving.
How is a system design round scored?
There is no single rubric across employers, but the recurring themes are consistent: did you scope the problem before designing it, is the high-level design coherent and does data flow sensibly through it, can you go one level deeper on a component when asked, do you name trade-offs rather than assert choices, and do you communicate clearly throughout. Notice that none of those is a correct answer. Two candidates can produce very different diagrams and both pass, because the diagram is evidence of the reasoning rather than the thing being graded.
How many mock interviews should I do before the real one?
As an illustrative target, aim for enough that the format stops feeling novel, which for most people is somewhere between three and eight timed sessions. A mock plus an honest debrief runs about an hour and a quarter, so a plan with an illustrative twenty two percent of its hours reserved for mocks affords roughly that range at typical prep budgets. Quality matters more than count: one recorded session you review carefully beats three you rush through and never revisit. The companion reads back how many your own hour budget affords.
Is the system design round different from a technical interview?
It is one round inside a wider technical loop, and it tests a different skill from the coding rounds. A coding interview hands you a bounded problem with a correct answer and watches you implement it; a design round hands you an open-ended problem with no correct answer and watches you impose structure on it. Our walkthrough on preparing for a technical interview covers the loop as a whole, including the coding and behavioural rounds. This one goes deep on the design conversation, which is usually the round strong coders have rehearsed least.