# How to Learn System Design

This is a complete guide to learn system design and prepare for system design interviews, structured for engineers at every level. Whether you're a junior engineer facing your first system design round or a staff candidate at a top-tier company, the path is the same: master the foundations, study how patterns compose, then practice. What changes by level is how deep you go.

## 00. Quick Orientation
Most "learn system design" guides target a single audience and miss everyone else. A junior engineer doesn't need to know how to design a globally distributed payment system. A staff candidate doesn't need to be told what a load balancer is. This guide acknowledges the difference: it walks through what's true at every level, then breaks out level-specific expectations so you can calibrate your prep.

### Key Points to Know Before You Commit:
- **Time investment scales with level.** Junior prep can be done in 4-6 weeks of focused study. Senior prep typically takes 12-16 weeks. Staff prep is closer to ongoing development of opinions over months.
- **The interview tests reasoning, not memorization.** Strong candidates at every level reason about tradeoffs given requirements. The single biggest mistake is trying to memorize "the right design for X".
- **Practice is what makes the knowledge stick.** Reading is necessary but not sufficient.

## 01. What System Design Interviews Actually Test
System design interviews are testing whether you can reason about trade-offs given the requirements. They are not testing whether you've memorized 10 architectures.

### What Interviewers Actually Score On:
- **Clarifying requirements.**
- **Decomposing at the right level of abstraction.**
- **Reasoning about trade-offs.**

## 02. What Each Level Expects
### Junior · L3 / IC1
*0-2 years experience · 4-6 weeks prep*
Typical questions include designing a URL shortener, a basic chat app, or similar systems. The goal is to confirm you've thought about how systems work beyond a single function.

### Mid-Level · L4 / IC2
*2-5 years experience · 8-12 weeks prep*
Typical questions expand to apps with thousands to millions of users. Candidates should know foundational primitives and can assemble them into a defensible design under interview pressure.

### Senior · L5 / IC3
*5-10 years experience · 12-16 weeks prep*
Interviews focus on systems serving millions of users, where candidates should be fluent across all canonical patterns.

### Staff · L6+ / IC4+
*10+ years experience · ongoing development*
Interviews test systems thinking and judgment, navigating ambiguity and setting technical direction.

## 03. Prerequisites
You need to be familiar with:
- Basic programming.
- HTTP basics.
- Databases at an API level.
- Intuition about latency vs throughput.
- Multi-server systems.

## 04. The Three-Phase Learning Path
### Phase 1: Build Foundations of Primitives
Master architectural primitives (weeks 2-6, 5-10 hours/week).

### Phase 2: Study How Primitives Compose into Patterns
Recognizing how primitives compose into recognizable patterns (weeks 2-6, 5-10 hours/week).

### Phase 3: Practice by Designing Real Systems
Mock interviews and timed drills (until interview-ready, 2-4 hours per design exercise).

## 05. How to Practice Effectively
### Active Recall vs Passive Rereading
Close the page and explain the concept in your own words.

### Time-box Your Practice
Set a timer for your designs.

### Defend Designs to Critical Readers
Find a study partner and exchange challenges.

## 06. Common Pitfalls
### Memorizing Instead of Understanding
Avoid trying to memorize a canned response; focus on understanding the reasoning behind methods used.

### Skipping the Requirements Clarification Step
Strong candidates take time to define the problem before jumping into architecture.

## 07. FAQ
- **I'm a junior engineer; do I really need to study system design?** If relevant for the interviews, yes.
- **What's the difference between senior and staff interviews?** Senior focuses on design experience, while staff emphasizes systems thinking and judgment.

## 08. Concrete Next Step
Start with the first chapter on Key Characteristics of Distributed Systems to learn foundational concepts.

## 09. What's Next
Learn about scalability and characteristics of distributed systems.
