Step by Step Guide for System Design
Step 1 - Understand the problem and establish design scope (5 mins)
- Ask as many questions as possible to understand the problem
- Clarify the requirements
- Note down the assumptions
- Prority of the features to build
- Focus on non-fuctional requirements like scale and performance
- Do rough back of the envelope calculations
- By the end of this step we should have a clear understanding of the requirements and non fuctional features
Sample questions: * What specific features are we building? * How many users do we have? * How fast the company wants to scale up? * what is the company’s technology stack?
Step 2 - Propose high level design and get buy-in (20 mins)
- Use Top-down approach
- start with API Design and see if the APIs are satisfying the functional requirements. Do not consider APIs which are not aligned to the requirements.
- Input parameters
- Output responses
- Start high-level design once the APIs are finalized.
- Review if all the features are covered in the high-level design
Step 3 - Design Deep dive (15 mins)
- Identify areas with challenges and discuss at least two options with their tradeoffs
- Pick a solution and discuss
Step 4 - Wrap up (5 mins)
- Summarize the design
- Focus on the parts which are unique to the situation
- Discuss how you can make improvements to this design to handle monitoring, tracking metrics or scaling the system etc.
- Other refinements you need if you had more time
Reference
- ByteByteGo youtube channel
- System Design Book