System Design and Distributed Systems Tutorial
Design scalable, reliable, secure distributed systems through quantitative requirements, data architecture, messaging, resilience, operations, case studies, and a production capstone.
- Level: Beginner to advanced
- Format: 36 free, self-paced lessons
- Best for: Students, career changers and developers refreshing their skills
Start learning System Design and Distributed Systems →
What You Will Learn
This learning path covers the following areas in curriculum order:
- System Design Foundations
- Networking and API Architecture
- Data Storage and Consistency
- Caching Messaging and Streams
- Distributed Coordination and Scale
- Reliability and Resilience
- Security and Isolation
- Observability Delivery and Operations
- Architecture Case Studies and Capstone
Who This Course Is For
This tutorial is suitable for complete beginners as well as learners who already know some programming and want a structured reference. Start from the first lesson if the subject is new to you. Experienced learners can use the curriculum below to jump directly to a specific concept.
How to Use This Tutorial
- Read each lesson in curriculum order and run every example yourself.
- Change the examples to test your understanding instead of only copying them.
- Complete the exercises and review the common-mistake sections before moving on.
- Bookmark this course page so you can return to the complete lesson index.
Course Contents
System Design Foundations
- System Design Method and Requirement Discovery
- Capacity Estimation and Back-of-the-Envelope Analysis
- Latency Throughput Concurrency and Resource Limits
- Availability Reliability Durability and Trade-Offs
Networking and API Architecture
- DNS CDNs Load Balancers and Reverse Proxies
- HTTP RPC WebSockets and API Contract Design
- Timeouts Retries Idempotency and Request Deduplication
- Rate Limiting Backpressure and Load Shedding
Data Storage and Consistency
- Choose Relational Document Key-Value and Wide-Column Stores
- Schema Design Indexes and Query Access Patterns
- Replication Quorums and Consistency Models
- Partitioning Sharding Rebalancing and Hot Keys
Caching Messaging and Streams
- Caching Strategies Invalidation and Stampede Control
- Message Queues Delivery Semantics and Dead-Letter Handling
- Publish-Subscribe Event-Driven Architecture and Event Sourcing
- Stream Processing Windows Ordering and Watermarks
Distributed Coordination and Scale
- Stateless Services Sessions and Horizontal Scaling
- Leader Election Distributed Locks and Leases
- Consensus Membership and Split-Brain Prevention
- Object Storage File Delivery and Large-Data Workflows
Reliability and Resilience
- Failure Modes Fault Domains and Dependency Mapping
- SLOs Error Budgets and Service-Level Indicators
- Circuit Breakers Bulkheads Graceful Degradation and Recovery
- Backup Restore Disaster Recovery and Multi-Region Design
Security and Isolation
- Authentication Authorization Sessions and Token Boundaries
- Multi-Tenant Isolation and Data Access Control
- Encryption Secrets Key Management and Audit Trails
- Threat Modeling Abuse Prevention and Secure Architecture Review
Observability Delivery and Operations
- Logs Metrics Traces Correlation and Production Debugging
- Capacity Planning Performance Testing and Cost Engineering
- Safe Deployments Feature Flags Configuration and Rollback
- Incident Response Runbooks Postmortems and Operational Readiness
Architecture Case Studies and Capstone
- Design a URL Shortener and Redirect Platform
- Design a Social Feed Search and Recommendation Platform
- Design Real-Time Chat Notifications and Presence
- Capstone: Design a Global Multi-Tenant Learning Platform
Frequently Asked Questions
Is this System Design and Distributed Systems tutorial free?
Yes. The lessons listed on this page are free to read and can be completed at your own pace.
Do I need previous experience?
No previous experience is required for the introductory lessons. Some advanced modules are easier if you first complete the fundamentals in this course.
How should I practise?
Type and run the examples, deliberately change their inputs, predict the result before execution and build a small project after completing each major section.
