- System Design
- /
- Introduction
- /
- What is a System Design Interview?
What is a System Design Interview?
You walk into a room, the interviewer says "Design Twitter," and you have 45 to 60 minutes to architect a solution. That's it. No starter code, no predefined schema, no hints about what the "right" answer is. The prompt is deliberately vague because the interview is testing how you handle ambiguity, not whether you've memorized a reference architecture.
There is no single correct answer. Two candidates can propose fundamentally different designs and both get strong-hire signals, as long as each one demonstrates clear thinking, awareness of trade-offs, and the ability to reason about what happens when things go wrong or traffic spikes by 10x.
What Interviewers Are Actually Evaluating
Having been on both sides of hundreds of these interviews, I can tell you that most interviewers are scoring across five dimensions. The weight shifts depending on seniority, but all five matter:
- Requirements Gathering. Did you ask clarifying questions before designing anything? Did you separate what the system must do (functional) from how well it must do it (non-functional)? Candidates who skip this step almost always end up redesigning halfway through.
- High-Level Architecture. Can you identify the core components, explain their responsibilities, and describe how data flows between them? This is about breadth: showing you understand the full picture before zooming in.
- Technical Depth. When the interviewer probes a specific component, do you have genuine understanding or just buzzword familiarity? Saying "we should shard the database" is surface level. Explaining your sharding key, how you handle cross-shard queries, and what happens during a resharding event shows depth.
- Trade-off Awareness. Every design choice has a cost. Interviewers want to hear you articulate what you gain and what you give up. "I chose Cassandra because it handles our write-heavy workload, but we lose the ability to do ad-hoc joins, so the analytics pipeline reads from a separate store."
- Communication. Are you driving the conversation or waiting to be led? Can you explain a complex caching strategy in two sentences? Senior and staff candidates are expected to lead the discussion the way they'd lead an architecture review with their team.
Why Companies Run These Interviews
Coding interviews test whether you can implement algorithms. System design interviews test whether you can build software that actually works in production. They exist because:
- Scale changes everything. A database schema that works beautifully for 1,000 users will fall over at 10 million. Companies need engineers who instinctively ask "what happens at 10x and 100x?" and know how to answer that question with horizontal scaling, sharding, caching, and async processing.
- Trade-off reasoning can't be faked. Should you use Cassandra or PostgreSQL? Eventual consistency or strong consistency? Push-based fan-out or pull-based aggregation? There's no universally correct answer. The interview reveals whether you understand when and why to pick one over the other.
- It's a proxy for seniority. You can't cram system design the way you can cram sorting algorithms. It requires having built, operated, or at least deeply studied real distributed systems. This is why system design carries more weight at senior, staff, and principal levels.
- It mirrors real work. The prompt is vague on purpose. In practice, product requirements are never perfectly specified. Engineers need to ask the right questions, make assumptions explicit, and propose architectures in the face of incomplete information. The interview tests exactly this.
Typical Format: 45 to 60 Minutes
The structure varies slightly across companies, but the arc is consistent:
| Time | Phase | What's happening |
|---|---|---|
| 0 to 5 min | Problem Statement | Interviewer gives a vague prompt. "Design Instagram." The ambiguity is intentional. |
| 5 to 15 min | Requirements & Estimation | You ask clarifying questions, pin down functional and non-functional requirements, and run quick capacity math. |
| 15 to 35 min | High-Level Design | Draw the architecture. Identify services, databases, caches, queues, and how data flows. This is where you show breadth. |
| 35 to 50 min | Deep Dives | Interviewer picks 2 to 3 areas to probe: sharding strategy, cache invalidation, failure handling. This is where you show depth. |
| 50 to 60 min | Wrap Up | Summarize trade-offs, mention what you'd improve given more time, and ask questions. |
What Separates Strong Candidates from Weak Ones
After conducting and debriefing hundreds of these interviews, patterns emerge quickly. Here's what the gap actually looks like:
| Dimension | Strong Candidate | Weak Candidate |
|---|---|---|
| Opening | Asks 5 to 6 clarifying questions before drawing anything | Jumps straight to drawing boxes |
| Technology choices | "I'd use Cassandra here because writes are 10x reads and we need horizontal scaling" | "I'd use Cassandra because it's NoSQL" |
| Trade-offs | "We gain read speed with this cache but risk serving stale data for up to 30 seconds" | "Let's add a cache to make it faster" |
| Scale | Quantifies: "At ~5000 writes/sec, a single DB won't work. We need to shard." | "We should shard the database" (no numbers) |
| Failures | "If Redis goes down, we fall back to the database. Slower, but the system stays up." | Doesn't consider what happens when components fail |
| Communication | Drives the conversation, states assumptions, checks in with interviewer | Waits for the interviewer to ask each question |
The Practice section of this course mirrors the real interview structure. Each problem walks through the same flow: requirements, estimation, API design, and then component-specific deep dives. The goal is to make this structure second nature before you're in the room.