InterviewKata
System design · Start here

Start here: from "one server" to designing systems with confidence

System design is the craft of deciding which parts a piece of software needs, how they talk to each other, and what happens when traffic grows or something breaks. You don't need to have built a big system to learn it. You need a clear picture of the building blocks, a handful of numbers, and lots of practice making and defending trade-offs. This page sets you up.

1. What system design is

A city planner doesn't lay bricks. They decide where the roads, water pipes, power lines and fire stations go, how big each must be for the people who'll live there, and what happens when a road closes. System design is city planning for software: the bricks are code, the roads are networks, and the people are requests.

Writing code answers "how does this function work?". System design answers bigger questions:

It's also a standard part of software interviews from mid-level up, and the most heavily weighted round at senior and above. This track teaches the real engineering first; interview technique (Module 05 and the worked designs) sits on top of it.

2. How this track teaches

  1. Six basics modules, then twenty-nine modules in five levels. Level 0 (B1–B6) teaches the vocabulary from zero: clients, servers, APIs, databases, and how an app grows from one server to millions of users. Then from how a single request travels (Level 1) to multi-region architecture and AI systems (Level 5). The module map shows them all.
  2. The same ten sections in every module: the idea, how it works, try it, trade-offs, in real systems, a memory hook, mistakes, a design exercise, a quiz, and further reading.
  3. Press Play on every visualizer. Watching a request hop between machines, or a replica fall behind, sticks better than reading about it. Inside a player, ← → step and space plays.
  4. Thirty-two worked designs put the modules together. Try each one on paper first, then compare: every deep dive shows a bad, a good and a great answer, and why.
  5. Hover or tap a dotted word for a one-line definition; they're all in the glossary below.

3. What you need

4. The map of building blocks

Almost every system you'll design is assembled from the same dozen parts. The best way to meet them is to watch a system grow. Press Play: it starts as one server and adds one part each time a real problem appears.

BlockWhat it doesModule
ClientThe browser, phone app or other service that sends requests.01
DNSTurns a name (example.com) into the address of a server.01, 06
Load balancerSpreads requests across many identical servers; skips broken ones.08
App serversRun your code. Kept stateless so you can add or remove copies freely.08
DatabaseThe source of truth: stores data durably and answers queries.11–17
CacheKeeps hot data in memory so most reads skip the database.09
Blob storageHolds big files (images, video, backups) cheaply and durably.10
CDNCopies of content on servers near users, so far-away users get it fast.10
Queue or logHolds work to do later, so slow jobs don't block user requests.18
WorkersBackground processes that take work from the queue.18, 23
Replicas and shardsCopies of data for safety and reads; splits of data for size and writes.14, 15

5. Five ideas that run through every design

1. Everything is a trade-off

There is no best database or best architecture, only the best fit for these requirements. Name what you gain and what you give up.

2. Numbers decide, not fashion

One modern server handles far more than most people guess. A quick estimate (Module 03) tells you whether you need sharding, or just an index.

3. Start simple, add parts for a reason

Every new box adds cost, failure modes and things to learn at 3 a.m. Add one only when a requirement or a number forces it.

4. Failure is normal

At scale, some disk, machine or network link is always broken. Design for it: redundancy, timeouts, retries, and work that's safe to repeat.

5. Data is the hard part

Servers are easy to add and replace. Data must be stored, copied, split and kept correct. Most deep dives are really about data.

…and say it out loud

A design nobody else understands isn't finished. Practise explaining each choice in one sentence: "I chose X because Y, and it costs Z."

6. The daily routine (45 minutes)

A fixed theme per day means you never waste time deciding what to study.

DayThemeOutput
MondayLearn: read this week's module and run its visualizers3 bullet notes in your design notebook
TuesdayPractise: redo the widget, then the design exercise on paperA sketch with your numbers on it
WednesdayRecall: draw the week's diagram or design from memory, then check itThe parts you forgot, circled
ThursdayRead: one real engineering write-up (a company blog post or a paper) on the topicOne thing real systems do differently
FridayExplain: talk through the idea out loud for five minutes, or record yourselfA short note you'd be happy to reread in a year

Optional weekend: try one of the worked designs on paper with a 45-minute timer, then compare with the answer.

7. Your design notebook

Keep one file or paper notebook, one entry per design you attempt. Use the same headings every time; they're the steps of the design method (Module 05):

## Design: URL shortener   (2026-10-20, 45 min, attempt 1)
Requirements   create short link; redirect; links don't expire · 100M new/month, 10:1 reads
Estimates      ~40 writes/s, ~400 reads/s avg, ×3 peak · 6 TB over 10 years → one DB is fine
Entities/API   Link(code, long_url, owner, created) · POST /links · GET /{code} → 302
Design         client → LB → app → cache → Postgres; codes from a counter + base62
Deep dives     hot links (cache + CDN), unique codes without collisions, analytics via a queue
Missed         custom aliases; abuse (malware links); 301 vs 302 for analytics
Next time      ask about expiry and analytics before drawing

The "Missed" line is the most valuable one: it's your personal list of gaps, and it shrinks visibly over the weeks.

8. Self-check quiz

Which component keeps hot data in memory so most reads skip the database?

Module 09.

Why are app servers kept stateless?

Any copy can serve any request (Module 08).

When should you add a new component to a design?

Idea 3: start simple, add parts for a reason.

What decides whether you need sharding?

Idea 2: numbers decide (Module 03).

Where do most hard design problems really live?

Idea 5: data must be stored, copied, split and kept correct.

9. Glossary

Every dotted word on the system design pages, in one place. New terms are added as each module is published.

10. Where to go next