> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/donnemartin/system-design-primer/llms.txt
> Use this file to discover all available pages before exploring further.

# Study guide

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

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

## Do I need to know everything here?

<Accordion title="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:

  * How much experience you have
  * What your technical background is
  * What positions you are interviewing for
  * Which companies you are interviewing with
  * Luck
</Accordion>

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.

<Tip>
  Start broad and go deeper in a few areas. It helps to know a little about various key system design topics.
</Tip>

Adjust the following guide based on your timeline, experience, what positions you are interviewing for, and which companies you are interviewing with.

## Timeline-based approach

### Short timeline

Aim for **breadth** with system design topics. Practice by solving **some** interview questions.

### Medium timeline

Aim for **breadth** and **some depth** with system design topics. Practice by solving **many** interview questions.

### Long timeline

Aim for **breadth** and **more depth** with system design topics. Practice by solving **most** interview questions.

## Study plan by timeline

| Topic                                                                                                    | Short | Medium | Long |
| -------------------------------------------------------------------------------------------------------- | ----- | ------ | ---- |
| Read through the System design topics to get a broad understanding of how systems work                   | ✅     | ✅      | ✅    |
| Read through a few articles in the Company engineering blogs for the companies you are interviewing with | ✅     | ✅      | ✅    |
| Read through a few Real world architectures                                                              | ✅     | ✅      | ✅    |
| Review How to approach a system design interview question                                                | ✅     | ✅      | ✅    |
| 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 |

## Key topics to cover

<CardGroup cols={2}>
  <Card title="System design topics" icon="diagram-project">
    Start with fundamentals: scalability, performance, latency, throughput, availability, and consistency
  </Card>

  <Card title="Real world architectures" icon="building">
    Study how major companies architect their systems at scale
  </Card>

  <Card title="Interview questions" icon="comments">
    Practice with real system design interview questions and solutions
  </Card>

  <Card title="Company blogs" icon="blog">
    Read engineering blogs from companies you're interviewing with
  </Card>
</CardGroup>

## System design topics: start here

<Note>
  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.
</Note>

### Step 1: Review the scalability video lecture

[Scalability Lecture at Harvard](https://www.youtube.com/watch?v=-W9F__D3oY4)

Topics covered:

* Vertical scaling
* Horizontal scaling
* Caching
* Load balancing
* Database replication
* Database partitioning

### Step 2: Review the scalability article

[Scalability](https://web.archive.org/web/20221030091841/http://www.lecloud.net/tagged/scalability/chrono)

Topics covered:

* [Clones](https://web.archive.org/web/20220530193911/https://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
* [Databases](https://web.archive.org/web/20220602114024/https://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
* [Caches](https://web.archive.org/web/20230126233752/https://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
* [Asynchronism](https://web.archive.org/web/20220926171507/https://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)

### Next steps

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

* **Performance** vs **scalability**
* **Latency** vs **throughput**
* **Availability** vs **consistency**

<Warning>
  Keep in mind that **everything is a trade-off**.
</Warning>

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