System Design Interview Guide: The 6-Step Framework and How to Prepare

What a system design interview tests, the 6-step framework, how staff and startup rounds differ, what each level must show, common mistakes and a 4-week plan.

Beginner 16 min read · Updated

A system design interview asks you to design a real system, such as a URL shortener, a chat app or a ride-hailing service, in about 45 minutes while you explain your reasoning out loud. There is no single correct answer. The interviewer is watching how you think: whether you pin down the problem, pick sensible parts for the stated scale, and can defend the trade-offs behind each choice.

What system design actually is

System design is the work of planning an application, usually a data-heavy one, by choosing the right data systems and wiring them together. You start from what the application must do, decide which tools handle which job (a database for records, a cache for hot reads, a queue for background work, a search index for text queries), and then write application code that stitches those tools together so they behave as one.

Once several tools sit behind one API, clients no longer see the pieces. They see a single service. In effect you have built a new, purpose-made data system out of general-purpose parts, and that composite system can promise things none of the parts promise alone. For example, if your code always invalidates the cache when the database changes, clients get consistent answers even though the cache by itself guarantees nothing.

A more formal definition: system design is defining the architecture, components, modules, interfaces and data of a system so that it meets a set of requirements. It is a blueprint that keeps a complex system efficient, reliable and scalable. In practice it is the craft of making technical trade-offs that turn a vague problem into a solution that scales. Drawing boxes is the easy part; the skill is explaining why each box and arrow is there, given the constraints you were handed.

Knowing system design pays off twice. Companies test it, especially for senior roles. And it is what separates competent engineers from exceptional ones: writing code is expected of everyone, while designing systems that stay fast and correct under load takes deeper expertise.

System design vs object-oriented design

Two different interviews are often confused. Object-oriented (low-level) design is about the code inside one program. System (high-level) design is about many machines working together. See HLD vs LLD for more.

Object-oriented designSystem design
Typical problemsParking lot, elevator controller, chess game, vending machineWhatsApp, Twitter, YouTube, Uber, Netflix
ScaleOne machine, one processMillions of users, petabytes of data, several data centers
FocusCode structure, class relationships, design patternsArchitecture, data flow, distributed systems, scalability
Skills testedClass design, inheritance, interfaces, SOLID principlesChoosing components, partitioning, replication, trade-offs
What you produceUML class diagrams, interfaces, class hierarchies, working codeArchitecture diagrams, storage design, capacity estimates, API and schema design, deep dives
Where it runsA single processServices spread over many servers and regions

The two overlap, but the emphasis differs. Object-oriented design rewards clean, maintainable code. System design rewards performance, reliability and sensible cost at scale.

Who gets system design interviews

These interviews matter more the further you go in your career, because senior engineers spend less time writing individual features and more time shaping whole systems. They usually appear from mid-level roles and become central at senior levels, where engineers make architecture choices that affect entire products. You are likely to meet one if you are applying as:

  • An experienced software engineer (SDE/SWE). Senior engineers are expected to break problems down, choose technologies and design systems that scale. At this level the loop usually mixes coding (LeetCode-style) rounds with one or more design rounds.
  • An engineering manager (EM/SDM). Managers guide the technical direction of their team, so they need enough design depth to make and review architecture decisions. The interview checks both technical judgment and how they lead a technical discussion.
  • A technical program manager (TPM). TPMs plan and deliver technical projects across teams. Understanding how the system fits together lets them coordinate work and spot project risks early.

Real systems take thousands of engineering hours and years of experience to get right. Showing that you could build one, in 45 minutes, is the unusual challenge these interviews pose.

What you are designing

Every design, whatever the product, is made of the same three kinds of decisions:

  • Services: the components, applications and APIs that each provide one capability. They can live in one deployable monolith or be split into microservices; interview answers for large systems usually lean towards services that scale and deploy independently.
  • Dataflow: how data moves within and between services, including formats, protocols and patterns such as request/response, queues and streams. See dataflow patterns and synchronous vs asynchronous communication.
  • Storage: the databases, caches and file or object stores that hold data, how the data is modeled, and how it is kept consistent and durable.

Functional requirements

Functional requirements are the features: what the system must do for its users. They come from user needs and business goals, and in a company they are usually written down in a product requirements document (PRD) so engineers and stakeholders agree on what is being built. Typical examples:

  1. User actions: what a user can do, such as sign up, log in, post a photo or submit a form.
  2. Data input and processing: how the system should transform data it receives, such as resizing an uploaded image or computing a feed from the accounts a user follows.

Non-functional requirements

Non-functional requirements describe how well the system must work rather than what it does. The big three are:

  • Scalability: handle growing traffic and data without slowing down, by scaling vertically or horizontally and planning for growth. See scalability.
  • Availability: keep working through hardware and network failures, using redundancy, failover and health monitoring. See availability.
  • Performance: latency is how long one request takes; throughput is how much work the system completes per unit of time. See latency vs throughput.

Three more come up often: reliability (the system returns correct results), consistency (different services and replicas agree on the data) and efficiency (no wasted or duplicated work). The non-functional requirements guide covers each one with the patterns that deliver it.

What the interview tests

System design rounds test judgment and communication more than memorized facts. The interviewer wants to see whether you can:

  • Break a vague, open-ended problem into parts you can solve one at a time.
  • Show real technical knowledge of databases, caches, queues, stream and batch processing, and how they interact.
  • Recognize patterns: reusable architectures and design patterns that fit the problem.
  • Reason about trade-offs: every choice has a cost, so explain why you picked one option over another and when you would switch.
  • Communicate clearly: talk through your thinking, collaborate with the interviewer, and adjust when they add a constraint or push back. Real design work rarely goes in a straight line, and neither do these interviews.

Naming a technology is not a reason. "We use Kafka" earns little; "we put a queue between ingestion and processing so a slow consumer can't block writes, and we accept that downstream data is a few seconds stale" earns a lot.

The six-step interview template

Below staff level, at most medium and large companies, a design round follows the same shape. Owning this template keeps you from spending 20 minutes on requirements or diving into one component before the whole system exists.

1. Functional requirementswhat to build · ~4 min2. Non-functional requirementsscale, latency, consistency · ~3 min3. Resource estimationoptional · ~4 min4. Core entities and APIsnouns and verbs · ~5 min5. High-level designcomponents and data flow · ~12 min6. Deep divebottlenecks and trade-offs · ~15 min
The standard system design interview, step by step. Estimation is often optional; most of the score is earned in the high-level design and the deep dive.

1. Clarify the functional requirements

Agree on what is in scope before drawing anything. Two questions do most of the work:

  • Which features are already handled by existing services or APIs (authentication, payments, a user directory)?
  • Which features do we actually need to build in this design?

For a URL shortener that means: can users choose custom aliases, do links expire, and do we need click analytics? Write the answers down; they are the yardstick for every later decision.

2. Go through the non-functional requirements

Walk through the qualities that matter for this problem and state targets where you can. A useful checklist is the core six:

  • Scalability: how many users or requests the system must handle.
  • Availability: how much downtime is acceptable, and therefore how much redundancy (for example replication) is needed.
  • Latency: how fast responses must be. This depends on the product: a collaborative editor like Google Docs needs near-instant updates, while a file sync tool like Dropbox can take seconds.
  • Reliability: the service must consistently return correct, expected results.
  • Consistency: whether reads from different places must agree immediately, and which store is the source of truth.
  • Efficiency: avoiding redundant work and wasted resources.

Then check the special cases. Privacy is the common one: if you store emails, locations or other personal data, mention retention, deletion and regulations such as GDPR. Always tie each requirement to the problem in front of you rather than reciting the list.

3. Estimate resources (optional)

Many interviewers skip this and simply say "lots of users", especially for product questions like a social network or ride-sharing app. Estimates matter more for infrastructure questions such as a rate limiter or a distributed cache, where the numbers decide the design. When you do estimate, ask:

  • How many daily active users (DAU) must the system support?
  • How long must data be kept (retention)?

Then estimate:

  • QPS (queries per second), split into reads and writes. See QPS and load.
  • Concurrent connections, if clients stay connected (for example WebSockets in a chat app like WhatsApp).
  • Bandwidth in GB/s, for video streaming or image hosting.
  • Storage, from retention × object size × number of objects.
  • Likely bottlenecks, such as a database that can't take the write QPS.

See back-of-the-envelope estimation for worked numbers.

4. Define core entities and API endpoints

Core entities are the domain objects needed to meet the functional requirements. For a social network they are users, posts, comments and likes. They usually become database tables, and they are easy to spot: they are the nouns in the requirements.

APIs are the contract between the service and its clients. Specify the REST endpoints with their request and response shapes, but only for the functional requirements; extra endpoints just burn time. The endpoints are the verbs in the requirements (post a tweet, follow a user, fetch a timeline). Some interviewers prefer this step after the high-level design if they find it too detailed.

If the server must push data to the client, say how: WebSockets for two-way traffic such as chat, or Server-Sent Events for one-way updates such as live scores. The problem decomposition framework turns verbs, nouns and adjectives into use cases, entities and constraints systematically.

5. Draw the high-level design

Sketch the system end to end. The diagram should show:

  • The main components and how they talk to each other.
  • The data flow: how a request and its data move through the system.
  • The traffic pattern where it matters, for example push vs pull for a Twitter timeline.
  • The data model or schema, and which fields need indexes.

Check that every functional requirement is covered, but don't go deep yet. Keep the diagram to the parts that are specific to this problem: common pieces like authentication exist in almost every system and are usually left out. Also avoid naming specific products too early. Stacking trendy technologies is a well-known red flag; interviewers read it as covering for weak fundamentals. The system design template gives a starting shape that fits most problems.

6. Deep dive into the hard parts

Now find the components that will break first, usually under scale, and change the design to handle them. This part is open-ended and driven by the conversation with your interviewer, and the non-functional requirements decide which problems matter.

For each problem, propose more than one solution and compare them. The trade-offs nearly always come down to balancing scalability, latency and consistency. For a chat system the deep dives are usually connection management, message ordering and offline delivery; for a news feed, fan-out on write vs on read and the celebrity problem.

Practice rounds on this site state the core requirements in the brief so your time goes on estimation, APIs, the design and the deep dives. Still confirm scope out loud and ask about anything the brief leaves open, exactly as you would in a real interview.

A time budget for 45 minutes

PhaseTimeWhat to do
Requirements (steps 1–2)5–7 minFeatures, users, scale targets and what is out of scope.
Estimation (step 3)0–5 minQPS, read/write ratio, storage and bandwidth. Orders of magnitude are enough.
Entities and API (step 4)3–5 minThe handful of endpoints that matter. It forces precision about inputs and outputs.
High-level design (step 5)10–12 minThe whole path for the core operations: clients, services, storage, caches, queues.
Deep dives (step 6)15 minThe bottleneck, the data model, consistency and failure handling.
Wrap-up3 minSummarize the key decisions, their costs, and what you would do next.

Staff-level interviews

For staff and above (Google L6+, Amazon Principal and equivalents) the template changes. Rote steps like back-of-the-envelope math or listing every API matter much less; they are tedious and crowd out the interesting parts. Quick arithmetic is still a useful skill, but at this level it is a bonus, not a deciding factor, so skip it unless asked.

Instead, expect hypotheticals that stretch the design: make it effectively infinitely scalable, or keep it correct through failures that would be rare in practice. The flow usually looks like this:

  1. Clarify the problem with detailed questions until you understand it fully.
  2. Identify the core challenges: name the few things that make this problem genuinely hard.
  3. Design a solution from simple components. The idea may take experience to reach, but once stated it should be easy enough for a junior engineer to start building.
  4. Go deep with the interviewer on the parts they choose.

Collaboration counts heavily at this level. Interviewers want to know you are easy to work with, so stay curious, invite pushback and build on their ideas.

Startup interviews

Early-stage startups hire differently. With little time and money, they need people who ship working products quickly and contribute from week one. So their design rounds focus on practical systems that can be built and deployed soon, not on extreme scale or rare edge cases.

Unlike big companies, where naming specific products is often discouraged, startups like it when you know their stack and use it in your design: it shows you would need little onboarding. To prepare:

  • Learn their tech stack from job posts, engineering blogs and the product itself.
  • Design simple, practical solutions that a small team could build in weeks.
  • Show immediate value: explain how you would deliver the first version and iterate.

What each level is expected to show

The biggest difference between levels is how much ambiguity you can handle. Mid-level candidates get well-defined problems with clear requirements. Senior candidates get deliberately vague prompts they must clarify and break down. Staff candidates work with extreme ambiguity and often have to define the problem itself.

Problem size grows with level too. L4 problems have a simple contract: given input A, return output B. L5 problems combine two or three concepts and leave room for choices. L6 problems either combine four or five subsystems or start from abstract goals that need real clarification before any design begins.

L4 · mid-levelL5 · seniorL6 · staff
Problem scopeWell-defined, with guidanceVague; you clarify and decomposeOpen-ended; you define the problem
Depth expectedSurface-level understanding of each componentMechanisms and trade-offs behind each choiceFailure modes, edge cases and why alternatives lose
Common topicsCache, database, load balancer, API designReplication, partitioning, queues, consistencyMulti-region, consensus, cross-system correctness
Interview focusRunning the template cleanly, knowing components, basic trade-offsDriving the design and choosing the right deep divesFinding the core challenges and leading the discussion

L4 in detail. Problems like TinyURL (long URL in, short URL out) or a YouTube view counter (video ID in, count out) are solved problems with well-known answers. The interview is fairly mechanical: requirements, APIs, architecture, then a light deep dive. Because the answer is known, interviewers have little patience for a messy structure, so you must own the template. Know the basic building blocks (load balancer, cache, database, message queue), when to pick SQL or NoSQL, and vertical vs horizontal scaling. Deep dives stay shallow: "LRU evicts the least recently used item" is enough. Most L4 candidates fail on time management, not knowledge: they run out of time or present a disorganized design.

How depth grows. Take "strong consistency" as an example of the depth ladder:

  • L4: what it means (every read sees the latest write). Concept awareness.
  • L5: how you get it, for example by reading from the leader or using quorum reads and writes, and what it costs in latency and availability.
  • L6: when to give it up, which operations truly need it, and how replication, consensus and partitions interact. See consistency models and the CAP theorem.

Why preparing is hard, and how to do it well

System design is awkward to study for several reasons:

  • Little formal teaching. University courses cover theory, and there is rarely a course on designing real systems.
  • Little exposure to scale. Many engineers mostly wire APIs together or work on smaller projects, so they never see a large system's internals.
  • Uneven free content. Blog posts vary a lot in accuracy, and it is hard to tell which are right.
  • Hard-to-read engineering blogs. Company blogs describe real systems but assume a lot of background.
  • Disorganized material. Many books and courses jump between topics, leaving you unsure how to design something from scratch.
  • Memorizing buzzwords. Without a clear path, candidates memorize solutions, which collapses when the problem is new.

The fix is structured learning from first principles, hands-on projects where you can get them, and lots of practice designing from a blank page. How to practice system design explains why memorizing answers fails and lays out a better study plan.

The most common system design interview mistakes

  • Designing before clarifying. Jumping to components before agreeing on requirements and scale.
  • Buzzword architecture. Adding Kafka, Redis and microservices because they sound senior, not because the problem needs them.
  • No numbers. Claiming a design scales without any estimate of load or data size.
  • One-sided choices. Presenting decisions without their cost, such as eventual consistency or operational overhead.
  • Ignoring failure. Never discussing what happens when a dependency is slow or down.
  • Poor time management. Spending so long on one part that the design is never finished.
  • Going silent. The interviewer can only score reasoning you say out loud.

How to practice: the loop that actually works

Reading solutions builds recognition. Interviews test production: building a design from a blank page and defending it. That only improves with practice that looks like the real thing.

  1. Pick a realistic prompt with stated requirements and a time limit.
  2. Design it end to end without looking at a solution, on a canvas or whiteboard rather than in your head.
  3. Write down why for every significant component and connection, as if the interviewer had asked.
  4. Get feedback against a rubric, from a peer, a mentor or an AI reviewer, so you see which dimension is weakest.
  5. Redo the same prompt a few days later and compare. Improvement on a repeat attempt is the clearest sign you're learning.

That loop is what DesignRounds is built around: realistic briefs, an architecture canvas, an AI interviewer that asks why, and a rubric-based review of six dimensions. You can start with a free round. When you want to check your reasoning against a complete answer, read a worked problem such as Design Twitter or Design Tinder.

A 4-week system design practice plan

WeekFocusPractice
1Fundamentals and the frameworkTwo beginner rounds, e.g. a URL shortener and a unique ID generator. Focus on requirements, estimates and a clean high-level design.
2Classic product systemsA chat system, a notification service and search autocomplete. Practice deep dives.
3Scale and dataA news feed, cloud file storage and a distributed cache. Focus on bottlenecks and storage choices.
4Your target roleRounds from your discipline: data engineering, ML, platform, distributed systems or frontend. Redo your weakest round from week 1.

Start with these system design interview questions

Browse every question by role and level in the practice library, or read the full list of system design interview questions.

Frequently asked questions

How long does it take to prepare for a system design interview?

It depends on your experience. Many engineers find that four to eight weeks of regular practice, with two or three complete designs a week, is enough to become comfortable with the format. Practicing full rounds matters more than total hours of reading.

Do junior engineers get system design interviews?

Often a lighter version, more common from mid-level roles up. Juniors are usually expected to produce a reasonable high-level design and explain basic trade-offs. Seniors are expected to drive the conversation, go deep and reason about failure.

Do I need to know specific cloud services?

Not for most big-company interviews: generic building blocks such as load balancers, caches, queues, relational and key-value stores are fine, and naming a product helps only if you can explain why it fits. Startups are the exception; there, knowing and using their stack is a plus.

Is there a single right answer?

No. Two very different designs can both score well if they meet the requirements and the trade-offs are explained. That is why practicing your reasoning matters more than memorizing reference architectures.