System Design Interview Prep: From Requirements to Distributed Systems
A short-lecture course on the ideas that every system design interview is built on. Each lecture is a video of a few minutes on the YouTube channel and a written lecture here: the example in code, a diagram, exercises with answers, and the interview questions with what a strong answer covers. Watch first and read to keep it, or read first and watch to check yourself. On the site, the lecture's page plays the video at the top.
This is a large course, being built out one lecture at a time. A lecture whose text is still to come keeps its video: it is marked Soon in the sidebar and plays the video until the text arrives.
How this course fits with the rest of the site
backend/is where the depth is. Every idea here is a short version of something taught properly there, and its last track, System Design Interview Practice, is the whiteboard practice this course leads to.lld/is the other half of the interview. System design in the sense of this course is high-level design (services, storage, data flow); low-level design is how the classes inside one service are shaped, and has its own course.- The second playlist on the channel, Phase 2: Networking, APIs & Databases, is not repeated here. Each of its videos plays at the top of the
backend/orlearn/module that covers the same ground, so the text and the video are in one place. Open the Videos page of the site for the whole list.
Naming convention
Same convention as backend/:
- Tracks are top-level folders under
system-design/, namedNN-track-name, in the order you do them in. - Lectures are subfolders of a track, named
NN-lecture-name. HereNNis the lesson's number on the channel, so "Lesson 12" in the video is12-…on the site. - Every lecture folder contains exactly one
README.md, and a lecture's video is attached to it incontent/videos.json(docs/VIDEOS.mdexplains how), not written into the file. - This file is the index of the course.
Tracks
| # | Track | What you'll be able to do after | Depends on |
|---|---|---|---|
| 1 | 01-core-fundamentals | Start a design by clarifying requirements, describe a system's layers, scale it out, reason about latency, throughput, availability, CAP and consistency, and design for failure | nothing |
| 2 | 02-networking-from-zero | Explain, from nothing, how data crosses the internet: packets, addresses, TCP, DNS, HTTP, TLS and the infrastructure in between, with the interview answer for each (being published one lesson at a time) | nothing |
Start here → 01-core-fundamentals/01-what-is-system-design/README.md