## 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