SOFTWARE ENGINEERING
SWE System Design
Core distributed-systems ideas for software engineers
CURRICULUM
A visual course on the concepts behind reliable large-scale software systems: availability, consistency, partition tolerance, replication, sharding, caching, queues, consensus, failure modes, and the tradeoffs engineers must choose explicitly.
- 01A Method for Designing SystemsA repeatable way to approach any design problem, and how to sketch it clearly.14 sections
- 02Scalable System Design PatternsCore patterns for growing a system from one server to a distributed architecture.17 sections
- 03Different Types of Data StorageChoosing storage by access pattern, consistency, scale, and query shape.20 sections
- 04Caching, In DepthHow caches actually work: strategies, eviction, invalidation, and the failure modes.16 sections
- 05Queues and Messaging, In DepthDecoupling with queues and logs: delivery guarantees, ordering, and failure handling.14 sections
- 06Event-Driven ArchitectureReacting to events instead of calling services directly: notification, state transfer, and event sourcing.11 sections
- 07Kafka and Streaming PlatformsThe distributed commit log: topics, partitions, offsets, durability, and the Kafka-like ecosystem.15 sections
- 08Sharding and Partitioning, In DepthSplitting data across nodes: partition strategies, rebalancing, and the hard queries.16 sections
- 09Replication and Consensus, In DepthKeeping copies in sync: leader-follower, quorums, and how nodes agree.15 sections
- 10Managing Shared StateKeeping data correct when many servers, workers, and clients touch it at once.23 sections
- 11CAP TheoremWhen a distributed system is cut in half by a network partition, it must choose between answering and risking disagreement, or stopping until agreement is safe.12 sections