System Design Handbook · llms.txt
The rest of this handbook teaches ideas one at a time: caching, replication, sharding, queues, consensus. Real systems use many of them at once, and the interesting part is how they fit together and what each team gave up to get what it needed. Reading how real systems were built is the best follow-up to the handbook, for three reasons:
This chapter is a reading list with notes. It has three parts: the papers and talks behind well-known systems, write-ups of how particular companies built their products, and the engineering blogs where companies still publish this kind of material.
Details such as version numbers, machine counts and product names go out of date quickly, so there is no point memorizing them. Read for the shape of the design, with four questions in mind:
Here is what that looks like on one paper. Dynamo: Amazon's Highly Available Key-value Store was presented at SOSP in October 2007. It describes the store that some of Amazon's core services used to keep data such as shopping carts.
The problem. The paper opens with the shopping cart. Customers "should be able to view and add items to their shopping cart even if disks are failing, network routes are flapping, or data centers are being destroyed by tornados." At Amazon's size, the authors write, small and large components fail continuously. So the store must keep accepting writes while parts of it are broken.
The constraints. Many Amazon services, such as shopping carts, best seller lists, session management, sales rank and the product catalog, only need to look data up by its primary key. The paper says that storing their data in a relational database "would lead to inefficiencies and limit scale and availability," so Dynamo offers only a primary-key interface. Amazon also measured its service-level agreements at the 99.9th percentile of latency, so that the slowest 0.1% of requests counted. The paper reports that its 99.9th-percentile latencies were around 200 ms, an order of magnitude higher than the averages.
The trade-offs. To stay writable during failures, "Dynamo sacrifices consistency under certain failure scenarios." Two copies of the same cart can be updated separately and drift apart. Dynamo keeps both versions and lets the application merge them when it next reads the data. The design pushes "the complexity of conflict resolution to the reads in order to ensure that writes are never rejected." The cost shows up in the cart: an "add to cart" operation is never lost, "however, deleted items can resurface."
The techniques. The paper's Table 1 maps each problem to the technique it used. Every one of them has a section in this handbook:
| Problem | Dynamo's technique | Where the handbook covers it |
|---|---|---|
| Spreading keys over machines | Consistent hashing, with virtual nodes | Consistent hashing |
| Staying writable when copies disagree | Vector clocks, with the conflict resolved when the data is read | Versioning |
| Machines that are down for a short time | Sloppy quorum and hinted handoff | Sloppy quorum and hinted handoff |
| Machines that are gone for good | Anti-entropy using Merkle trees | Anti-entropy with Merkle trees |
| Knowing which machines are alive | A gossip-based membership protocol | Failure detection with gossip |
The paper also shows the tuning knobs from quorums: each key is stored on N machines, a read waits for R of them and a write waits for W. "The common (N,R,W) configuration used by several instances of Dynamo is (3,2,2)." Because R + W = 4 is greater than N = 3, a read and a write that both succeed normally overlap on at least one machine.
What you take away. You don't need to remember any of Dynamo's numbers. The lesson is the pattern: when losing a write costs more than showing slightly stale data, accept every write and merge conflicts later. The CAP chapter tells the same story from the theory side.
What changed later. Amazon's managed database service, DynamoDB, has a similar name but is a different system. Its own paper, Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service, appeared at USENIX ATC in July 2022. Reading the two papers side by side is a good exercise in how a design changes when it becomes a service that outside customers pay for.
Use this checklist on any paper, talk or blog post in this chapter.
These are the systems most often cited in system design discussions. Where the original paper is freely available, it's linked. For open source projects, the link is an introductory slide deck, with the project's own site or original paper alongside it. The one-sentence descriptions come from the paper or project page.
A worked example of the kind of diagram these write-ups contain: in a 2013 talk, Timelines at Scale, Twitter's Raffi Krikorian walked through how a tweet reaches people. High Scalability's summary of the talk reports 300,000 read requests a second against 6,000 writes, so Twitter did the work when a tweet was written. A "fanout" step copied each new tweet's ID into every follower's home timeline, kept in a Redis cluster with up to 800 entries per timeline and three copies of each. A separate path fed the tweet to an "Ingester", which indexed it in Earlybird, Twitter's search index, and a service called Blender built search results from it. The tweet also triggered push notifications.
Fan-out on write has a weak spot: accounts with tens of millions of followers. The summary reports that a tweet could take up to five minutes to reach all 31 million of Lady Gaga's followers, against a goal of five seconds. For accounts like that, Twitter was moving to skip the fan-out and merge their tweets into each reader's timeline at read time. Design the Twitter timeline and search builds the same design step by step.
| System | What it is | Read | Handbook chapters |
|---|---|---|---|
| MapReduce (Google) | A programming model for processing large data sets: you write a map function and a reduce function, and the system runs them in parallel on thousands of machines and handles machine failures for you. | Paper, OSDI 2004 | Batch processing |
| Spark | A multi-language engine for data engineering, data science and machine learning on one machine or a cluster. It started as a research project at UC Berkeley's AMPLab in 2009 and is now an Apache project. Its core idea is keeping data in memory across steps. | Slides: Apache Spark Architecture · RDD paper, NSDI 2012 · spark.apache.org | Batch processing |
| Storm | A distributed realtime computation system that processes unbounded streams of data, "doing for realtime processing what Hadoop did for batch processing." It was built at BackType, which Twitter bought in July 2011, and Twitter open sourced it that September. | Slides: Introduction to Storm · storm.apache.org | Batch processing, Event streaming |
| System | What it is | Read | Handbook chapters |
|---|---|---|---|
| Bigtable (Google) | A distributed storage system for structured data, built to scale to petabytes across thousands of commodity servers. The paper says more than sixty Google products used it, including web indexing, Google Earth and Google Finance. | Paper, OSDI 2006 | Wide column stores |
| HBase | The Hadoop database: an open source store modeled after Bigtable, running on top of Hadoop and HDFS, with random, realtime reads and writes. | Slides: Intro to HBase · hbase.apache.org | Wide column stores |
| Cassandra | A distributed NoSQL database with a partitioned wide-column model and eventual consistency. It was first designed at Facebook, combining Dynamo's distribution and replication techniques with Bigtable's data and storage model. | Slides: Cassandra Introduction & Features · Paper, LADIS 2009 | Wide column stores, Consistent hashing |
| Dynamo (Amazon) | A highly available key-value store that gives up consistency in some failure cases so that writes are never rejected. (DynamoDB, Amazon's later managed database, is a separate system with its own 2022 paper.) | Dynamo paper, SOSP 2007 · DynamoDB paper, USENIX ATC 2022 | Design a key-value store, CAP and consistency |
| MongoDB | A document database: each record is a document of field and value pairs, similar to a JSON object, and fields can hold other documents and arrays. | Slides: Introduction to MongoDB · What is MongoDB? | Document stores |
| Spanner (Google) | Google's "scalable, multi-version, globally-distributed, and synchronously-replicated database," the first to support consistent distributed transactions at global scale. It relies on a time API that exposes how uncertain the clock is. | Paper, OSDI 2012 | CAP and consistency, Distributed transactions |
| Memcached | A free, open source, distributed in-memory key-value cache for small chunks of data, such as the results of database calls, API calls or page rendering. It speeds up web applications by taking load off the database. | Slides: Introduction to memcached · memcached.org | Caching |
| Redis | An in-memory "data structure server" with native types such as strings, hashes, lists, sets and sorted sets. Unlike Memcached it can persist data to disk, either as point-in-time snapshots (RDB) or as a log of every write (AOF). | Slides: Introduction to Redis · Redis data types · Persistence | Caching, Key-value stores |
| System | What it is | Read | Handbook chapters |
|---|---|---|---|
| Google File System (GFS) | A scalable distributed file system for large, data-intensive applications, built to tolerate faults on cheap commodity hardware. A single master holds the metadata while many chunkservers hold the data. | Paper, SOSP 2003 | Batch processing, Availability |
| Hadoop Distributed File System (HDFS) | The open source counterpart to GFS. A single NameNode manages the file system's namespace, and DataNodes store the blocks that files are split into. It was originally built for the Apache Nutch web search engine. | HDFS Architecture | Batch processing |
| System | What it is | Read | Handbook chapters |
|---|---|---|---|
| Chubby (Google) | A lock service for loosely coupled distributed systems. It offers coarse-grained locks and a small amount of reliable storage, through an interface much like a file system, and favors availability and reliability over speed. Paxos sits at its core. | Paper, OSDI 2006 | Consensus |
| ZooKeeper | A distributed, open source coordination service. It offers simple building blocks, arranged like a file system's directory tree, that applications use for synchronization, configuration, groups and naming. It came out of Yahoo. | Slides: Introduction to Apache ZooKeeper · Paper, USENIX ATC 2010 · zookeeper.apache.org | Consensus |
| Dapper (Google) | Google's tracing system for following one request through many services. It keeps overhead low by sampling requests and by adding instrumentation to a small number of shared libraries. | Paper, Google technical report 2010 | Observability |
| Kafka | A distributed messaging system built at LinkedIn to collect and deliver large volumes of log data with low latency. Today it describes itself as an event streaming platform. | Slides: Introduction and Overview of Apache Kafka (TriHUG, July 2013) · Paper, NetDB 2011 · kafka.apache.org | Event streaming, Queues and async |
Each paper describes its system as it was when the paper was published, often more than a decade ago. The systems have changed since, and some have been replaced. Read the papers for the reasoning behind each design, which ages much more slowly than the details.
These write-ups describe how particular companies built their products. Most are posts on High Scalability, a blog that summarized conference talks and engineering posts for many years. Many are more than ten years old, so the year matters: read them for how the team reasoned under its constraints, and assume the specific tools have changed since. The year is the post's publication date, or the date of the talk where that's known.
Some pairs are worth reading together, because each one shows a design changing as the company grew:
If you are interviewing at a company, read a few recent posts from its engineering blog. The questions you get may come from the same domain, and the posts show which problems the company's engineers actually work on.
Many of these blogs have moved since they were first started, and a few have closed. The links below are the current addresses, checked in October 2026. Where a blog has closed, the link is to an archived copy on the Internet Archive's Wayback Machine.
| Company | Blog | Notes |
|---|---|---|
| Airbnb | The Airbnb Tech Blog | Moved to Medium from its old address, nerds.airbnb.com. |
| Atlassian | How we build | The old developer blog now redirects to the general "Inside Atlassian" blog. Archived copy of the developer blog (2019). |
| Amazon Web Services | AWS News Blog | Product launches and how AWS services work. |
| Bitly | word: the Bitly engineering blog | Still online, but the last post is from November 2017. |
| Box | Box Blog: Engineering | |
| Cloudera | Cloudera Blog | The old developer blog address redirects here. |
| Dropbox | Dropbox Tech Blog | Moved from tech.dropbox.com. |
| eBay | eBay Innovation stories | The old eBay Tech Blog address redirects here. |
| Etsy | Code as Craft | Moved from codeascraft.com. |
| Evernote | Evernote Tech Blog (archived, 2017) | Closed. The address now redirects to Evernote's product blog. |
| Facebook (Meta) | Engineering at Meta | Replaces the old Facebook Engineering page. |
| Flickr | code.flickr.net | Still online. The latest post is from February 2022. |
| Foursquare | Engineering posts on Foursquare's Medium | engineering.foursquare.com now redirects to Foursquare's marketing pages. The latest engineering post is from October 2022. |
| GitHub | The GitHub Blog: Engineering | |
| Google Research Blog | Moved from googleresearch.blogspot.com. | |
| Groupon | Groupon Product and Engineering | The latest post is from June 2023. |
| Heroku | Heroku Blog: Engineering | |
| High Scalability | High Scalability | Not a company blog: summaries of how many companies built their systems, including most of the write-ups above. |
| HubSpot | HubSpot Product Team Blog: Engineering | |
| Instagram on Engineering at Meta | Instagram moved its blog here in 2022. The original Tumblr blog is still online, with posts up to 2015. | |
| Intel | Intel Software Blogs (archived, 2015) | Closed. The old address no longer loads. |
| Jane Street | Jane Street Tech Blog | Much of it is about OCaml, the language Jane Street uses. |
| LinkedIn Engineering Blog | ||
| Microsoft | Engineering@Microsoft | The old engineering.microsoft.com site closed and now redirects to Azure DevOps documentation. Archived copy (2018). |
| Microsoft | Microsoft for Python Developers Blog | Formerly "Python Engineering at Microsoft" on MSDN. |
| Netflix | Netflix TechBlog | Moved from techblog.netflix.com. |
| PayPal | PayPal Developer Community Blog | PayPal's Medium blog now points here too. |
| Pinterest Engineering Blog | ||
| Quora | Quora Engineering | The address loads behind a browser check, so it couldn't be checked automatically. |
| Reddit Inc blog and r/RedditEng | redditblog.com redirects to the company blog. Engineering posts go to the r/RedditEng community. | |
| Salesforce | Salesforce Engineering Blog | |
| Slack | Engineering at Slack | |
| Spotify | Spotify Engineering | The old address, labs.spotify.com, now hosts Spotify's experimental products instead of the blog. |
| Stripe | Stripe Dev Blog: Engineering | stripe.com/blog/engineering redirects here. |
| Twilio | Twilio Blog | The old engineering address redirects to the main blog. |
| Twitter (X) | X Engineering | Moved from blog.twitter.com. The page blocks automated checks, so here is an archived copy from September 2026. |
| Uber | Uber Blog: Engineering | Moved from eng.uber.com. |
| Yahoo | Yahoo Engineering | Still online, but the last post is from March 2019. |
| Yelp | Yelp Engineering and Product Blog | |
| Zynga | Zynga Engineering Blog | Posts are infrequent. |
For many more, the community-maintained engineering-blogs list on GitHub collects hundreds of company and personal engineering blogs. If you know a company blog that's missing, add it there.
Previous: Practice questions · Next: About this handbook