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.

  1. 01A Method for Designing SystemsA repeatable way to approach any design problem, and how to sketch it clearly.14 sections
  2. 02Scalable System Design PatternsCore patterns for growing a system from one server to a distributed architecture.17 sections
  3. 03Different Types of Data StorageChoosing storage by access pattern, consistency, scale, and query shape.20 sections
  4. 04Caching, In DepthHow caches actually work: strategies, eviction, invalidation, and the failure modes.16 sections
  5. 05Queues and Messaging, In DepthDecoupling with queues and logs: delivery guarantees, ordering, and failure handling.14 sections
  6. 06Event-Driven ArchitectureReacting to events instead of calling services directly: notification, state transfer, and event sourcing.11 sections
  7. 07Kafka and Streaming PlatformsThe distributed commit log: topics, partitions, offsets, durability, and the Kafka-like ecosystem.15 sections
  8. 08Sharding and Partitioning, In DepthSplitting data across nodes: partition strategies, rebalancing, and the hard queries.16 sections
  9. 09Replication and Consensus, In DepthKeeping copies in sync: leader-follower, quorums, and how nodes agree.15 sections
  10. 10Managing Shared StateKeeping data correct when many servers, workers, and clients touch it at once.23 sections
  11. 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