## Notes
From [How to Crack Any System Design Interview - YouTube](https://www.youtube.com/watch?v=o-k7h2G3Gco) and [[System Design Interview - An Insider's Guide]]
1. [[#Understand Problem and Establish Scope]]
2. [[#Propose High-level Design and get Buy-In]]
3. [[#Design Deep Dive]]
4. [[#Wrap Up]]
## Understand Problem and Establish Scope
Think deeply about the problem and ask clarifying questions.
- What features are we going to build?
- How many users does the product have?
- What existing services to leverage?
- What additional data types to explore?
- How will clients access features?
- Scalability requirements?
## Propose High-level Design and Get Buy-In
- Come up with initial blueprint and ask for feedback
- Breakdown features into steps
- Draw diagrams with boxes, arrows, etc
- Clients (mobile/web)
- APIs
- Web servers
- Data stores
- Caches
- CDNs
- Message queues
- Do back-of-envelope calculations
## Design Deep Dive
Before this point:
- Agreed on overall goals and scope
- Sketched out high-level blueprint for overall design
- Obtained feedback about design
- Have some initial ideas about areas to focus
Work with interviewer to identified and prioritize components
## Wrap Up
Interviewer may ask follow-up questions, such as
- Identify system bottlenecks and suggest improvements
- Recap
- Error cases (server failure, network loss)
- Monitoring, logging
- How to handle the next scale curve? (1 million -> 10 million)
## Time Allocation
- [[#Understand Problem and Establish Scope]], 3 - 10 minutes
- [[#Propose High-level Design and get Buy-In]], 10 - 15 minutes
- [[#Design Deep Dive]], 10 - 25 minutes
- [[#Wrap Up]], 3 -5 minutes