System Design Interview Guide: From Junior to Senior
Last updated: March 2026
I failed my first system design interview spectacularly. The interviewer asked me to design a URL shortener, and I spent 40 minutes talking about database schemas without once mentioning load balancing, caching, or how the system would handle 10 million requests per day. I got the rejection email the next morning. That was five years ago. Since then, I have conducted and participated in dozens of system design interviews, built distributed systems that serve real traffic (including BirJob's scraper infrastructure that hits 80+ sites daily), and studied every system design resource I could find. This guide is everything I wish someone had told me before that first interview.
What Is a System Design Interview?
A system design interview evaluates your ability to design large-scale distributed systems. Unlike coding interviews where there is a correct answer, system design interviews are open-ended conversations. The interviewer wants to see how you think, how you break down ambiguous problems, and how you make trade-offs.
What Level Gets System Design Questions?
| Level | System Design Weight | Expected Depth |
|---|---|---|
| Junior (L3/New Grad) | 0-10% | Basic API design, simple schemas |
| Mid-level (L4/SDE II) | 20-30% | Component design, basic scaling |
| Senior (L5/SDE III) | 30-40% | Full system design, trade-off analysis |
| Staff (L6) | 40-50% | Complex distributed systems, cross-team design |
| Principal (L7+) | 50-60% | Architecture strategy, organizational design |
At junior levels, you might be asked to design a simple API or a basic CRUD application. At senior levels, you are expected to design systems that handle millions of users, discuss consistency vs. availability trade-offs, and propose monitoring and alerting strategies. The same question — "Design Twitter" — will have very different expected answers depending on your level.
The 4-Step Framework
Every system design interview should follow this structure. I have used it in every interview I have done, both as a candidate and as an interviewer, and it works consistently.
Step 1: Clarify Requirements (5 minutes)
Never start designing immediately. Ask questions first. This is where most candidates fail — they jump straight into drawing boxes and arrows without understanding what they are building.
Questions to ask:
- Functional requirements: What are the core features? What does the user do? What data flows through the system?
- Non-functional requirements: How many users? What is the expected traffic? What is the latency requirement? What is the availability target?
- Scale: How much data? How many reads vs. writes? What is the growth rate?
- Constraints: Any existing infrastructure? Budget constraints? Compliance requirements?
Example: If asked "Design a chat application," your first questions should be: "How many users? Is this 1-on-1 or group chat? Do we need message history? File sharing? End-to-end encryption? Read receipts? What is the expected message throughput?"
Step 2: High-Level Design (10 minutes)
Draw the major components and how they interact. Start with the user, then work through the system:
- Client (web/mobile)
- Load balancer
- Application servers
- Database(s)
- Cache layer
- Message queues (if async processing is needed)
- External services (CDN, notification service, etc.)
At this stage, do not go deep into any single component. The goal is to show the interviewer the overall architecture so you can agree on what to dive into next.
Step 3: Deep Dive (20 minutes)
This is where you earn (or lose) the offer. Pick 2-3 components and go deep. The interviewer will often guide you — "Tell me more about how you would handle the database" or "What happens when a server goes down?"
Topics to be prepared for:
- Database choice: SQL vs. NoSQL, sharding strategy, replication, consistency model.
- Caching: Where to cache, cache invalidation strategy, cache eviction policy (LRU, LFU).
- API design: REST vs. gRPC vs. GraphQL, pagination, rate limiting.
- Data modeling: Schema design, denormalization, indexing strategy.
- Scaling: Horizontal vs. vertical, stateless services, auto-scaling.
- Consistency: Strong vs. eventual consistency, CAP theorem implications.
- Fault tolerance: Replication, failover, circuit breakers, retry logic.
Step 4: Wrap Up (5 minutes)
Summarize your design. Discuss trade-offs you made. Mention what you would do differently with more time or resources. Suggest monitoring, alerting, and operational considerations.
The 15 Most Common System Design Questions
Based on interview data from hundreds of candidates, here are the questions you are most likely to encounter, ranked by frequency:
| # | Question | Key Concepts | Difficulty |
|---|---|---|---|
| 1 | Design a URL Shortener (TinyURL) | Hashing, base62, read-heavy, caching | Medium |
| 2 | Design a Chat System (WhatsApp) | WebSockets, message queues, presence | Hard |
| 3 | Design a News Feed (Twitter/Facebook) | Fan-out, ranking, push vs. pull | Hard |
| 4 | Design a Rate Limiter | Token bucket, sliding window, distributed | Medium |
| 5 | Design a Key-Value Store | Consistent hashing, replication, WAL | Hard |
| 6 | Design a Web Crawler | BFS, politeness, dedup, distributed | Medium |
| 7 | Design a Notification System | Push/SMS/email, priority, templates | Medium |
| 8 | Design YouTube/Netflix | CDN, transcoding, adaptive streaming | Hard |
| 9 | Design Google Search | Inverted index, PageRank, crawling | Very Hard |
| 10 | Design an E-commerce System | Inventory, payments, order management | Hard |
| 11 | Design Uber/Lyft | Geospatial indexing, matching, ETA | Hard |
| 12 | Design a File Storage System (Dropbox) | Chunking, dedup, sync, metadata | Hard |
| 13 | Design a Metrics/Monitoring System | Time-series DB, aggregation, alerting | Medium |
| 14 | Design a Ticket Booking System | Concurrency, seat locking, payments | Medium |
| 15 | Design an API Rate Limiter (Distributed) | Redis, sliding window, consistency | Medium |
Essential Concepts You Must Know
Scaling Fundamentals
- Vertical scaling: Bigger machine. Simple but has limits. Good for databases in early stages.
- Horizontal scaling: More machines. Complex but nearly unlimited. Required for application servers.
- Load balancing: Distributing traffic across servers. Round-robin, least connections, consistent hashing.
- Caching: Store frequently accessed data in memory. Redis/Memcached. Cache-aside, write-through, write-behind patterns.
- CDN: Content Delivery Network. Serve static assets from edge locations close to users.
Database Concepts
- SQL vs. NoSQL: SQL for structured data and relationships (PostgreSQL, MySQL). NoSQL for flexible schemas and scale (MongoDB, Cassandra, DynamoDB).
- Sharding: Splitting data across multiple databases. Shard key selection is critical.
- Replication: Copying data to multiple servers. Primary-replica for read scaling. Multi-primary for write scaling (complex).
- Indexing: B-tree for range queries. Hash for exact lookups. Full-text for search.
- CAP Theorem: In a distributed system, you can only guarantee two of three: Consistency, Availability, Partition tolerance.
Communication Patterns
- REST: HTTP-based. Simple, stateless, widely understood. Good for CRUD operations.
- gRPC: Binary protocol (Protocol Buffers). Fast, typed, good for service-to-service communication.
- GraphQL: Client specifies exactly what data it needs. Good for complex, nested data.
- WebSockets: Persistent, bidirectional connection. Good for real-time features (chat, live updates).
- Message Queues: Asynchronous communication (Kafka, RabbitMQ, SQS). Decouples producers and consumers.
Level-Specific Expectations
Junior Engineers (0-2 years)
You probably will not get a full system design interview. But you might be asked to design a simple system (a to-do app, a blog platform) or discuss API design. Focus on:
- Clean API design (RESTful endpoints, proper HTTP methods)
- Basic database schema design (normalization, relationships)
- Understanding of client-server architecture
- Basic caching concepts
Mid-Level Engineers (2-5 years)
You will get system design questions, but expectations are moderate. You should be able to:
- Design a complete system with all major components
- Choose appropriate databases and justify your choice
- Discuss basic scaling strategies (read replicas, caching, CDN)
- Handle basic capacity estimation (back-of-envelope calculations)
Senior Engineers (5+ years)
System design is the most important part of your interview. You are expected to:
- Drive the conversation — the interviewer should not need to guide you
- Make and justify trade-offs (consistency vs. availability, cost vs. performance)
- Discuss failure modes and how the system recovers
- Consider operational aspects: monitoring, alerting, deployment, rollback
- Propose a phased approach: what to build first, what to add later
Back-of-Envelope Estimation
System design interviews often require quick capacity estimation. Here are the numbers you should have memorized:
| Metric | Value |
|---|---|
| Seconds in a day | ~86,400 (round to 100,000) |
| Seconds in a month | ~2.5 million |
| 1 million requests/day | ~12 requests/second |
| 1 billion requests/day | ~12,000 requests/second |
| 1 character | 1 byte (ASCII) or 2-4 bytes (UTF-8) |
| 1 KB | ~1,000 characters of text |
| 1 MB | ~1 high-res photo |
| 1 GB | ~1,000 high-res photos |
| 1 TB | ~1 million high-res photos |
| SSD random read | ~100 microseconds |
| Network round trip (same datacenter) | ~0.5 milliseconds |
| Network round trip (cross-continent) | ~150 milliseconds |
| Redis/Memcached read | ~0.1-1 millisecond |
| Database query (indexed) | ~1-10 milliseconds |
Study Plan: 8 Weeks to System Design Mastery
Week 1-2: Fundamentals
- Read "Designing Data-Intensive Applications" by Martin Kleppmann (Chapters 1-5)
- Watch MIT 6.824 Distributed Systems lectures (first 4)
- Practice: Design a URL shortener, design a paste bin
Week 3-4: Databases and Storage
- Study SQL vs. NoSQL trade-offs in depth
- Learn about sharding, replication, and consistency models
- Practice: Design a key-value store, design a search autocomplete
Week 5-6: Distributed Systems Patterns
- Study message queues, event-driven architecture, CQRS
- Learn about consensus algorithms (Raft, Paxos — conceptual level)
- Practice: Design a chat system, design a notification service
Week 7-8: Practice and Polish
- Do mock interviews (with friends, on Pramp, or Interviewing.io)
- Design 2-3 systems per week under time pressure (45 minutes each)
- Review your designs — identify weak areas and study those
For more interview preparation resources, check out our Technical Interview Guide for 2026.
What I Actually Think
System design interviews are the most useful interview format in software engineering — and also the most flawed. They are useful because the skills they test (breaking down problems, making trade-offs, communicating technical ideas) are the exact skills you need as a senior engineer. They are flawed because the "correct" answer depends heavily on the interviewer's background and preferences. Two equally qualified engineers can propose completely different architectures for the same problem, and both can be right.
My advice: do not try to memorize solutions. Instead, build a mental toolkit of patterns and components that you can assemble on the fly. If you understand why you would use Kafka (async processing, event sourcing, log-based communication), you can apply it to any problem that needs those properties — whether it is a chat system, an analytics pipeline, or an order processing system.
Also — and this is important — the best preparation is building real systems. Read about architecture all you want, but nothing teaches you about trade-offs like running a system in production and watching it break at 3 AM. If you do not have that experience yet, contribute to open-source projects, build side projects that serve real users, or work through hands-on labs on cloud platforms.
One last thought: system design interviews at FAANG companies are different from system design interviews at startups. FAANG interviewers expect breadth — they want to see that you can design systems at massive scale. Startup interviewers expect depth and pragmatism — they want to see that you can build something that works with limited resources. Know your audience.
Recommended Resources
| Resource | Type | Best For |
|---|---|---|
| "Designing Data-Intensive Applications" (Kleppmann) | Book | Deep understanding of distributed systems |
| "System Design Interview" (Alex Xu, Vol. 1 & 2) | Book | Interview-focused, structured approach |
| ByteByteGo (Alex Xu's newsletter) | Newsletter/YouTube | Visual explanations, weekly practice |
| MIT 6.824 Distributed Systems | Course | Academic foundation |
| Grokking the System Design Interview | Online course | Structured interview prep |
| High Scalability Blog | Blog | Real-world architecture case studies |
| Engineering blogs (Netflix, Uber, Airbnb) | Blogs | How real companies solve real problems |
Sources
- Kleppmann, M. — "Designing Data-Intensive Applications" (O'Reilly, 2017)
- Xu, A. — "System Design Interview" Vol. 1 & 2 (2020, 2022)
- Google SRE Book — sre.google/sre-book/
- AWS Architecture Center — aws.amazon.com/architecture
- BirJob technical interview data — birjob.com
I'm Ismat, and I build BirJob — Azerbaijan's job aggregator scraping 80+ sources daily.
