System design

Stage 1 of 7 · 10 lessons · ~7 weeks

Core concepts and building blocks

The vocabulary every design conversation uses and the components that sit in front of every system. Each concept here is a trade-off you will reach for in every later stage.

Start: Vertical vs horizontal scaling and stateless services

Lessons· one lesson for each topic, in this order

  1. 1Vertical vs horizontal scaling and stateless services
  2. 2Latency, throughput and percentiles
  3. 3Availability, redundancy and SLOs
  4. 4Back-of-the-envelope capacity estimates
  5. 5Load balancers and balancing algorithms
  6. 6Reverse proxies and API gateways
  7. 7CDNs and edge caching
  8. 8Caching patterns, eviction and invalidation
  9. 9CAP and PACELC
  10. 10Bloom filtersOptional

Start with· follow one of these

  • CoursePaid
    Grokking System Design Fundamentals

    Design Gurus · Beginner · Subscription

    Load balancing, API gateway, proxies, caching, CAP and Bloom filters: week 1 of the plan in order

  • GitHub repoFree
    The System Design Primer

    Donne Martin · Intermediate

    Free: its scalability, latency, availability, CDN, load balancer and cache sections

Keep handy

  • Free Design Gurus concept index for looking up a term in the middle of a lesson

Also worth your time

Before moving on: Estimate requests per second, storage and bandwidth for a photo-sharing app with 10 million daily users, then draw the request path through DNS, CDN, load balancer, cache and database and write what users see when each one fails.

Tauseef's advice
Learn each concept as a trade-off with a cost on both sides, because 'it depends' is only a good answer when you can say on what. Keep a one-page cheat sheet that maps problems to tools (read-heavy means cache, large files mean object storage, a single point of failure means redundancy) and add to it every week.

Mark this stage as not done?