Start here
Learn the basic ideas of system design, with their good and bad sides.
Topics
Learn the basic ideas of system design, with their good and bad sides.
Pick what to study based on how much time you have before the interview.
Four steps to lead an open design interview, from needs to scaling.
Tell apart a system slow for one user from one slow under heavy use.
Balance the time one task takes against how many tasks finish over time.
When the network fails, choose between the latest data and always answering.
Choose how copies of the same data stay in step for readers.
Keep a service running when a server fails, using fail-over and copies.
Turn a domain name into the IP address of a server.
Serve files from servers close to the user.
Share incoming requests across many servers.
One public front door for your internal servers.
Run your app's logic on its own servers, apart from the web servers.
Where data is stored, and ways to make it handle more load.
Keep earlier results so repeat requests are fast and servers do less work.
Do slow work in the background, not while the user waits.
Ways that clients and servers send data to each other.
Basic steps to protect data and user input.
A table of powers of two and the sizes they give.
Typical times of common computer actions, for quick rough sums.
More design interview questions, each with links to help you solve it.
Articles on how real systems are built.
Links to how named companies built their systems.
Engineering blogs from many companies, for interview prep.
Solutions
Design a service that links bank accounts, reads transactions, and suggests a budget.
Design a site where users paste text and share it through a random link.
Design a cache that saves the results of the latest web server searches.
Design a feature that ranks the past week's best-selling products by category.
Design a service that grows from one user to millions of users on AWS.
Design the data for a social network that finds the shortest path between people.
Design a Twitter timeline and search: post tweets, view timelines, search keywords.
Design a crawler that visits web pages and lets users search what it found.
Design the code for a call center with operators, supervisors and directors.
Design the code for a 52-card deck, then extend it for blackjack.
Design a hash map, a key lookup table that handles clashing keys by chaining.
Design a cache for web query results that drops the least recently used items.
Design a text chat with users, friend lists, and group chats.
Design a multi-level parking lot for motorcycles, cars and buses.
Diagrams
Walk through the main parts of a web system.









The System Design Primer
Shown in: Design a system that scales to millions of users on AWS

Anki flashcards
Shown in: the original README

Coding Resource: Interactive Coding Challenges
Shown in: the original README

Index of system design topics
Shown in: Design the Twitter timeline and search





Imgur
Shown in: Design the data structures for a social network

Imgur
Shown in: Design a key-value cache to save the results of the most recent web server queries

Imgur
Shown in: Design Amazon's sales rank by category feature

CAP theorem
Shown in: Availability vs consistency › CAP theorem

Domain name system
Shown in: Domain name system › Domain name system

Content delivery network
Shown in: Content delivery network › Content delivery network

Load balancer
Shown in: Load balancer › Load balancer

Reverse proxy (web server)
Shown in: Reverse proxy › Reverse proxy (web server)

Application layer
Shown in: Application layer › Application layer

Database
Shown in: Database › Database

Master-slave replication
Shown in: Database › Master-slave replication

Master-master replication
Shown in: Database › Master-master replication

Federation
Shown in: Database › Federation

Sharding
Shown in: Database › Sharding

Wide column store
Shown in: Database › Wide column store

Graph database
Shown in: Database › Graph database

SQL or NoSQL
Shown in: Database › SQL or NoSQL


Cache-aside
Shown in: Cache › Cache-aside

Write-through
Shown in: Cache › Write-through

Write-behind (write-back)
Shown in: Cache › Write-behind (write-back)

Refresh-ahead
Shown in: Cache › Refresh-ahead

Asynchronism
Shown in: Asynchronism › Asynchronism

Communication
Shown in: Communication › Communication

Transmission control protocol (TCP)
Shown in: Communication › Transmission control protocol (TCP)

User datagram protocol (UDP)
Shown in: Communication › User datagram protocol (UDP)

Remote procedure call (RPC)
Shown in: Communication › Remote procedure call (RPC)

Real world architectures
Shown in: Real world architectures › Real world architectures