- Scope the problem
- Don’t make assumptions.
- Ask clarifying questions to understand the constraints and use cases.
- Steps
- Requirements clarifications
- System interface definition
- Sketch up an abstract design
- Building blocks of the system
- Relationships between them
- Steps
- Back-of-the-envelope estimation
- Defining data model
- High-level design
- Identify and address the bottlenecks
- Use the fundamental principles of scalable system design
- Steps
- Detailed design
- Identifying and resolving bottlenecks