System Design, from first principles to real systems
40 lessons in three courses, from your first design to distributed-systems trade-offs and complete case studies. Plain-English explanations, diagrams, trade-off tables and practice exercises in every lesson.
Three courses, one path
Start at your level. Each course builds on the one before it.
System Design Foundations: From Zero to Your First Design
Start here if system design is new to you. Learn how to turn requirements into a design, estimate load, and use the basic building blocks (DNS, load balancers, caches, databases, CDNs) with plain-English explanations and diagrams.
- 1.System Design: The Big Picture
- 2.System Design: Requirements and Scope
- 3.System Design: Back-of-the-Envelope Estimation
- 4.System Design: The Request Lifecycle
- 5.System Design: API Design
- 6.System Design: Load Balancing
- 7.System Design: Scaling Basics
- 8.System Design: Caching Basics
- 9.System Design: Databases Basics
- 10.System Design: CDN and Object Storage
- 11.System Design: Reliability Basics
- 12.System Design: A Repeatable Approach
System Design Building Blocks: Data, Messaging and Scale
The intermediate course: replication, sharding, consistency, advanced caching, queues and streaming, API gateways, rate limiting, search, storage engines, observability and security, with the trade-offs behind each choice.
- 1.System Design Building Blocks: The Map
- 2.System Design: Replication
- 3.System Design: Sharding and Partitioning
- 4.System Design: CAP, PACELC and Consistency Models
- 5.System Design: Advanced Caching Strategies
- 6.System Design: Message Queues and Asynchronous Work
- 7.System Design: Event Streaming and Logs
- 8.System Design: Monolith, Modular Monolith and Microservices
- 9.System Design: API Gateway and Service Mesh
- 10.System Design: Rate Limiting
- 11.System Design: Search and Indexing
- 12.System Design: Storage Engines
- 13.System Design: Observability and SLOs
- 14.System Design: Security for Distributed Systems
Advanced System Design and Case Studies
The advanced course: distributed transactions, CQRS and event sourcing, consensus, clocks and ordering, resilience, multi-region design and capacity planning, then full case studies: URL shortener, photo sharing, news feed, chat, video streaming and ride sharing.
- 1.System Design Advanced: The Hard Problems Map
- 2.System Design: Distributed Transactions and Sagas
- 3.System Design: CQRS and Event Sourcing
- 4.System Design: Consensus and Leader Election
- 5.System Design: IDs, Clocks and Ordering
- 6.System Design: Resilience Patterns
- 7.System Design: Multi-Region and Disaster Recovery
- 8.System Design: Capacity Planning and Cost
- 9.System Design Case Study: URL Shortener
- 10.System Design Case Study: Photo Sharing App
- 11.System Design Case Study: News Feed
- 12.System Design Case Study: Chat System
- 13.System Design Case Study: Video Streaming
- 14.System Design Case Study: Ride Sharing
What you will be able to do
- Turn a vague idea into clear functional and non-functional requirements.
- Estimate traffic, storage and bandwidth before you draw a single box.
- Choose between caches, queues, databases and replication, and explain the trade-off.
- Design for failure: timeouts, retries, circuit breakers and graceful degradation.
- Reason about consistency, ordering and distributed transactions.
- Walk through complete designs: URL shortener, photo sharing, news feed, chat, video streaming and ride sharing.
Tools you will meet
The lessons teach the ideas first and use these widely used tools as examples. Naming a tool is not an endorsement, and every design in the course works with equivalents.
Data and caching
- PostgreSQLRelational database
- MySQLRelational database
- MongoDBDocument database
- Apache CassandraWide-column database
- DynamoDBManaged key-value database
- RedisIn-memory cache and data store
- MemcachedIn-memory cache
- OpenSearchSearch and analytics engine
- ElasticsearchSearch engine
- Amazon S3Object storage
Messaging and events
- Apache KafkaDistributed event log
- RabbitMQMessage broker
Traffic and platform
- NginxWeb server, reverse proxy, load balancer
- EnvoyProxy for gateways and service meshes
- KubernetesContainer orchestration
- etcdConsensus-backed key-value store
- TerraformInfrastructure as code
Observability
- PrometheusMetrics and alerting
- GrafanaDashboards
Names and logos are trademarks of their respective owners and are shown only to identify the tools.
The whole subject on one page
This cheat sheet maps the territory: requirements, the high-level architecture, the request lifecycle, scaling techniques, reliability, data trade-offs, security and the common myths. The first lesson explains every part of it in text.
Read System Design: The Big Picture
Open the full-size cheat sheetCase studies
Full designs worked end to end: requirements, estimation, API, data model, architecture, bottlenecks and trade-offs. For a longer worked example, read the notification service design.
Questions
- Who is this System Design course for?
- Anyone who builds or will build software: students, developers moving into backend or architecture work, and engineers preparing for system design interviews. The first course assumes no prior knowledge.
- Do I need to know a programming language?
- No. The lessons explain ideas with diagrams, tables and plain language. A few lessons include short code or configuration sketches, but you can follow them without writing code.
- Is it free?
- Yes. The first lesson of each course is open to everyone, and a free account unlocks the rest, tracks your progress and keeps your place.
- Where should I start?
- Start with System Design Foundations. If you already know the basics (load balancers, caches, databases), start with Building Blocks, and take the Advanced course and case studies when you are comfortable with replication, sharding and consistency.
- Will this get me through a system design interview?
- It teaches the concepts, the way to reason about trade-offs, and six worked case studies you can practise out loud. No course can promise an interview result, so practise the exercises and explain your designs to another person.