How to Ace a System Design Interview (Framework + Examples)
A repeatable framework for system design interviews β how to structure your answer, what to cover in each phase, common mistakes that fail candidates, and worked examples for URL shortener, chat app, and notification system.
Most system design interview failures aren't knowledge failures β they're structure failures. The candidate knows distributed systems but doesn't know how to communicate their thinking in 45 minutes. This guide gives you a repeatable framework that works for any system design question.
Why System Design Interviews Are Different
In a coding interview, there's a right answer. In system design, there isn't. The interviewer wants to observe your engineering judgment β how you navigate trade-offs, ask the right questions, and communicate architectural decisions.
The most common failure modes:
- Jumping straight to the solution before clarifying requirements
- Covering breadth without depth (listing buzzwords, not explaining why)
- Not driving the conversation β letting the interviewer drag answers out of you
- Ignoring non-functional requirements (latency, availability, scale)
- Never acknowledging trade-offs β treating every choice as obviously correct
The Framework: 6 Phases in 45 Minutes
Phase 1: Clarify Requirements (5 minutes)
Never start designing before you've locked down what you're designing. Ask:
Functional (what the system does):
- "What are the core user flows I need to support?"
- "What's in scope for this design and what's out of scope?"
- "Are there any features that seem important but aren't required for v1?"
Non-functional (how well it does it):
- "What's the expected scale β daily active users, requests per second?"
- "What's the latency requirement β sub-100ms? Sub-1s?"
- "Is this read-heavy or write-heavy?"
- "What's the availability requirement β 99.9%? 99.99%?"
- "Do we need strong consistency or is eventual consistency acceptable?"
Example for a URL shortener:
"Before I dive in β I want to confirm the scope. Should I cover analytics, or just the core shorten-and-redirect flow? And for scale, are we targeting something like bit.ly with billions of redirects per day, or a smaller internal tool?"
This single question tells the interviewer you think product-first and won't over-engineer.
Phase 2: Back-of-Envelope Estimates (3 minutes)
Estimates anchor your design decisions. Without them, you can't justify caching, DB choice, or the number of servers.
Key metrics to estimate:
- Reads per second / Writes per second β determines whether you need read replicas, caching
- Storage per year β determines whether you need sharding or archival
- Peak vs average β determines capacity headroom
Example: Notification system
Users: 500M
Notifications: 1B/day β 11,600/second average
Peak: 100M in 1 hour β 27,700/second (10x average)
Storage: 1B * 365 * 500 bytes β 180 GB/year β manageable
Conclusion: Need message queue for async delivery; peak requires horizontal scale of workersState your assumptions explicitly: "I'm assuming 100:1 read-to-write ratio, which meansβ¦"
Phase 3: High-Level Design (10 minutes)
Draw the system at the 10,000-foot view. Core components only β no implementation details yet.
Standard components for most systems:
Clients β CDN/Load Balancer β API Servers β Cache β Database
β
Message Queue β WorkersFor each component, state what it does and why it's there β not just draw boxes.
"I'll put a CDN in front for the redirect path because 80% of our traffic is reads and most short codes go viral in bursts β CDN edge caching removes the origin load entirely for hot links."
This is the level of justification that separates a 3/5 answer from a 5/5.
Common high-level patterns by system type:
| System type | Core pattern | |------------|-------------| | Read-heavy (Twitter feed, URL redirect) | CDN + Cache + Read replicas | | Write-heavy (logging, analytics) | Message queue + Async workers + Append-only storage | | Real-time (chat, notifications) | WebSockets + Pub/Sub + Persistent store | | Computation-heavy (video processing) | Queue + Worker pool + Object storage |
Phase 4: Deep Dive into Key Components (15 minutes)
The interviewer will guide you to the interesting parts. Common deep dives:
Database design:
- What schema?
- What indexes?
- SQL vs NoSQL β and why for this specific access pattern?
- How do you handle schema evolution?
Caching:
- What do you cache? Why these things and not others?
- Cache invalidation strategy?
- Cache stampede prevention?
Scaling the bottleneck:
- Where does the system break first as load increases?
- How do you scale that component?
Consistency trade-offs:
- Does this system require strong consistency everywhere, or can some parts be eventual?
- Where does consistency matter most to the user experience?
Be specific. Don't say "I'd use a database" β say "I'd use Cassandra here because the access pattern is partition-key reads for a time-ordered sequence, which maps directly to Cassandra's data model."
Phase 5: Address Bottlenecks and Failure Modes (7 minutes)
Work through the failure scenarios:
- Single points of failure: What happens if the primary DB goes down? If Redis is unavailable?
- Hot spots: What happens if one URL gets 10x the traffic? One user sends 1M messages?
- Cascade failures: If the DB slows down, does the API timeout, and does that cause a retry storm?
For each failure mode, describe the mitigation:
- SPOF β active-passive or active-active replication
- Hot spots β consistent hashing, request coalescing, circuit breaker
- Retry storms β exponential backoff with jitter, circuit breaker, queue-based load levelling
Phase 6: Summarize and Open Discussion (5 minutes)
Close with a 60-second summary:
"So the core design is: a stateless API tier behind a load balancer, Redis for caching the hot read path, Cassandra for durable storage because of the time-ordered append pattern, and Kafka for fan-out delivery to avoid synchronous coupling between write and notification. The main trade-off I've made is choosing eventual consistency for notification delivery in exchange for much higher throughput β transactional notifications get a separate priority queue to avoid that."
Then invite the interviewer: "I'm happy to go deeper on any of these β particularly the Kafka fan-out or the Cassandra schema."
This shows confidence, ownership, and communication skill.
Mistakes That Fail Candidates
1. No requirements clarification Starting to draw architecture within 30 seconds. The interviewer wants to see you ask good questions.
2. Mentioning technology without justifying it "I'd use Kafka here." β Why Kafka? Why not SQS? Why not Redis Streams? Stating a technology without the trade-off reasoning sounds like resume-driven development.
3. Only designing the happy path What happens when a server crashes? When the DB is slow? When a message queue backs up? Systems fail β your design must acknowledge this.
4. No API design
Sketch the core API endpoints early (even just: POST /shorten, GET /{code}). It shows you think end-to-end and it anchors the rest of the design.
5. Solving the wrong problem Spending 20 minutes designing the perfect caching strategy for a 100 user/day internal tool. Calibrate your design to the stated scale.
How to Practice
- Time-box yourself. Set a 45-minute timer. If you can't complete the full framework in 45 minutes, you need more practice.
- Say it out loud. System design is a verbal exercise. Silent whiteboarding isn't practice.
- Get a partner. Have someone play the interviewer, ask follow-up questions, push back on your choices.
- Review real architectures. AWS, Uber, Discord, Slack, and Figma all publish engineering blog posts about their architectures. Read three per week.
- Cover the classics. URL shortener, Twitter feed, YouTube, Uber dispatch, WhatsApp, web crawler, rate limiter β these cover 90% of the patterns.
Quick Reference: 45-Minute Allocation
Phase 1 β Requirements clarification: 5 min
Phase 2 β Estimates: 3 min
Phase 3 β High-level design: 10 min
Phase 4 β Deep dives: 15 min
Phase 5 β Bottlenecks & failures: 7 min
Phase 6 β Summary & discussion: 5 min
Total: 45 minThe framework doesn't guarantee a hire β but it guarantees you'll never be failed for poor structure.
Enjoyed this article?
Explore the System Design learning path for more.
Found this helpful?
Leave a comment
Have a question, correction, or just found this helpful? Leave a note below.