Skip to content

System Design Lab

System design interview prep, learned by building. Design each system the way an interview asks, then run the parts interviewers push on, so the trade-offs are something you've seen rather than memorised.

How each topic works

1. Design it, interview-style

Requirements, rough estimates, API, a high-level diagram, the data model, then deep dives and trade-offs: the order you’d say them in an interview.

2. Build only the deep dives

Small Go labs for the pieces interviewers probe. Each step ends with something you run and watch: curl, logs, killing a process.

3. Finish with a cheat sheet

The short version to say out loud, plus answers to the follow-up questions you’re likely to get.

Run labs in your browser

Every lab page has an Open this lab button: a GitHub Codespace with Go, Claude Code and the ports ready. No local setup needed.

Learning path

Learning with Claude Code

The repo’s CLAUDE.md sets Claude Code up as a tutor: one concept per step, the why before any code, a pause after each step so you can run it, and links back to interview questions. Open a lab in Codespaces, run claude in the terminal, and try:

  • “Walk me through the rate limiter interview design, Part 1.”
  • “Let’s build step 1 of the rate limiter.”
  • “Quiz me on the load balancer cheat sheet.”
  • “Design a URL shortener as a new experiment, same structure as the others.”

When you’re done, run /wrap-up. Claude saves a summary of what you learned to your own notes in the repo and drafts fixes wherever these lessons fell short for you. You choose what to send, and it goes in as a pull request for review. That’s how the lessons get better for the next reader.