System Design#

Learn how to design scalable, reliable, and maintainable software systems. This path covers the building blocks of distributed systems and the patterns used to combine them.

Sections#

  1. Fundamentals — client-server, latency, throughput, availability, SLAs, back-of-the-envelope math
  2. Networking and Protocols — DNS, HTTP, TCP/UDP, WebSockets, REST vs gRPC
  3. Load Balancing — algorithms, L4 vs L7, health checks, DNS-based, sticky sessions
  4. Caching — strategies, invalidation, CDNs, Redis patterns, cache stampede
  5. Databases at Scale — replication, sharding, partitioning, read replicas, connection pooling
  6. Message Queues and Async — pub/sub, event-driven architecture, Kafka, SQS, backpressure
  7. Microservices — service boundaries, communication, data ownership, saga pattern, service mesh
  8. Storage and CDNs — object storage, block storage, file systems, CDN edge caching
  9. Reliability and Resilience — fault tolerance, circuit breakers, retries, bulkheads, chaos engineering
  10. Observability — metrics, logs, traces, alerting, SLOs/SLIs, dashboards

Prerequisites#

  • Basic programming in any language
  • Understanding of databases (SQL and NoSQL concepts)
  • Familiarity with networking basics (HTTP, DNS, TCP)

What You’ll Be Able To Do#

  • Design systems that handle millions of users
  • Make informed tradeoffs between consistency, availability, and partition tolerance
  • Choose appropriate technologies for specific requirements
  • Communicate architecture decisions clearly in design documents and interviews