Lessons
1 · System Design Foundations
2 · APIs and Communication
3 · Capacity Estimation
4 · Core Building Blocks
5 · Databases
- 12Relational Databases and Data Modeling for System Design
- 13Database Indexes and Query Performance: How to Make Reads Fast
- 14Transactions, Isolation Levels and Concurrency Control: Preventing Race Conditions
- 15Database Replication: Primary-Replica, Read Replicas, Lag and Failover
- 16Database Sharding and Partitioning: How It Works and When You Need It
- 17SQL vs NoSQL: Data Models and How to Choose the Right Database
6 · Distributed Systems
- 18Why Distributed Systems Are Hard: Partial Failure, Timeouts and Clocks
- 19CAP Theorem and Consistency Models Explained Without the Myths
- 20Idempotency, Retries and Message Delivery Guarantees
- 21Distributed Transactions: Two-Phase Commit, the Outbox Pattern and Sagas
- 22Distributed Locks, Leases, Leader Election and Consensus
7 · Reliability and Operations
8 · Architecture and Security
9 · Interview Method and Foundation Case Studies
10 · Real-World Case Studies
- 33Design a Notification System: Email, SMS and Push at Scale
- 34Design a Chat System Like a Messaging App
- 35Design a News Feed: Fan-Out, Ranking and the Celebrity Problem
- 36Design Search Autocomplete (Typeahead)
- 37Design a Distributed Job Scheduler
- 38Design a Ticket Booking System Without Overselling
- 39Design a Payment System: Idempotency, Ledgers and Reconciliation
11 · Large-Scale Case Studies
- 40Design a Video Streaming Platform: Upload, Transcoding and Adaptive Streaming
- 41Design a Ride-Hailing System: Location, Matching and Real-Time Updates
- 42Design a Food Delivery Platform: Orders, Restaurants and Delivery Partners
- 43Design an E-Commerce System: Catalog, Cart, Checkout, Inventory and Flash Sales
- 44Design a Web Search Engine: Crawling, Inverted Indexes and Ranking
12 · Interview Readiness
Lesson 29 · Interview Method and Foundation Case Studies
The System Design Interview Framework: A Repeatable Method for Any Problem
A practical, repeatable way to run a 45-minute system design interview: what interviewers typically evaluate, a 21-item checklist grouped into seven phases, a time plan, phrases for clarifying, estimating and stating trade-offs, how to handle hints and pushback, how SDE-1 and SDE-2 expectations differ, and a compact worked example.
For
Anyone preparing for a system design interview, from SDE-1 candidates to experienced engineers aiming for SDE-2, who wants a structure to rely on under pressure.
Level
Before you start
For SDE-1 preparation, read articles 01 to 13 first; for SDE-2, articles 01 to 28. The framework assumes you know the building blocks and can do back-of-the-envelope estimation.
On this page
Key takeaways
- A system design interview checks how you reason: exploring the problem, designing step by step, going deep where it matters, weighing trade-offs and communicating clearly.
- Use the same seven phases every time (Clarify, Estimate, Interface, Data, Baseline, Scale, Harden), expanded into a 21-item checklist.
- Spend roughly the first quarter of the time on requirements, estimates, APIs and data, and keep at least a third for scaling and deep dives.
- State every important decision as a trade-off: what you chose, what it costs, and why that cost is acceptable here.
- SDE-1 candidates should be clear and correct on fundamentals; SDE-2 candidates should also drive the discussion and go deep on data, consistency and failure.
Most people who struggle in system design interviews do not lack knowledge. They know what a cache is and what sharding means. What goes wrong is structure: they start drawing before they understand the problem, spend twenty minutes on a part the interviewer does not care about, forget to estimate, never mention failures, and run out of time before saying what their design actually is.
This article gives you a structure you can rely on under pressure. It is the seven-phase method from article 01, expanded into a 21-item checklist with a time plan, the phrases that make your reasoning visible, and a clear picture of what changes between SDE-1 and SDE-2 rounds. Every case study that follows uses it.
What you will learn
#- What system design interviewers typically evaluate.
- The 21-item checklist, grouped into the seven phases.
- A time plan for 45-minute and 60-minute interviews.
- Phrases for clarifying, estimating, deciding and summarising.
- How to handle hints, pushback and getting stuck.
- How SDE-1 and SDE-2 expectations differ.
- A compact worked example: a game leaderboard.
- How to practise.
What interviewers typically evaluate
#Rubrics differ between companies and interviewers, and change over time, so treat this as a general picture rather than any company's official criteria. Most system design evaluations look for evidence of:
Dimension | What it looks like |
|---|---|
Problem exploration | Asks clarifying questions; agrees scope; states measurable requirements |
Design quality | A coherent architecture that meets the requirements, built up step by step |
Technical depth | Goes deep in two or three areas: data model, scaling, consistency, failure handling |
Trade-offs | Names alternatives and explains choices with their costs |
Communication | Explains clearly, structures the discussion, responds to feedback |
Notice what is not on the list: naming many technologies, or reproducing a famous company's architecture. Interviewers look for observable reasoning.
The checklist: 21 items in seven phases
#Phase | Checklist items | Output |
|---|---|---|
1. Clarify | 1. Clarify the problem and users. 2. Functional requirements. 3. Non-functional requirements. | A short list of what is in scope, and measurable targets |
2. Estimate | 4. Scale assumptions. 5. Capacity estimation: QPS, storage, bandwidth, cache. | A few numbers that identify the hard parts |
3. Interface | 6. APIs (with idempotency where needed). | Four to six endpoints or messages |
4. Data | 7. Data model: entities, keys, access patterns, indexes, partition keys. | The main tables or collections |
5. Baseline | 8. High-level architecture. 9. Request flow walkthrough. | A simple diagram and one request traced through it |
6. Scale | 10. Bottlenecks. 11. Scaling. 12. Caching. 13. Database choices and scaling. 14. Asynchronous processing. | An evolved diagram with a reason for each addition |
7. Harden | 15. Consistency. 16. Reliability. 17. Failure handling. 18. Security. 19. Observability. 20. Trade-offs. 21. Final summary. | A defended design and a two-minute summary |
You will not always cover all 21 in depth. The checklist is a map: it reminds you what exists, so you can choose consciously what to skip ("I'll skip detailed security unless you'd like me to cover it") rather than forgetting it.
A time plan
#45-minute interview
#Minutes | Phase | Notes |
|---|---|---|
0 to 5 | Clarify | Restate the problem, ask questions, write requirements |
5 to 10 | Estimate | Traffic, storage, and one or two other numbers that matter |
10 to 15 | Interface and Data | Key APIs and the main tables, briefly |
15 to 23 | Baseline | Simple architecture, then trace one request |
23 to 38 | Scale and deep dives | What breaks first; fix it; go deep where the interviewer steers |
38 to 43 | Harden | Failures, consistency, security, observability, trade-offs |
43 to 45 | Summary | Two-minute recap, plus what you would do next |
Roughly: a quarter of the time on understanding and framing, a third or more on scaling and depth. If the interviewer cuts in to steer towards a deep dive earlier, follow them; the plan is a default, not a script.
60-minute interview
#Keep the first sections similar (they do not need to grow much) and give the extra time to deep dives: a second component in depth, a failure walkthrough, or a follow-up requirement ("now make it multi-region").
Phase by phase: what to do and what to say
#1. Clarify
#Restate the problem in one sentence, then ask questions that change the design (article 02 has a reusable list).
"To make sure I understand: we're building a service that turns long URLs into short ones and redirects people who visit the short link. Can I ask a few questions first?"
Then write requirements down, numbered, so you can refer to them:
"Functional: 1, create a short link; 2, redirect; 3, optional custom alias; 4, optional expiry. Out of scope: analytics dashboards and user accounts, unless you'd like them. Non-functional: redirects under 50 ms at p99, very high availability for redirects, links never silently point to the wrong place."
Mark the one or two requirements that will drive the design: "this is extremely read-heavy, so the redirect path is where most of the design effort goes."
2. Estimate
#State assumptions, compute, and draw a conclusion (articles 06 and 07).
"Assume 100 million new links a month and a 100-to-1 read-to-write ratio. That's about 40 writes a second and 4,000 reads a second on average; with a peak factor of 3, 12,000 reads a second. Each link is about 500 bytes, so 50 GB a month, 600 GB a year: one database can hold years of it. The read rate says we want a cache."
Keep it to two or three minutes. If the interviewer says "skip estimation", skip it gracefully.
3. Interface
#"Two main endpoints:
POST /v1/linkswith the long URL and optional alias, returning 201 and the short code; andGET /{code}, returning a redirect. Creation should take an idempotency key so retries don't create duplicate links."
4. Data
#"One main table keyed by short code, since every redirect looks up by code. Columns: code, long URL, owner, created and expiry times. The access pattern is a point lookup by primary key, which also means it shards cleanly by code if we ever need to."
5. Baseline
#Draw the simplest thing that works, then walk a request through it:
"Client to load balancer to stateless app servers to the database. For a redirect: the server receives
GET /abc123, looks up the code, and returns a 302 with the location. Now let's see what breaks first at 12,000 reads a second."
The baseline matters because it shows you can design without reflexively adding every component, and it gives the rest of the interview a clear starting point.
6. Scale
#Use the three questions from article 01 aloud:
"What breaks first? Reads: 12,000 per second of point lookups on a hot subset. I'll add a cache in front of the database (cache-aside, TTL of a day, since links rarely change). With a 95% hit ratio the database sees about 600 reads a second."
Each addition gets a reason tied to a number or a requirement. Repeat until the interviewer is satisfied or steers you to a deep dive.
7. Harden
#Walk through failures, consistency, security and observability briefly but explicitly:
"If the cache fails, the database would see 12,000 reads a second, which it can't sustain, so we'd shed load and serve popular links from a small in-process cache. If the primary fails, a synchronous standby takes over within a minute; redirects keep working from replicas and cache. Consistency: a newly created link must work immediately for its creator, so we write through to the cache on creation..."
Stating trade-offs
#Every important decision should sound like this, with three parts:
"I chose X. It costs Y. That's acceptable here because Z."
For example: "I chose a 302 redirect rather than 301. It costs us more requests, because browsers won't cache the redirect permanently. That's acceptable because we want to count clicks and be able to change or expire links."
The final summary
#In under two minutes: the requirements you designed for, the architecture in one breath, the two or three key decisions and their trade-offs, the main risks and what you would do next.
Handling hints, pushback and getting stuck
#- Hints are gifts. If the interviewer asks "what happens when this key gets very popular?", they are steering you to a deep dive. Go there.
- Pushback is not a verdict. "Why not just use a NoSQL store?" usually means "explain your reasoning". Restate your reasons; if their point is better, adopt it openly: "That's a good point; given the access pattern is only by key, a key-value store would also fit, and I'd choose based on what the team already operates."
- When stuck, go back to the requirements and numbers: "Let me look at what we need: 12,000 reads a second, mostly repeated. That suggests..."
- Check in at transitions: "I have a baseline. Shall I go into scaling the reads, or would you like to see the data model in more detail first?"
- Do not go silent. Thinking aloud lets the interviewer follow and help.
Diagrams that help
#- Draw boxes for components and label the arrows (what flows).
- Distinguish the request path (synchronous) from the asynchronous path (queues and workers), for example with dashed lines or separate rows.
- Show data stores explicitly, with what they hold.
- Evolve one diagram as you scale, rather than drawing a new one, so the interviewer sees the history of decisions.
SDE-1 and SDE-2: what changes
#Interview levels and expectations vary by company; the comparison below is a general guide.
Area | SDE-1 | SDE-2 |
|---|---|---|
Driving the discussion | Follows the structure; responds well to guidance | Drives the structure; chooses where to go deep and says why |
Requirements | Clear functional and basic non-functional requirements | Prioritises requirements and states which ones conflict |
Estimation | Correct, rounded numbers | Uses numbers to justify or reject components |
Architecture | Clean baseline, sensible use of load balancer, cache, queue, database | Evolves the design under load; partitioning and replication strategies |
Data | Sensible schema and indexes | Partition keys, hot keys, consistency per operation, migration concerns |
Failure handling | Mentions redundancy, retries, timeouts | Walks through partial failures, duplicates, data-loss windows, degradation |
Trade-offs | Names alternatives | Quantifies costs and connects choices to requirements |
Green flags and red flags
#Green flags | Red flags |
|---|---|
Asks questions before designing | Starts drawing immediately |
States assumptions and numbers | No numbers at all, or false precision |
Starts simple and evolves | Begins with every technology they know |
Gives a reason for each component | "We'll add Kafka because it scales" |
Talks about failure without being asked | Only the happy path |
States trade-offs | Presents choices as obviously correct |
Checks in with the interviewer | Monologue for 30 minutes |
Ends with a clear summary | Runs out of time mid-diagram |
Worked example: a game leaderboard, compressed
#Here is the framework applied briefly to "design a leaderboard for a mobile game", to show the shape. The full case studies that follow are much deeper.
Clarify. Players submit scores after each match; the app shows the global top 100 and the player's own rank. Questions: one global board or per region and per season? (Per season, global.) How fresh must ranks be? (Within a few seconds.) Ties? (Earlier score ranks higher.) Out of scope: friends' leaderboards, anti-cheat details.
Estimate. Assume 5 million daily players, 10 matches each: 50 million score submissions a day, about 580 per second on average, about 1,700 at a peak factor of 3. Reads of the top 100 and "my rank": assume 20 per player per day, 100 million a day, about 1,200 per second average, 3,500 peak. A season has up to 20 million players: one entry each (player id and score) is small.
Interface. POST /v1/seasons/{seasonId}/scores (idempotency key per match id), GET /v1/seasons/{seasonId}/leaderboard?limit=100, GET /v1/seasons/{seasonId}/players/{playerId}/rank.
Data. Durable store: match_results(match_id PK, player_id, season_id, score, finished_at), the source of truth. Ranking structure: a sorted set per season, member = player id, score = best score (with a tie-breaker encoded). Redis sorted sets keep members ordered by score and support range queries and rank lookups efficiently, which is exactly this access pattern (Redis sorted sets).
Baseline. Game servers call the score API; the API writes the match result to the database and updates the player's best score in the sorted set if higher; reads come from the sorted set.
Scale. 1,700 writes and 3,500 reads per second are well within one in-memory sorted set's comfortable range on suitable hardware (to be confirmed by load testing); 20 million members fit in memory. The top 100 is the same for everyone, so cache it for one second, cutting most of the read load.
Harden. If the sorted set is lost, rebuild it from match_results (a job reads each player's best score for the season). Duplicate submissions are harmless because match_id is unique. Consistency: a player's own rank may lag by a second; acceptable per requirements. Security: only game servers (authenticated service identities) may submit scores, never clients directly, which blocks trivial cheating. Observability: submission rate, sorted-set update latency, rank-query p99. Trade-off: an in-memory ranking structure gives fast, simple ranks at the cost of rebuild time after a failure; a replica of the sorted set reduces that risk.
Summary. "Scores are stored durably by match and folded into a per-season sorted set keyed by player; reads serve top-N and rank directly from it with a short cache on the top 100. Idempotency by match id prevents double counting; the sorted set is rebuildable from the durable store."
How to practise
#- Solo, timed. Pick a problem, set a 45-minute timer, and talk through it aloud while writing notes and diagrams. Record yourself if you can.
- Compare with a reference. After finishing, read the matching case study in this course and list what you missed.
- Score yourself with the rubric in article 45.
- Mock interviews with a friend or peer, taking turns as interviewer. Interviewers learn as much as candidates.
- Repeat problems after a week or two. The goal is fluency with the method, so new problems feel familiar.
Common mistakes
#- Spending 15 minutes on requirements and running out of time.
- Estimating everything instead of the numbers that matter.
- Designing the final architecture first and justifying it backwards.
- Ignoring the interviewer's hints because they are not in your plan.
- Never summarising.
- Treating the interview as a quiz rather than a collaborative design session.
The checklist is also a protection against a quieter failure: a perfectly reasonable design with no stated trade-offs, which leaves the interviewer unable to see your judgment.
Exercises
#Exercise 1
Clarify a vague prompt
#The prompt is "Design Instagram Stories". Write eight clarifying questions, each with the design decision it affects, then write three functional requirements, an out-of-scope list and three measurable non-functional requirements.
Exercise 2: Plan the hour
#You have a 60-minute interview for "Design a ride-hailing app". Write a time plan, and choose two deep-dive topics you would steer towards if the interviewer gives you freedom, with reasons.
Exercise 3: Critique the transcript
#A candidate's first five minutes for "Design a URL shortener": "We'll use Kubernetes with microservices: a link service, an analytics service and a user service. Each has its own Cassandra cluster, and we'll put Kafka between them and Redis in front. For IDs we'll use Snowflake." List what is wrong with this start, and rewrite the first five minutes.
Exercise 4: Write the summary
#Write a two-minute final summary (about 200 words) for Pixly's photo upload and feed design as developed in articles 05 to 11, covering requirements, architecture, key decisions with trade-offs, and risks.
Show solutionHide solution
Questions (and what they affect):
- Photos only, or video too? (Storage, transcoding, bandwidth.)
- How long do stories last: 24 hours? (Retention, deletion jobs, storage size.)
- Who sees a story: all followers, close friends, public? (Authorisation, fan-out.)
- How many daily active users, and how many stories posted per day? (Scale.)
- Must viewers see a new story within seconds? (Push versus pull, consistency.)
- Do we show who viewed a story? (A viewer list per story: a write-heavy table.)
- Replies, reactions, stickers, music? (Scope.)
- Global or one region? (CDN, regional storage.)
Functional: post a photo or short video story that expires after 24 hours; view stories of people you follow, in order; see who viewed your story. Out of scope: replies, stickers, music, ads, highlights. Non-functional: story tray loads in under 300 ms at p99; new stories visible to followers within 10 seconds; media playback starts within 1 second at p95 worldwide; stories are deleted from public view within minutes of expiry.
Exercise 2
Show solutionHide solution
Minutes | Phase |
|---|---|
0 to 6 | Clarify: riders, drivers, matching, trip lifecycle, payment in or out of scope |
6 to 11 | Estimate: location updates per second (the dominant write load), ride requests per second, storage |
11 to 17 | APIs and data model: request ride, driver location updates, trip state |
17 to 25 | Baseline: apps, gateway, location service, matching, trip service, database |
25 to 45 | Deep dives (below) |
45 to 55 | Harden: failures (driver app disconnects, matching service crash), consistency (one driver per ride), security, observability |
55 to 60 | Summary and next steps |
Deep dives: (1) Location ingestion and geospatial indexing: it is the highest-volume, most distinctive part of the system and shows partitioning skill. (2) Matching without double-assigning a driver: it shows concurrency control, leases or conditional updates, and failure handling (offers timing out).
Exercise 3
Show solutionHide solution
Problems: no clarifying questions or requirements; no estimates to justify anything; technology names chosen before any need is shown; microservices and three Cassandra clusters for what is fundamentally one table and a very simple service; Kafka with no asynchronous requirement identified; analytics and users assumed to be in scope without asking.
Rewrite: "Let me restate: we turn long URLs into short codes and redirect visitors. A few questions: how many new links per month, and how many redirects? Do we need custom aliases, expiry, accounts, analytics? How fast must redirects be? ... Assuming 100 million new links a month and 100 reads per write: about 40 creates and 4,000 redirects a second on average, 12,000 at peak. Storage around 600 GB a year. So this is a small amount of data with a very read-heavy, latency-sensitive redirect path. I'll start with one service and one database table keyed by code, then add caching for redirects. Analytics, if needed, can be an asynchronous click stream later."
Exercise 4
Show solutionHide solution
"We designed Pixly to let 10 million daily users upload photos and see a feed of people they follow, with p99 feed loads under 300 ms, uploads acknowledged within 2 seconds, and no acknowledged photo ever lost.
Stateless API servers sit behind a multi-zone load balancer. Clients upload photo bytes directly to object storage using presigned URLs, so the API only handles metadata; images are delivered through a CDN, which cuts peak egress at the origin from about 28 to about 3 Gbps. Metadata lives in PostgreSQL, modelled around our access patterns, with a synchronous standby and read replicas. Redis caches hot metadata and holds sessions and like counters.
After an upload, the API commits the photo row and a photo.uploaded event through an outbox; workers make thumbnails, run moderation and update feeds and notifications asynchronously. The trade-off is that followers see new photos after a few seconds, which the requirements allow, in exchange for fast uploads and isolation from slow work.
Main risks: a cold cache overloading the database, which we handle with request coalescing and load shedding, and the likes table's write growth, which may need partitioning later."
Where to go next
#- Next: Design a URL Shortener (and Pastebin): A Complete Walkthrough, the first full case study using this framework.
- For the interview round as a whole: Software Interview Preparation: A 6-Week Plan That Actually Works covers coding and behavioural preparation alongside system design.
Sources & further reading
- Technology
- Software Engineering
- #distributed systems
- #interview preparation
- #roadmap
- #scalability
- #system design
- #system design interview
Connected lessons
Linked from 4 guides
Other pages in the library that point here.
Keep reading
More in Technology →Guide · Technology
Inheritance, Overriding and Overloading
Guide · Technology
Generics: Type Safety, Wildcards and Erasure
Guide · Career
A LinkedIn Profile That Gets Recruiter Messages

