Skip to main content

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

  1. Web Crawler
  2. News Feed
  3. Uber
  4. Top-K YouTube Videos
  5. URL Shortener
  6. Video platform like YouTube
  7. WhatsApp

List of Machine Learning Software System to Design

  1. News Feed

Resources

  1. Google NALSD Workbook