System Design Intermediate
Build on the foundations — load balancing, databases, replication, queues, and rate limiting — with execution traces that show where the work actually happens.
Curriculum (10 steps)
What Is a Software System?
articlesA system is not a single program — it is components with boundaries, responsibilities, and failure modes. Learn how to see the box before you design inside it.
Every system design trade-off is ultimately a balance between doing work fast, doing work often, and paying the cost of making multiple components agree.
Round-robin, least connections, IP hash, consistent hashing, and health checks — the mechanics behind every routing decision.
Follow a request from DNS through the load balancer, health-checked backend selection, cache lookup, and database miss or hit.
From write-ahead logs to B-trees, from leader-follower to read replicas — how databases persist, index, and copy your data.
Follow a write from the application through the WAL, leader commit, follower replication, and client acknowledgment.
At-most-once, at-least-once, and exactly-once delivery semantics, dead-letter queues, and the cost of ordering in a queue.
Visualize how a token bucket limits request rate, handles bursts, and enforces a steady throughput ceiling.
Design a Rate Limiter
practiceImplement a token bucket or fixed-window counter that allows bursts but enforces a steady request rate across many service instances.
Active health checks, passive checks, flapping detection, and why checking TCP open is not enough.