See how it works90s
Where large scale system design gets real
System design is learned by doing — not by reading. Real challenges, real tradeoffs, code that actually runs.

Recently added

PostgreSQL search: Use the tools which you have correctly
ChallengePostgreSQLpostgres
A support portal search migrated to Postgres full-text search two weeks ago and has been silently broken ever since. Your task is to improve the search quality.
Analytics Dashboard Meltdown
Challengescalability
Your transaction log queries are grinding to a halt as the table grows. Implement PostgreSQL table partitioning to bring date-range queries back under 1 second.
The books didn't balance. Here's how the outbox pattern saved our distributed transaction
Deep DivePostgreSQLpostgres
How the outbox pattern eliminates phantom transactions between your database and event stream — and why at-least-once delivery with idempotent consumers is the right tradeoff.

Platform

Stop reading about system design. Start building them.

Every challenge runs against real infrastructure — giving you a real environment to debug, iterate, and learn in.

01
Live Traffic

See exactly where your system fails under real traffic.

nurburg.dev simulates real production traffic against your design to surface bottlenecks. Learn to debug like a top Software Architect.

MySQL CPU
78%↑ 12% vs avg
order-service p95
245msSLO: 200ms ⚠
Redis avail.
99.9%30d uptime
order-service latency
p75
p95
p99
MySQL CPU usage
cpu %
Throughput (req/s)↑ 810 peak
Service health · 24h
ok
warn
error
api-gw
order-svc
mysql
redis
all services nominal now
02
Zero Setup

Open a challenge. Start building.

No Docker installs. No config rabbit holes. nurburg.dev spins up a fully configured browser-based environment in seconds — so your effort goes into learning key concepts, not setting up complex dev environments.

nurburg.dev/challenges/rate-limiter/env
main.go
limiter.go
store.go
config.go
go.mod
Makefile
package main import (  "context"  "net/http") // TODO: implement sliding windowfunc NewLimiter(  rate int,  window time.Duration,) *Limiter {  
03
Stay Sharp

One challenge a week. A different engineer in six.

Each challenge is scoped, complete, and immediately applicable. Build a habit of tackling one each week, and watch your architectural instincts sharpen over months.

This week's challenges
Rate Limiter at Scale
Distributed · ~90 min
New
🗄️
Leader Election
Consensus · ~120 min
New
🔁
Idempotent Payments
Transactions · ~75 min
Done
🔍
Distributed Tracing Pipeline
Observability · ~60 min
New
🛡️
Circuit Breaker Pattern
Resilience · ~45 min
Done

The nurburg.dev newsletter

The newsletter that makes you a better systems engineer.

1 email per week. No noise.