system-design-primer README

The project's README from github.com/donnemartin/system-design-primer. As one markdown file: README.md.

English ∙ 日本語 ∙ 简体中文 ∙ 繁體中文 | العَرَبِيَّة‎ ∙ বাংলা ∙ Português do Brasil ∙ Deutsch ∙ ελληνικά ∙ עברית ∙ Italiano ∙ 한국어 ∙ فارسی ∙ Polski ∙ русский язык ∙ Español ∙ ภาษาไทย ∙ Türkçe ∙ tiếng Việt ∙ Français | Add Translation

Help translate this guide!

The System Design Primer


Motivation

Learn how to design large-scale systems.

Prep for the system design interview.

Learn how to design large-scale systems

Learning how to design scalable systems will help you become a better engineer.

System design is a broad topic. There are a vast number of resources scattered throughout the web on system design principles.

This repo is an organized collection of resources to help you learn how to build systems at scale.

Learn from the open source community

This is a continually updated, open source project.

Contributions are welcome!

Prep for the system design interview

In addition to coding interviews, system design is a required component of the technical interview process at many tech companies.

Practice common system design interview questions and compare your results with sample solutions: discussions, code, and diagrams.

Additional topics for interview prep:

Anki flashcards


The provided Anki flashcard decks use spaced repetition to help you retain key system design concepts.

Great for use while on-the-go.

Coding Resource: Interactive Coding Challenges

Looking for resources to help you prep for the Coding Interview?


Check out the sister repo Interactive Coding Challenges, which contains an additional Anki deck:

Contributing

Learn from the community.

Feel free to submit pull requests to help:

Content that needs some polishing is placed under development.

Review the Contributing Guidelines.

Index of system design topics

Summaries of various system design topics, including pros and cons. Everything is a trade-off.

Each section contains links to more in-depth resources.


Study guide

Suggested topics to review based on your interview timeline (short, medium, long).

Imgur

Q: For interviews, do I need to know everything here?

A: No, you don't need to know everything here to prepare for the interview.

What you are asked in an interview depends on variables such as:

More experienced candidates are generally expected to know more about system design. Architects or team leads might be expected to know more than individual contributors. Top tech companies are likely to have one or more design interview rounds.

Start broad and go deeper in a few areas. It helps to know a little about various key system design topics. Adjust the following guide based on your timeline, experience, what positions you are interviewing for, and which companies you are interviewing with.

Short Medium Long
Read through the System design topics to get a broad understanding of how systems work :+1: :+1: :+1:
Read through a few articles in the Company engineering blogs for the companies you are interviewing with :+1: :+1: :+1:
Read through a few Real world architectures :+1: :+1: :+1:
Review How to approach a system design interview question :+1: :+1: :+1:
Work through System design interview questions with solutions Some Many Most
Work through Object-oriented design interview questions with solutions Some Many Most
Review Additional system design interview questions Some Many Most

How to approach a system design interview question

How to tackle a system design interview question.

The system design interview is an open-ended conversation. You are expected to lead it.

You can use the following steps to guide the discussion. To help solidify this process, work through the System design interview questions with solutions section using the following steps.

Step 1: Outline use cases, constraints, and assumptions

Gather requirements and scope the problem. Ask questions to clarify use cases and constraints. Discuss assumptions.

Step 2: Create a high level design

Outline a high level design with all important components.

Step 3: Design core components

Dive into details for each core component. For example, if you were asked to design a url shortening service, discuss:

Step 4: Scale the design

Identify and address bottlenecks, given the constraints. For example, do you need the following to address scalability issues?

Discuss potential solutions and trade-offs. Everything is a trade-off. Address bottlenecks using principles of scalable system design.

Back-of-the-envelope calculations

You might be asked to do some estimates by hand. Refer to the Appendix for the following resources:

Source(s) and further reading

Check out the following links to get a better idea of what to expect:

System design interview questions with solutions

Common system design interview questions with sample discussions, code, and diagrams.

Solutions linked to content in the solutions/ folder.

Question
Design Pastebin.com (or Bit.ly) Solution
Design the Twitter timeline and search (or Facebook feed and search) Solution
Design a web crawler Solution
Design Mint.com Solution
Design the data structures for a social network Solution
Design a key-value store for a search engine Solution
Design Amazon's sales ranking by category feature Solution
Design a system that scales to millions of users on AWS Solution
Add a system design question Contribute

Design Pastebin.com (or Bit.ly)

View exercise and solution

Imgur

View exercise and solution

Imgur

Design a web crawler

View exercise and solution

Imgur

Design Mint.com

View exercise and solution

Imgur

Design the data structures for a social network

View exercise and solution

Imgur

Design a key-value store for a search engine

View exercise and solution

Imgur

Design Amazon's sales ranking by category feature

View exercise and solution

Imgur

Design a system that scales to millions of users on AWS

View exercise and solution

Imgur

Object-oriented design interview questions with solutions

Common object-oriented design interview questions with sample discussions, code, and diagrams.

Solutions linked to content in the solutions/ folder.

Note: This section is under development

Question
Design a hash map Solution
Design a least recently used cache Solution
Design a call center Solution
Design a deck of cards Solution
Design a parking lot Solution
Design a chat server Solution
Design a circular array Contribute
Add an object-oriented design question Contribute

System design topics: start here

New to system design?

First, you'll need a basic understanding of common principles, learning about what they are, how they are used, and their pros and cons.

Step 1: Review the scalability video lecture

Scalability Lecture at Harvard

Step 2: Review the scalability article

Scalability

Next steps

Next, we'll look at high-level trade-offs:

Keep in mind that everything is a trade-off.

Then we'll dive into more specific topics such as DNS, CDNs, and load balancers.

Performance vs scalability

A service is scalable if it results in increased performance in a manner proportional to resources added. Generally, increasing performance means serving more units of work, but it can also be to handle larger units of work, such as when datasets grow.1

Another way to look at performance vs scalability:

system-design-primer (donnemartin/system-design-primer)

design-patterns
Searching Database…

What is this?A curated, organized collection of resources for learning how to design large-scale systems, built specifically to help engineers prepare for system design interviews.
Is this a tutorial, a reference list, or something to run?It is a reading and study guide: an index of system design topics, interview questions with sample solutions, and Anki flashcard decks. There is no software to install or run.
How is the content organized and where should I start?It starts with an index of system design topics (scalability, databases, caching, load balancing, etc.), then moves to system design interview questions with solutions and object-oriented design questions with solutions. New readers should begin with the scalability lecture and article under 'System design topics: start here'.
Do I need any tools to use this?No special tools are required to read the guide; the only optional extra is the Anki app if you want to use the provided flashcard decks for spaced repetition.
Do I need to study everything here before an interview?No — the README explicitly says you don't need to know everything; the study guide suggests different depth levels (short/medium/long timeline) depending on your experience and target companies.
Who is this guide meant for?Engineers prepping for system design interviews at tech companies, ranging from individual contributors to architects and team leads, as well as anyone wanting to learn how to build scalable systems.
What topics does the system design index cover?It covers DNS, CDNs, load balancers, microservices, databases (SQL/NoSQL, replication, sharding), caching strategies, asynchronism with message/task queues, and communication protocols like TCP, UDP, RPC, and REST.
What kind of interview questions does it include?It includes worked system design questions like designing Pastebin, a Twitter timeline, a web crawler, and Mint.com, plus object-oriented design questions such as designing a parking lot or an LRU cache, each with discussions, code, and diagrams.
Is there a related resource for coding interview prep?Yes, the author maintains a sister repo called 'Interactive Coding Challenges' with its own Anki deck focused on coding interview practice.
Size
11 MB
Stars
374.6K
Updated
CommitMar 20
Age
9y
Commits · 90 Days