System Design Learning Sources: Free Courses, Books, and Blogs

The sources I point people to when they ask where to learn system design, roughly in the order I would work through them. Most of them are free, and the paid ones are called out as such.

Start here: free courses

Karan Pratap Singh's System Design course is a free, open-source repository that goes from networking basics to full architectures. It covers IP, the OSI model, TCP and UDP, and DNS; then the core building blocks of load balancing, clustering, caching, CDNs, proxies, availability, and scalability; then databases (SQL vs NoSQL, replication, indexes, sharding, consistent hashing, CAP and PACELC, ACID and BASE); then architecture patterns (N-tier, message queues, publish-subscribe, monoliths vs microservices, event sourcing, CQRS, API gateways); and it closes with five worked interview case studies: a URL shortener, WhatsApp, Twitter, Netflix, and Uber. Read it in order the first time, save the case studies for last, then use it as quick revision later.

Donne Martin's system-design-primer is the other well-known free repository. It goes wider than deep, and its main value is the exercise set: design problems with worked solutions, plus flashcards for spaced repetition.

Books

  • Designing Data-Intensive Applications by Martin Kleppmann. The one book worth reading cover to cover. It explains why distributed systems behave the way they do, rather than listing components, and it is the source most other material is downstream of.
  • System Design Interview, An Insider's Guide (Volumes 1 and 2) by Alex Xu. Interview-shaped and heavily illustrated. Good for pattern recognition before an interview, weaker as a first explanation of fundamentals.

Engineering blogs and real architectures

Once the fundamentals are in place, reading how real companies solved real problems is the fastest way to build judgment:

  • High Scalability for architecture breakdowns of well-known systems.
  • Company engineering blogs: Netflix, Uber, Discord, Meta, and Stripe all publish detailed writeups of systems at scale.
  • Martin Fowler's site for microservices and the patterns around them, written carefully and without hype.
  • Cloud provider architecture guides (the AWS Architecture Center, the Google Cloud Architecture Framework) for reference designs and their tradeoffs.

Papers worth reading eventually

The classic distributed systems papers are more approachable than they look, and a lot of modern tooling is a direct descendant of them: Google's MapReduce and Bigtable, Amazon's Dynamo, and the Raft consensus paper.

How I would sequence it

  1. Work through one free course end to end to build vocabulary, so the terms stop being noise.
  2. Read Designing Data-Intensive Applications for the underlying reasoning.
  3. Practice design problems out loud, or on paper, before reading anyone's solution.
  4. Read engineering blogs continuously, and use the interview-focused books only when an interview is actually coming up.

My own notes on these topics live in Foundational Topics, HLD, and Relational Databases.

Adesh Tamrakar
SOFTWARE ENGINEER · VAULT

Notes, insights and random discoveries from a working engineer's vault - written for future me, published for you.