Sources and further reading

The lessons are our own writing. These are the books, papers and articles they point to for more depth, credited to their authors. We link to them; we do not copy them. Image credits are on the image credits page.

System Design Foundations

Books for the whole course

What system design is, and how to approach it

From one server to many: scaling and load balancing

Back-of-the-envelope estimation

Choosing and using a database

Replication and sharding

Caching

Consistency, availability and the CAP theorem

Queues, streams and asynchronous work

Networking, APIs and CDNs

Putting it together: design a URL shortener

  • System Design Interview, An Insider's Guide (the URL shortener chapter) · Alex Xu · a longer treatment of the same problem
  • A RESTful tutorial · restapitutorial.com · background for designing the shorten and redirect endpoints
  • Bloom filter · Wikipedia · used to skip database lookups for keys that cannot exist

Scaling from one user to millions

Classic System Designs

Books for the whole course

  • System Design Interview, An Insider's Guide (volumes 1 and 2) · Alex Xu · book-length treatments of many of these problems
  • Designing Data-Intensive Applications · Martin Kleppmann · the theory behind storage, replication and streams
  • The Amazon Builders' Library · Amazon engineers · real-world write-ups on reliability and scaling

Design a rate limiter

Design consistent hashing

Design a key-value store

Design a unique ID generator

Design a web crawler

  • Mercator: A Scalable, Extensible Web Crawler · Heydon and Najork · a classic design paper; easy to find online
  • Dynamic rendering · Google Search Central · why scripts change what a crawler sees
  • Web crawling lecture notes · Donald Patterson (UC Irvine) · frontier, politeness and priority in a course setting

Design a notification system

Design a news feed

  • Feeding Frenzy: Selectively Materializing Users' Event Feeds · Silberstein et al. · a research paper on push, pull and hybrid feeds

Design a chat system

Design search autocomplete

Design a video streaming service

Design cloud file storage and sync

Core Concepts: How Things Actually Work

Books for the whole course

How AWS Lambda and serverless platforms work

  • Firecracker: Lightweight Virtualization for Serverless Applications · Agache et al. (Amazon Web Services) · an NSDI paper describing the micro-VM technology behind AWS Lambda; easy to find online

SOAP, REST, GraphQL and gRPC compared

  • Microsoft REST API Guidelines and the GraphQL and gRPC documentation · Microsoft, GraphQL Foundation, gRPC authors · search for each; practical guidance on design, versioning and errors

Where online payments are heading

Choosing a programming language for a system

  • Stack Overflow Developer Survey, TIOBE index, GitHub Octoverse · Stack Overflow, TIOBE, GitHub · search for the latest editions: three public views of language popularity, each measured differently

DevOps in practice, and where to learn more

  • Accelerate, The DevOps Handbook, The Phoenix Project, Site Reliability Engineering, Continuous Delivery, Release It! · Forsgren, Humble and Kim; Kim, Humboldt and Debois; Kim, Behr and Spafford; Google SRE team; Humble and Farley; Michael Nygard · the standard reading list on DevOps, delivery performance, reliability and production-ready design

Real-World Systems

Books for the whole course

Design collaborative editing (Google Docs)

  • Yjs and Automerge documentation · open-source CRDT libraries · search for their docs: practical introductions to CRDT-based collaboration

Design an email system (Gmail)

  • How email works: RFC 5321 (SMTP) overview · IETF · search for the standard; the first sections are readable

Design a maps and navigation service

Design a nearby-places service (Yelp)

  • Geohash on Wikipedia, and the S2 Geometry and H3 libraries · various · search for their documentation; H3 is by Uber, S2 by Google

Design a stock exchange

  • The LMAX Architecture · Martin Fowler · a well-known description of a single-threaded, event-sourced, very fast trading system

Design a payment system

Cross-border payments: SWIFT and foreign exchange

Design a metrics and alerting system

  • Gorilla: A Fast, Scalable, In-Memory Time Series Database · Facebook engineers · a paper on compressing time series; easy to find online

How a browser turns a URL into a page

  • How browsers work · Google Chrome developers (web.dev) · search the site for 'critical rendering path' and 'Inside look at modern web browser'

Diagnosing a slow machine: CPU, memory and I/O

  • The USE Method · Brendan Gregg · free; a checklist for finding performance bottlenecks

How microservices work together

Securing a web API

Shipping safely and handling a large outage

How a Twitter-style service works

  • Timelines at Scale (talk) and the Twitter engineering blog · Twitter engineers · search for the talk and blog posts; details of the real system have changed over the years

Uploading large files reliably

Design an AI coding assistant

  • Retrieval-augmented generation and LLM serving (vLLM, PagedAttention) · Lewis et al.; Kwon et al. · search for the papers and documentation; background for the retrieval and serving parts

Big Data and Cloud Data Platforms

Books for the whole course

  • Designing Data-Intensive Applications · Martin Kleppmann · chapters 10 and 11 cover batch and stream processing
  • The Data Warehouse Toolkit · Ralph Kimball and Margy Ross · the classic reference on dimensional modelling

How big data evolved, and the papers behind it

  • The papers listed in this lesson · authors named in the lesson · search each title; most are free to read online from the publishers or authors

Batch and stream processing

  • Streaming Systems · Tyler Akidau, Slava Chernyak, Reuven Lax · a book on the dataflow model; the earlier articles 'Streaming 101' and 'Streaming 102' are free online

Data lakes, warehouses and lakehouses

  • The Data Warehouse Toolkit, and the Apache Iceberg and Delta Lake documentation · Kimball and Ross; the open-source projects · dimensional modelling and the table formats behind the lakehouse

Choosing a cloud provider for a big data solution

  • Each provider's data architecture guides · Amazon Web Services, Microsoft Azure, Google Cloud · search for their reference architectures for data analytics; compare with your own requirements

Software Design Essentials

Books for the whole course

  • Design Patterns: Elements of Reusable Object-Oriented Software · Gamma, Helm, Johnson and Vlissides · the original catalogue of 23 patterns
  • Clean Architecture · Robert C. Martin · the dependency rule and architecture boundaries
  • Domain-Driven Design · Eric Evans · the book that introduced the approach; Vaughn Vernon's 'Domain-Driven Design Distilled' is a shorter start
  • Refactoring Guru: design patterns catalogue · Refactoring Guru · free explanations and examples of each pattern

How to learn design patterns

  • Refactoring Guru: design patterns · Refactoring Guru · free catalogue with examples in several languages
  • Head First Design Patterns · Freeman and Robson · a beginner-friendly, example-led introduction to the same catalogue

The SOLID principles

  • Agile Software Development, Principles, Patterns and Practices; Clean Architecture · Robert C. Martin · where the SOLID principles were collected and explained

Clean and hexagonal architecture

  • The Clean Architecture (blog), Hexagonal Architecture · Robert C. Martin; Alistair Cockburn · search for both articles; short, free introductions to the same family of ideas

Domain-driven design essentials

  • Domain-Driven Design (the 'blue book') and Domain-Driven Design Distilled · Eric Evans; Vaughn Vernon · the original and a short introduction; both worth buying

Low-Level Design Practice

Books for the whole course

  • Head First Design Patterns · Freeman and Robson · a gentle, example-led introduction to the patterns used here
  • Design Patterns: Elements of Reusable Object-Oriented Software · Gamma, Helm, Johnson and Vlissides · the original catalogue
  • Refactoring Guru: design patterns · Refactoring Guru · free explanations with examples

How to approach a low-level design problem

Parking lot

Cab booking

Chat application

  • Chat system design (classic system designs course) · This site · for the infrastructure side: WebSockets, presence and storage

Social feed (Instagram-style)

  • Design the news feed (classic system designs course) · This site · for fan-out on write versus read at scale

Advanced Distributed Systems

Books for the whole course

  • Designing Data-Intensive Applications · Martin Kleppmann · the standard book on these topics
  • In Search of an Understandable Consensus Algorithm (Raft) · Ongaro and Ousterhout · the Raft paper; short and readable
  • Site Reliability Engineering · Google · free online; reliability practice

Consensus: Raft and Paxos

Write-ahead logs, B-trees and LSM-trees

  • Designing Data-Intensive Applications, chapter 3 · Martin Kleppmann · storage engines in depth

Resilience: timeouts, retries, bulkheads, backpressure and circuit breakers

  • Release It! · Michael Nygard · the book that popularised circuit breakers and bulkheads
  • Exponential Backoff and Jitter · AWS Architecture Blog · why jitter matters

Kubernetes essentials

Cloud architecture principles

A map of distributed-system patterns

Databases Deep Dive

Books for the whole course

  • Use The Index, Luke · Markus Winand · free online guide to SQL indexing
  • Designing Data-Intensive Applications · Martin Kleppmann · storage, replication and data models
  • PostgreSQL documentation: performance tips · PostgreSQL · query planning and EXPLAIN

Normalisation and schema design

Indexes in depth

Replication topologies and multi-region databases

  • Designing Data-Intensive Applications, chapter 5 · Martin Kleppmann · replication in depth

Choosing a database type

  • Which database should I use? (cloud decision guides) · Cloud provider documentation · each major cloud publishes a decision tree for its own services

Networking and Web Security Deep Dive

Books for the whole course

  • High Performance Browser Networking · Ilya Grigorik · free online; networking for web developers
  • OWASP Top 10 · OWASP · https://owasp.org/www-project-top-ten/
  • The Web Application Hacker's Handbook · Stuttard and Pinto · classic reference on web attacks

JWT, cookies, CORS and security headers

The OWASP Top 10 and secure design

Messaging and Microservice Patterns

Books for the whole course

  • Designing Data-Intensive Applications · Martin Kleppmann · messaging, streams and consistency
  • Microservices Patterns · Chris Richardson · sagas, outbox, CQRS
  • Site Reliability Engineering · Google · free online; SLOs and error budgets

Message brokers compared

Event-driven architecture: sagas, CQRS and event sourcing

Service discovery, service mesh and sidecars

Operating microservices: config, secrets, feature flags, tracing and logging

Interview Preparation

Books for the whole course

  • System Design Interview, volumes 1 and 2 · Alex Xu · classic interview-style walkthroughs
  • Designing Data-Intensive Applications · Martin Kleppmann · depth behind the answers
  • Grokking the System Design Interview · Educative · a structured practice course

A method for system design interviews

  • Back-of-the-envelope estimation · This site · see the estimation lesson in the foundations course

Keep learning: papers, blogs and a practice habit

Search, Analytics and Geo

Books for the whole course

  • Introduction to Information Retrieval · Manning, Raghavan and Schutze · free online textbook behind most search lessons
  • Designing Data-Intensive Applications · Martin Kleppmann · partitioning and stream processing background
  • Elasticsearch: the definitive guide and reference · Elastic · how a production engine exposes these ideas

TF-IDF: scoring words by how useful they are

BM25: the ranking function behind most search engines

Query understanding: from typed text to a search request

Measuring search: precision, recall, MRR and NDCG

Sharding a search index: scatter, gather and merge

Reservoir sampling: a fair sample of a stream you cannot store

Percentiles at scale: t-digest and mergeable summaries

Geofencing: is this point inside that area?

Nearby search with Redis GEO

Seen filtering: Bloom filter versus exact sets

  • Bloom filter · Wikipedia contributors · definition, error rate and sizing formulas
  • Redis data types: sets and bitmaps · Redis · the exact-set alternatives
  • Network applications of Bloom filters: a survey · Broder and Mitzenmacher · variants and uses

Storage, Queues and Real-time

Books for the whole course

  • Designing Data-Intensive Applications · Martin Kleppmann · storage engines, replication and stream processing
  • Database Internals · Alex Petrov · how storage engines and distributed databases are built
  • Patterns of Enterprise Application Architecture · Martin Fowler · repository, unit of work and related patterns

Bitcask: a tiny log-structured key-value store

Changing a live database: online indexes and schema changes

A job queue on PostgreSQL with SKIP LOCKED

A rule engine and trigger framework

  • Rules engine · Martin Fowler · a balanced view on when engines help
  • Drools documentation · Drools community · a mature open-source rules engine
  • Enterprise Integration Patterns · Hohpe and Woolf · idempotent receiver and message router patterns

The repository pattern: hiding storage behind a domain interface

  • Repository · Martin Fowler · the original catalogue entry
  • Domain-Driven Design · Eric Evans · repositories in the context of aggregates
  • Patterns of Enterprise Application Architecture · Martin Fowler · unit of work and data mapper

WebRTC: peer-to-peer media, signalling, NATs and media servers