This project is about software system design problems and using interactive diagramming toolings to grow an intuition for the design decisions. Techniques such as Back-of-the-Envelope calculation for capacity estimation, and reasoning about a software system's design is a critical skill for effective technical leadership.
For each of the problem below, we will use the Google's NALSD format below to draw out the design:
1. Functional Requirements
2. Non-Functional Requirements
- Define assumption
- Define constraints
- Define SLO's
3. High Level Design
- Design APIs
- Prefer simple, stateless services where possible
- Follow the data
- Data consistency - critical data
- Data consistency - less critical data
- Data storage considerations
- Sharding data
4. Scaling the design
- Scaling and Performance
5. Monitoring
6. What could go wrong?
List of Software System to Design
- Web Crawler
- News Feed
- Uber
- Top-K YouTube Videos
- URL Shortener
- Video platform like YouTube
List of Machine Learning Software System to Design
- News Feed