Skip to content

System Design

Scalability, load balancing, CAP theorem, observability, and classic design problems explained step by step.

Courses

Intermediate~5 hours

Learn how to design scalable, reliable, and maintainable systems — from single servers to distributed architectures used by millions of users.

Intermediate~6.5 hours

From fundamentals to production — caching strategies, eviction policies, invalidation, Redis, CDN caching, and multi-level architectures. Practical patterns and a guided final project you build in your own stack (no bundled starter repo).

Intermediate~4.5 hours

Master how microservices talk to each other — synchronous REST and gRPC, async messaging, event-driven patterns, resilience, and distributed consistency.

Articles

An order database's primary data center suffers a catastrophic, unrecoverable event — not a transient node failure, an actual disaster. Two …

A product-page personalization API needs to answer in under 100ms for a good user experience. A shopper in Sydney hits it, and the request h…

A multi-tenant analytics platform partitions incoming events by tenant_id, hashed onto 16 shards — a design that looked perfectly balanced i…

A URL shortener's redirect endpoint, GET /r/{code}, looks purely read-heavy — billions of redirects against a handful of short codes created…

An order service runs in two regions, us-east and eu-west. In one design, both regions serve live customer traffic right now, splitting the …

A permission check in front of a wire-transfer approval endpoint times out. What should happen next? One engineer's instinct says "don't blo…

A payment service keeps processing requests with zero dropped transactions while one of its three nodes crashes mid-request — that's fault t…

A product page shows the item, its price, and an "add to cart" button — the core path — plus a "customers also viewed" recommendation strip …

A checkout API runs three replicas across two availability zones behind a load balancer — on paper, no single point of failure. Then one AZ …

An order-ingestion API writes to an in-memory queue, a worker pool drains it, and a payment provider on the other end gets slow. The queue k…

A shopping cart write to cart-77 needs to land on enough replicas that a later read is guaranteed to see it — but "enough" is a number you c…

A 4-node session cache scales to 5 nodes to handle more traffic. With hash(key) % N, that single node addition changes almost every key's ta…

A user changes their display name, refreshes the page a second later from a phone on a different network, and sees the old name. Nothing cra…

A checkout API can wait until every step finishes, or accept an order and complete work later. The first path gives the caller an immediate …

A shopping cart must remember items, so the product cannot be literally stateless. The useful design question is where that state lives. Kee…

An order API can return responses all day and still charge the wrong amount. It can be temporarily unreachable while every stored order rema…

A dashboard can look “fast” while users still wait, and a load test can report huge requests-per-second while p99 checkout times explode. La…

You press Enter on https://shop.example/products/42. A moment later, a product page appears. That small action crosses naming, transport sec…

Checkout slows while product pages remain healthy. CPU is moderate, but the orders table shows rising lock waits and writes queue behind one…

Docker and Kubernetes are not competitors on the same layer, and treating them as an either/or is the mistake that leads teams to run a clus…

This guide is for backend engineers who know HTTP and database transactions but need to decide where six microservice patterns fit. By the e…

This guide is for developers who can build a frontend, API, and database but have not yet operated the whole request path. By the end, you c…

Want a guided sequence? Follow a learning path that includes this topic.

View Learning Paths