Build a service with a real database, caching, and limits
A service that’s correct but slow (or falls over under load) is a real on-call problem. You build one that holds up: a sensible schema, no N+1s, caching, rate limiting, and idempotent writes.
What you'll build
A backend service over a real database with migrations, query optimization, a caching layer, rate limiting, idempotent endpoints, and metrics.
See how we teach, before you sign up
You don't just get code dumped on you. Every starter file and every solution is explained line-by-line, in plain English. Here's one real file from this project:
services:
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: app
POSTGRES_DB: posts
ports: ["5432:5432"]
redis:
image: redis:7
ports: ["6379:6379"]Reading this file
image: postgres:16Pins a specific Postgres version so everyone on the team runs the same database locally.POSTGRES_PASSWORD: appSets dev credentials via env vars, fine for local only, never commit real secrets like this.ports: ["5432:5432"]Maps the container's database port to your machine so your app can connect on localhost.image: redis:7Runs Redis alongside Postgres so you can build the caching and rate-limiting layers locally.
One command to get a real Postgres + Redis locally.
That's 1 of 9 explained code blocks in this single project.
The build, milestone by milestone
- 1
Model the data
5 guided stepsThe schema is the foundation everything else sits on. Getting normalization, keys, and indexes right early prevents the painful migrations and slow queries that haunt a service later.
- 2
Kill the N+1s
5 guided stepsN+1 queries are the most common backend performance bug, a list endpoint that quietly fires hundreds of queries. Finding and fixing them is a core backend skill interviewers probe for.
- 3
Add caching & limits
5 guided stepsCaching turns repeated expensive reads into microseconds, and rate limiting protects the service from abuse and runaway clients. Both are everyday production necessities.
- 4
Make writes safe
5 guided stepsNetworks retry. Without idempotency, a retried "create payment" charges twice. Idempotency keys are how real systems make writes safe to retry.
- 5
Operate it: dashboards, cost & a runbook
5 guided stepsMetrics nobody graphs and a service nobody has costed or written runbooks for is what on-call dreads. This milestone turns raw numbers into something operable at 3am.
What's inside when you start
You'll walk away with
This is portfolio-grade. Build it free.
Sign up to unlock every milestone step-by-step, the code skeletons, full reference solutions, and checkable tasks, with your progress saved as you build.
Start building