The Mainframe Age
When one machine had to do everything
Before Multics, using a computer meant physically feeding punch cards into a room-sized machine and waiting hours for output. Multics introduced timesharing - splitting one computer's attention across multiple users, each convinced they had the machine to themselves. The project was overly ambitious and Bell Labs eventually quit. But Ken Thompson and Dennis Ritchie took the ideas and built something simpler: Unix. Every server you've ever SSH'd into descends from that decision to leave.
Read the deep dive on our blogKey Insight: The very first "distributed systems" problem was splitting one machine across multiple users. Multi-tenancy isn't a cloud invention - it's older than the internet itself.
Before Codd, every database was a nightmare. Data was stored in hierarchical trees or network graphs, and every application had to know the exact physical layout of the data on disk. If you reorganized the storage, every program broke. Codd proposed something radical: separate the logical structure of data from its physical storage. Define data as relations (tables), and let a query language figure out how to retrieve it. IBM ignored the paper for years. Larry Ellison read it and built Oracle. The rest is a $300 billion industry.
Read the deep dive on our blogKey Insight: Separating the "what" from the "how" is the most powerful idea in computer science. Every abstraction layer you build in system design - from APIs to caching - follows this exact principle.
Levels 1 and 2 are the mainframe era in miniature. You start with a CDN serving static files, then add a load balancer, web servers, and a database. The same architecture that powered the early web - and the same architecture you'll spend the rest of the lab learning to scale beyond.
The Distributed Dream
When Google proved cheap hardware beats expensive hardware
Two Stanford PhD students wanted to index the entire web. They couldn't afford enterprise servers, so they bought cheap PCs from Fry's Electronics and duct-taped them into a rack. Their key insight: if individual machines are unreliable, design the software to handle failure. Don't prevent crashes - expect them. This philosophy became the foundation of modern distributed systems. Google didn't succeed because it had better hardware. It succeeded because it assumed hardware would fail and built software smart enough to survive it.
Read the deep dive on our blogKey Insight: Design for failure, not against it. This principle shows up in every system design interview. Redundancy, replication, health checks, failover - all descend from Google's original bet that cheap hardware plus smart software wins.
At the ACM Symposium on Principles of Distributed Computing, Eric Brewer dropped a bomb: in a distributed system, you can only guarantee two out of three properties - Consistency (every read gets the latest write), Availability (every request gets a response), and Partition tolerance (the system works even when network links fail). Since network partitions are inevitable in the real world, you're really choosing between consistency and availability. This conjecture, proven as a theorem by Gilbert and Lynch in 2002, became the most debated result in distributed systems. Every database, every cache, every queue you design makes a CAP trade-off - whether you realize it or not.
Read the deep dive on our blogKey Insight: CAP isn't about choosing two out of three - it's about what happens during a network partition. Normal operation can have all three. The interview question is: when your network splits, does your system return stale data (AP) or refuse to answer (CP)?
When you build a Key-Value Store in Level 6, you're implementing the ideas from GFS and BigTable. Consistent Hashing in Level 7 solves the same partition assignment problem Google fought with. These aren't academic exercises - they're the exact primitives Google invented to index the web.
The Amazon Effect
When e-commerce rewrote the rules of databases
Werner Vogels published a stark admission: Amazon's monolithic Oracle database was killing them. Every Black Friday, the single database became a bottleneck. They couldn't scale reads and writes independently. Schema migrations required downtime. And the licensing costs were astronomical. Amazon started breaking the monolith into services - each service owning its own data store. This wasn't microservices yet (that term wouldn't exist for years), but it was the first move. The lesson was painful and expensive: tight coupling between services through a shared database creates a system where one team's mistake can take down the entire platform.
Read the deep dive on our blogKey Insight: Shared databases create hidden coupling. The moment two services read from the same table, they're coupled - even if their code never imports each other. Data ownership is the hardest part of service decomposition.
This paper changed databases forever. Amazon needed a key-value store where the shopping cart would ALWAYS work - even during network failures, even during data center outages. Their answer was Dynamo: an "always-writeable" store that sacrificed consistency for availability. The techniques were brilliant and ruthless. Consistent hashing for partition assignment. Vector clocks for conflict detection. Sloppy quorums for availability during failures. Hinted handoff so writes reach their destination eventually. And the killer feature: tunable consistency via read/write quorum sizes (R + W > N for strong consistency, or lower values for better availability). Every NoSQL database born in the next decade - Cassandra, Riak, Voldemort - was essentially "what if we took Dynamo's ideas and..."
Read the deep dive on our blogKey Insight: The Dynamo paper is the single most important paper for system design interviews. Consistent hashing, quorum reads/writes, vector clocks, gossip protocol, hinted handoff - if you understand Dynamo, you understand half of distributed databases.
The URL Shortener's read-heavy caching, the Rate Limiter's distributed state, and the Distributed Cache level all trace directly to Dynamo's ideas. When you configure replication factor and consistency levels, you're making the same trade-offs Amazon made for its shopping cart.
The Real-Time Revolution
When batch processing wasn't fast enough
Jay Kreps was building LinkedIn's data infrastructure when he realized something profound: every data problem at scale is really a log problem. A log is just an ordered, append-only sequence of records. Databases use logs (write-ahead logs). Replication uses logs (binlog). Event sourcing uses logs. If you put a durable, distributed log at the center of your architecture, every system can consume events at its own pace. Slow consumers don't block fast ones. New consumers can replay from the beginning. The log becomes the single source of truth. This idea became the intellectual foundation for Kafka and the entire stream processing movement.
Read the deep dive on our blogKey Insight: The append-only log is the most underrated data structure in system design. It solves replication, event sourcing, audit trails, and inter-service communication. If an interviewer asks how services stay in sync, the answer usually involves a log.
LinkedIn needed to stream hundreds of billions of events per day between dozens of internal systems. Traditional message queues (RabbitMQ, ActiveMQ) couldn't keep up - they were designed for point-to-point messaging, not planet-scale event streaming. Kreps built Kafka around one idea: a distributed commit log. Producers append to topic partitions. Consumers read at their own offset. Messages are persisted to disk (sequential writes are fast!) and replicated for durability. Unlike traditional queues, messages aren't deleted after consumption - they're retained by time or size. This meant multiple consumers could independently process the same stream. The result was a messaging system that could handle millions of events per second with end-to-end latency under 10ms. Today, over 80% of Fortune 100 companies run Kafka.
Read the deep dive on our blogKey Insight: Kafka isn't a message queue - it's a distributed commit log. This distinction matters in interviews. Queues deliver messages once and delete them. Logs retain messages and let consumers rewind. That's why Kafka can power both real-time processing AND batch analytics from the same stream.
The News Feed uses fan-out patterns that Kafka's partitioned topics made possible. The Chat System relies on WebSocket connections and message queues for delivery guarantees. And Level 22 is literally "design Kafka" - you're building the system that launched the streaming revolution.
The Microservices Migration
When Netflix bet the company on breaking things apart
On August 25, 2008, Netflix's monolithic database went down for three days. Three days. No DVDs shipped. No website. The postmortem was brutal: a single corrupted database table took down the entire company. Netflix decided that this would never happen again. They spent the next seven years migrating from a monolithic Java application and Oracle database in their own data center to hundreds of microservices running on AWS. Every piece of the system was decoupled: the API gateway (Zuul), service discovery (Eureka), circuit breakers (Hystrix), configuration management (Archaius), and more. They open-sourced nearly all of it. The "Netflix OSS" stack became the blueprint for microservices architecture. It cost them millions of engineering hours, but Netflix went from shipping DVDs to streaming to 200 million subscribers - and they never had another three-day outage.
Read the deep dive on our blogKey Insight: Netflix didn't adopt microservices because it was trendy. They adopted it because a monolith nearly killed the company. The best architecture decisions are always driven by specific failures, not abstract best practices.
As cloud platforms emerged, developers kept making the same mistakes: storing state in the application server, hard-coding configuration, treating logs as files instead of streams. Wiggins distilled years of Heroku's operational experience into twelve principles for building cloud-native apps. Store config in environment variables, not code. Treat backing services as attached resources. Keep build, release, and run stages separate. Export services via port binding. Scale out via processes, not threads. These seem obvious now, but in 2011 they were genuinely radical. The Twelve-Factor methodology became the philosophical foundation for Docker, Kubernetes, and the entire cloud-native movement.
Read the deep dive on our blogKey Insight: Twelve-Factor principles come up constantly in system design discussions. "Where does the config live?" "How do you scale?" "How do you handle logs?" These aren't implementation details - they're architectural decisions that define how your system operates.
Hotel Reservation uses the saga pattern for distributed transactions across microservices. Uber's architecture is a masterclass in microservice communication. DoorDash combines real-time matching with multi-service coordination. These levels don't just use microservices - they teach you why every Netflix pattern exists.
The Data at Scale Wars
When every company became a data company
Traditional databases use B-trees for indexing: great for reads, terrible for writes (every write updates the index in-place on disk, causing random I/O). O'Neil proposed an alternative: buffer writes in memory, then flush them to disk in large sequential batches. Merge the on-disk segments periodically in the background. Sequential writes are 100-1000x faster than random writes on spinning disks. The trade-off is reads - you might need to check multiple segments. Bloom filters and block indexes mitigate this. LSM-trees became the engine under nearly every modern write-heavy database: Cassandra, HBase, RocksDB, LevelDB, InfluxDB. When you hear "write-optimized storage engine," it's almost always an LSM-tree underneath.
Read the deep dive on our blogKey Insight: B-trees optimize for reads; LSM-trees optimize for writes. This choice cascades through your entire architecture. If your interviewer asks about a write-heavy workload (metrics, logs, IoT sensors), LSM-tree storage should be part of your answer.
Shay Banon built Elasticsearch because he wanted to help his wife find recipes. The side project became the world's most popular search engine (after Google). Elasticsearch made Lucene's inverted index accessible via a REST API with automatic sharding, replication, and near-real-time indexing. An inverted index maps words to documents (the reverse of a normal index that maps documents to words). Search for "distributed systems" and the index instantly returns every document containing those terms, ranked by relevance using TF-IDF or BM25. Combined with Logstash (data ingestion) and Kibana (visualization), the "ELK Stack" became the standard for log aggregation, full-text search, and analytics. Every "design a search system" interview question is fundamentally asking you to build a simplified Elasticsearch.
Read the deep dive on our blogKey Insight: The inverted index is the data structure behind search. Regular indexes map keys to values; inverted indexes map values to keys. Understanding this inversion is the difference between a mediocre and excellent search system design.
The Web Search Engine level is an exercise in inverted indexes and ranking. The Monitoring System pushes you into LSM-tree territory with 100M data points per second. Log Aggregation is Elasticsearch at scale. And the Multi-Region Database level is Spanner in miniature - global consistency with the clock problem.
The Edge & Global Scale
When latency became the final boss
The web had a physics problem: the speed of light. A user in Tokyo requesting a page from a server in Boston faces at least 200ms of round-trip latency - just from the signal traveling through fiber. Multiply that by multiple HTTP requests, TCP handshakes, and TLS negotiation, and page loads hit seconds. Leighton and Lewin (both MIT applied math professors) solved this by placing copies of content on servers distributed around the world - edge servers. A user in Tokyo gets served from a node in Tokyo. Akamai became the world's first major CDN. Danny Lewin was tragically killed on American Airlines Flight 11 on September 11, 2001. The company he co-founded now serves 30% of all web traffic. Every time you design a system with a CDN layer, you're building on Lewin's work.
Read the deep dive on our blogKey Insight: CDNs don't just cache static files anymore. Modern CDNs cache API responses, run edge functions, and even do A/B testing at the edge. When an interviewer says "optimize for latency," CDN is almost always the first layer to add.
The hardest problem in multi-region systems: two users edit the same document in different regions simultaneously. Traditional approaches use locks (kills availability) or last-writer-wins (loses data). CRDTs solved this mathematically. They're data structures designed so that concurrent updates from any number of replicas will automatically converge to the same state - without coordination, without conflicts, without data loss. A G-Counter (grow-only counter) tracks increments per replica and sums them. An OR-Set (observed-remove set) tracks additions and removals without conflicts. The math guarantees convergence because the operations are commutative, associative, and idempotent. CRDTs power collaborative editing (Google Docs, Figma), shopping carts, and like counters across regions. They're the theoretical foundation for real-time collaboration at global scale.
Read the deep dive on our blogKey Insight: CRDTs eliminate the coordination overhead of distributed consensus for certain data types. In interviews about collaborative editing or multi-region counters, CRDTs are the correct answer. They trade memory (every replica tracks its own state) for availability and convergence.
Level 42 asks you to design a CDN from scratch - origin shielding, cache invalidation, edge caching policies. Level 66 goes further into edge computing and global traffic management. These levels are where latency optimization meets the real-world physics of the speed of light.
The Reliability Imperative
When downtime stopped being acceptable
James Hamilton wrote what many consider the single best paper on operating large-scale systems. Not about algorithms or data structures - about operations. Expect failures. Automate everything. Design for zero-downtime deployments. Keep things simple enough that on-call engineers at 3 AM can understand them. Test the exact binary you ship to production. Don't build features that can't be monitored. Every rule came from a real outage, a real 3 AM page, a real customer impact. The paper reads like a checklist of hard-won scars from running services at Microsoft and later Amazon scale. It's been cited thousands of times and remains required reading at multiple tech companies.
Read the deep dive on our blogKey Insight: Operational excellence isn't glamorous, but it's what separates systems that work in demos from systems that work at scale. In interviews, showing that you think about deployment, monitoring, and on-call experience signals you've actually run things in production.
Google published their internal playbook for keeping the world's largest systems running. Site Reliability Engineering formalized concepts that transformed the industry. Error budgets: if your SLO is 99.9% uptime, you have 43.8 minutes of downtime per month to "spend" on deployments and experiments. SLIs, SLOs, and SLAs: the trinity of reliability measurement. Toil: the operational work that's manual, repetitive, automatable, and scales linearly with service growth - and the mandate to eliminate it. The 50% rule: SREs should spend at most 50% of their time on operational work, the rest on engineering to reduce future toil. These concepts gave teams a shared language for reliability. "What's your error budget?" became a question every engineering leader asks.
Read the deep dive on our blogKey Insight: Error budgets change how you think about reliability. 100% uptime is impossible and undesirable - you'd never deploy anything. The question isn't "how do we prevent all failures?" but "how much failure can we afford, and where do we spend it?"
The Monitoring System level has you ingesting 100M data points per second with alert evaluation. Feature Flags is a lesson in real-time propagation and isolation. Distributed Tracing brings all three observability pillars together. These levels teach you that building a system is only half the job - operating it is the other half.
The Full Picture
How every chapter connects to what you build in the lab.
You know the history. Now architect the future.
Every breakthrough you just read about is a design challenge waiting for you in the HLD Lab. Start building systems that stand on the shoulders of 60 years of distributed systems engineering.
Discussion0
Join the Discussion
Sign in to leave comments, reply to others, or like insights.
No comments yet. Be the first to start the thread!
Enjoyed this content?
Your support keeps us creating free resources
We put a lot of hours into researching and writing these guides. If it helped you, consider buying us a coffee. Every bit goes toward keeping ScaleDojo's content free and growing.
One-time payment via Stripe. ScaleDojo account required.