ChaosLab
Build a system. Break it. Learn why.
Pick a classic system design question, build your answer on a visual canvas, and get graded by a rubric evaluated against a live simulation — LeetCode for system design.
Questions
Classic system design questions, graded by a rubric evaluated against your architecture and a live simulation at real-world scale.
Templates
Hand-tuned reference architectures — open one straight in the lab with its reasoning already explained.
Hello World
The baseline request path — one server, one database, nowhere to hide.
The simplest possible backend: users hit a single server, which talks to a single database. A calm 100 users keeps everything comfortably healthy.
Classic 3-Tier
Horizontal scaling behind a load balancer — the bread-and-butter production layout.
Users hit a load balancer that spreads work across three app servers, a cache soaks up repeat reads, and a single database backs it all. The bread-and-butter architecture — comfortable at 10k users.
Read-Heavy at Scale
CDN + cache absorb reads before database shards ever see them.
A CDN and a hot cache soak up almost every read before it reaches eight app servers and a modestly-sharded database. Comfortably healthy at its default 1M users — crank the USER LOAD slider up from there and watch the write path (database shards) start to strain first.
Netflix-Style Streaming
Tiny metadata calls and massive video bytes take two completely different paths.
Two lanes from Users: tiny, cache-heavy API calls through Zuul and an autoscaled Playback tier, and massive video-byte traffic straight from the Open Connect CDN to S3 — the CDN bypasses the app tier entirely. Healthy at its default load; melts down once the fleet is cranked past what a single ELB/LB tier was ever sized for.
Instagram-Style Social Feed
A social feed is a read-amplification problem — cache misses hit the database, not the network.
Media reads bypass the app tier via a CDN straight to Haystack photo storage, while the main path (LB → rate limiter → Django fleet → Memcached → sharded Postgres) handles everything else, with Celery/RabbitMQ fanning writes out to a Cassandra feed store asynchronously. Healthy at default load; the fixed-capacity Load Balancer is the first thing to give out as load climbs.
Planet Scale
Every lever at once — and it still barely holds at 100M users.
CDN, a rate limiter, twin load balancers, 200 app servers, a shared cache, a write-behind queue, and a 64-shard database. Barely healthy at 100M users on this build — crank to 500M and watch the CDN (fixed 5M rps ceiling) take the whole system down with it.
How it works
- 1
Drag components
Pull servers, caches, queues and more onto the canvas.
- 2
Wire them up
Connect nodes to shape how traffic actually flows.
- 3
Crank the load
Slide users from 10 to 500 million and watch it hold — or melt.