System Design roadmap: a free part-by-part series for developers

A free series that builds system design from the ground up. Start with the basics here, then follow the parts in order. New parts are added every week.

A roadmap with connected stops

System design is the skill of planning how a software system is built so that it stays fast, reliable and affordable as more people use it. It is asked about in interviews, but it also decides whether a real product survives its first big day.

This series teaches it part by part, in plain language, with examples you can reuse. Each part is short and focused. Read them in order if you are new, or jump to the one you need.

Part 1: the basics

  1. Scalability explained: vertical vs horizontal scaling
  2. Latency vs throughput: the two numbers every system design starts with
  3. CAP theorem in plain words, with examples
  4. Load balancer: what it does and how to choose an algorithm
  5. Caching strategies: cache-aside, write-through and write-back
  6. What is a CDN and how does it make sites faster?
  7. SQL vs NoSQL: how to choose a database
  8. Database sharding: splitting data across servers
  9. Database replication: leader-follower, lag and failover
  10. Consistent hashing: how to add servers without moving everything
  11. Rate limiting: token bucket, sliding window and how to build it
  12. Message queues: why systems use them and how they fail
  13. API gateway: the front door of a microservice system
  14. Idempotency: making retries safe
  15. Back-of-the-envelope estimation for system design

Part 2: building blocks

  1. Redis internals: why it is fast and how to use it safely
  2. Apache Kafka explained: topics, partitions and consumer groups
  3. RabbitMQ explained: exchanges, queues and routing
  4. Elasticsearch and full-text search: how the inverted index works
  5. Object storage (S3-style): how to store files at scale
  6. WebSocket vs Server-Sent Events vs long polling
  7. gRPC vs REST: which API style to choose
  8. Bloom filter: checking membership with tiny memory
  9. Leader election: how distributed systems pick one boss
  10. Distributed locks: how to build one and why it is hard
  11. Service discovery: how services find each other
  12. CQRS: separating reads from writes
  13. Event sourcing: store events, not just the current state
  14. Saga pattern: transactions across microservices

Part 3: case studies

  1. Design a URL shortener: from requirements to scale
  2. Design Pastebin: storing and sharing text snippets
  3. Design a chat app like WhatsApp
  4. Design a news feed like Instagram or Facebook
  5. Design a video streaming service like YouTube
  6. Design a ride-sharing service like Uber
  7. Design a payment system for a mobile wallet
  8. Design a notification system: push, SMS and email
  9. Design search autocomplete (typeahead)
  10. Design file storage and sync like Google Drive
  11. Design a ticket booking system without double booking
  12. Design a web crawler
  13. Design an e-commerce checkout system
  14. Design a flash sale system that survives the rush
  15. Design an online judge for coding contests
  16. Design an ad click aggregation system

Part 4: designing the infrastructure

  1. Design a distributed unique ID generator (Snowflake)
  2. Design a distributed cache
  3. Design a distributed key-value store (Dynamo-style)
  4. Design a metrics monitoring and alerting system

How to use this series

  • If you are new: read parts 1 to 4 first, then the rest in order.
  • If you are preparing for interviews: finish the estimation part, then practise by sketching a system on paper using these building blocks.
  • If you build products: keep the caching, replication and rate limiting parts open when you design your next feature.

What comes next

More parts are planned: more case studies, how well-known systems evolved, and failure, security and operations (postmortems, zero trust, DDoS defence). The series grows every week.

Have a topic you want covered? Tell us on the contact page.

Keep reading