System Design Fundamentals
Learn how to design scalable, reliable, and maintainable systems — from single servers to distributed architectures used by millions of users.
This free, self-paced course is designed for intermediate learners in architecture. Work through the lessons in order, use the objectives below as a checklist, and practice against real systems rather than memorizing slide labels. Estimated time: ~5 hours across 12 lessons.
Prerequisites
- Comfortable with HTTP APIs and at least one backend datastore
- Familiarity with basic concurrency and failure modes (timeouts, retries)
Course Curriculum
Each lesson is a focused read. Open one, complete any self-checks or exercises, then mark progress in this browser before moving on.
How to Approach System Design
18 min
Scalability: Vertical vs Horizontal
20 min
Load Balancing
18 min
Caching at Every Layer
22 min
Database Scaling
24 min
Message Queues & Async Communication
20 min
API Design Patterns
22 min
Content Delivery Networks
16 min
CAP Theorem & Consistency Models
20 min
High Availability & Fault Tolerance
22 min
Observability: Logs, Metrics & Traces
18 min
Case Study: Design a URL Shortener
24 min
Related articles
Pair this course with deeper guides on the same topic. Articles include diagrams, failure modes, and decision rules.
- Event Sourcing & CQRS in Go
- Reactive Microservices: Akka Actor Model
- Event-Driven Systems: Apache Pulsar
- Distributed Consensus with HashiCorp Raft in Go
See the full Microservices & Distributed Systems topic hub.