Steps of system design
1. Understand the problem and establish design scope
- ask clarify questions
- functional/non-functional requirement
- QPS estumation
2. High-level design
- API
- Database
3. Low-level design (dive into each component)
4. Summary
- bottlenecks
- single point of failure
- replicas of the data if lost
- monitoring/alaert
- auto-fix/ticket