Discover / System design / Reading path

System design: a reading path from components to scalable architecture

@codesherpaIntermediate → Expert
8
Books
80
Hours
4
Stages
Not yet rated

This curriculum takes an intermediate engineer from solid distributed-systems intuition to production-grade architecture thinking across four tightly sequenced stages. Each stage builds on the vocabulary and mental models of the previous one, moving from foundational principles → real-world patterns → deep internals → interview-ready synthesis.

1

Foundations & Mental Models

Intermediate

Establish the core vocabulary of distributed systems — reliability, scalability, consistency, and trade-offs — so every later concept has a firm conceptual home.

Study plan for this stage

Pace: 8–10 weeks, ~40–50 pages/day (DDIA: 5–6 weeks, ~40 pages/day; Art of Scalability: 3–4 weeks, ~50 pages/day)

Key concepts
  • Reliability, availability, and fault tolerance: how systems degrade gracefully under failure (DDIA Chapters 1–2)
  • Scalability dimensions: load parameters, performance metrics, and latency vs. throughput trade-offs (DDIA Chapter 1, Art of Scalability Chapters 1–2)
  • Data models and query languages: relational, document, graph models and their consistency implications (DDIA Chapter 2)
  • Storage engines and indexing: how databases physically organize data to balance read/write performance (DDIA Chapter 3)
  • Replication strategies: leader-based, multi-leader, and leaderless replication with consistency guarantees (DDIA Chapter 5)
  • Partitioning and sharding: distributing data across nodes and handling skew, hot spots, and rebalancing (DDIA Chapter 6)
  • Consistency models: strong, eventual, causal, and read-your-writes consistency in distributed systems (DDIA Chapter 7)
  • Scalability patterns and organizational trade-offs: vertical vs. horizontal scaling, cost, and complexity (Art of Scalability Chapters 3–5)
You should be able to answer
  • What is the difference between reliability, availability, and fault tolerance, and why can't a system guarantee all three simultaneously?
  • How do latency and throughput relate to scalability, and what load parameters matter most for your system?
  • What are the trade-offs between relational, document, and graph data models in terms of consistency and query flexibility?
  • How do leader-based replication, multi-leader replication, and leaderless replication differ in handling consistency and availability?
  • What is the difference between strong consistency, eventual consistency, and causal consistency, and when would you choose each?
  • How do partitioning strategies (range-based, hash-based, directory-based) affect hot spots, rebalancing, and query performance?
  • What are the key differences between vertical and horizontal scaling, and what organizational and technical challenges does each introduce?
Practice
  • Design a simple key-value store with replication: sketch how you'd implement leader-based replication with failover, and document the consistency guarantees you can offer.
  • Analyze a real system you use (e.g., a social media platform, payment system, or cache): identify its likely data model, replication strategy, and partitioning approach, then list the failure modes it might face.
  • Build a small distributed system simulator (in Python, Go, or your language of choice) that demonstrates the CAP theorem: show how adding a network partition forces you to choose between consistency and availability.
  • Create a load-testing scenario for a hypothetical e-commerce database: define load parameters (concurrent users, read/write ratio, query patterns), measure latency and throughput, and propose scaling strategies.
  • Compare two data models (e.g., relational vs. document) for a specific use case (e.g., user profiles, product catalogs): document the consistency, query, and scalability trade-offs of each.
  • Design a sharding strategy for a growing user table: choose a partitioning key, estimate hot spots, and plan a rebalancing approach when a new shard is added.

Next up: This stage builds the shared vocabulary and mental models—reliability, scalability, consistency, and trade-offs—that the next stage will apply to specific architectural patterns (caching, messaging, service communication) and real-world system design problems.

Designing Data-Intensive Applications
Martin Kleppmann · 2017 · 618 pp

The single most important book for this curriculum. It builds rigorous intuition around databases, replication, partitioning, consistency, and distributed transactions — the backbone of every large-scale system discussion.

The art of scalability
Martin L. Abbott · 2010 · 559 pp

Introduces the Scale Cube and organizational/process thinking around scaling, complementing Kleppmann's technical depth with architectural decision-making frameworks used by real engineering teams.

2

System Design Patterns in Practice

Intermediate

Learn the canonical building blocks — load balancers, caches, queues, CDNs, API gateways — and how they are composed into real production architectures.

Study plan for this stage

Pace: 8–10 weeks, ~40–50 pages/day (with 2–3 days per week for exercises and architecture reviews)

Key concepts
  • Load balancing strategies (round-robin, least connections, consistent hashing) and their trade-offs in distributed systems
  • Caching layers (in-memory caches like Redis/Memcached) and cache invalidation patterns (TTL, LRU, write-through, write-behind)
  • Message queues and asynchronous processing for decoupling services and handling burst traffic
  • Content Delivery Networks (CDNs) for geographic distribution and reducing latency
  • API gateways as the entry point for routing, rate limiting, authentication, and request transformation
  • Composing patterns into cohesive architectures: how load balancers, caches, queues, and CDNs work together in production
  • Scaling databases and handling data consistency in distributed systems
  • Monitoring, logging, and observability as essential components of production systems
You should be able to answer
  • What are the main load balancing algorithms, and when would you use consistent hashing versus round-robin?
  • How do different cache invalidation strategies (TTL, LRU, write-through, write-behind) affect system performance and consistency?
  • Why are message queues essential for scalability, and what problems do they solve in distributed architectures?
  • How does a CDN reduce latency and improve availability, and what are the trade-offs of using one?
  • What responsibilities does an API gateway handle, and how does it fit into a larger system architecture?
  • How would you design a scalable system that combines load balancing, caching, queues, and CDNs for a high-traffic application?
Practice
  • Design a load balancing strategy for a microservices architecture with 3–5 services; justify your choice of algorithm and explain how you'd handle sticky sessions if needed
  • Implement a simple in-memory cache (or use Redis) with TTL and LRU eviction; measure cache hit rates under different workloads
  • Set up a message queue (RabbitMQ, Kafka, or SQS) and build a producer-consumer system that decouples a web service from a background job processor
  • Analyze a real CDN configuration (e.g., CloudFront, Cloudflare) for a website you use; document cache headers, origin behavior, and edge locations
  • Build a mock API gateway that handles request routing, rate limiting (token bucket algorithm), and basic authentication; test it under load
  • Design an end-to-end architecture for a social media feed service: include load balancing, caching strategy, queue for notifications, and CDN for media; document trade-offs

Next up: This stage equips you with the practical vocabulary and mental models of production system components; the next stage will deepen your ability to reason about trade-offs, failure modes, and optimization strategies when these patterns are pushed to extreme scale.

Machine Learning System Design Interview
Ali Aminian · 2023 · 294 pp

Provides concrete, worked examples of designing real systems (URL shorteners, news feeds, rate limiters) that make abstract patterns tangible; read first in this stage to anchor the vocabulary.

Web scalability for startup engineers
Artur Ejsmont · 2015 · 396 pp

Bridges theory and practice by walking through caching strategies, database scaling, and asynchronous processing in a pragmatic, engineer-to-engineer voice that reinforces the patterns from the Xu books.

3

Deep Internals — Databases, Queues & Reliability

Expert

Understand how the components you've been using actually work under the hood — storage engines, consensus protocols, message brokers, and failure modes — enabling principled trade-off decisions.

Study plan for this stage

Pace: 8–10 weeks, ~40–50 pages/day (alternating between Database Internals and Release It! every 2–3 weeks to balance theory with practical patterns)

Key concepts
  • Storage engine architecture: B-trees, LSM trees, and how data is physically organized on disk for read/write performance trade-offs
  • Consensus protocols (Raft, Paxos) and their role in distributed databases for achieving consistency and fault tolerance
  • Write-ahead logging (WAL), crash recovery, and durability guarantees (ACID properties) in practice
  • Message broker internals: partitioning, replication, ordering guarantees, and exactly-once semantics
  • Failure modes and cascading failures: timeouts, resource exhaustion, slow clients, and circuit breakers
  • Stability patterns: bulkheads, timeouts, retries with backoff, and graceful degradation to prevent system collapse
  • Observability and instrumentation: logging, metrics, and tracing to detect and diagnose failures in production
  • Trade-offs between consistency, availability, and partition tolerance (CAP theorem) and how they manifest in real systems
You should be able to answer
  • How do B-trees and LSM trees differ in their write and read performance characteristics, and when would you choose one over the other?
  • What is write-ahead logging and why is it essential for crash recovery and durability?
  • Explain how a consensus protocol like Raft ensures that a distributed database maintains consistency across replicas even when nodes fail.
  • What are the key differences between at-most-once, at-least-once, and exactly-once message delivery semantics, and what are the trade-offs?
  • Describe a cascading failure scenario: how can a slow database client cause an entire system to collapse, and what patterns prevent this?
  • How do circuit breakers, bulkheads, and timeouts work together to improve system stability and prevent resource exhaustion?
  • What instrumentation (logging, metrics, tracing) would you add to a distributed system to detect and diagnose failures in production?
Practice
  • Read Database Internals chapters 1–4 on storage engines; sketch out the on-disk layout of a B-tree and an LSM tree, then write pseudocode for a point lookup and a range scan in each.
  • Implement a simple write-ahead log (WAL) in your language of choice: write records, simulate a crash, and verify recovery restores the correct state.
  • Study a real consensus protocol (Raft is recommended in Database Internals); trace through a leader election and log replication scenario step-by-step on paper.
  • Deploy a message broker (Kafka or RabbitMQ) locally; produce and consume messages with different delivery guarantees; observe partition behavior under network delays.
  • Read Release It! chapters on stability patterns; design a failure scenario (e.g., slow downstream service) and implement circuit breakers and bulkheads in a toy service.
  • Instrument a multi-service application with structured logging, metrics (latency, error rates), and distributed tracing; simulate a failure and verify you can diagnose the root cause.
  • Conduct a chaos engineering exercise: kill a database replica mid-transaction, introduce network latency, or exhaust a connection pool; observe and document system behavior.

Next up: This stage equips you with the mental models and failure-handling patterns needed to design resilient, observable systems; the next stage will apply these principles to building end-to-end architectures that scale and degrade gracefully under real-world constraints.

Database Internals
Alex Petrov · 2019 · 280 pp

Dives into B-trees, LSM trees, write-ahead logs, and distributed consensus (Raft, Paxos) — the machinery inside every database you'll choose or design around. Read after Kleppmann to go one level deeper.

Release It!
Michael T. Nygard · 2007 · 350 pp

Teaches stability patterns (circuit breakers, bulkheads, timeouts, back-pressure) through post-mortem-style case studies, making reliability a first-class design concern rather than an afterthought.

4

Architecture Thinking & Synthesis

Expert

Synthesize everything into coherent, defensible architectural decisions — evaluating trade-offs, communicating designs to stakeholders, and thinking like a staff-level or principal engineer.

Study plan for this stage

Pace: 8–10 weeks, ~40–50 pages/day (mix of dense architecture theory and practical microservices patterns)

Key concepts
  • Architectural thinking: defining fitness functions, making explicit trade-offs, and evaluating architectural decisions against business and technical constraints
  • The four dimensions of software architecture (structure, architecture characteristics, architecture decisions, design principles) and how they interact
  • Monolithic vs. distributed architecture patterns: when each is appropriate and the hidden costs of distribution
  • Microservices decomposition strategies: domain-driven design, service boundaries, and avoiding the distributed monolith anti-pattern
  • Architecture characteristics (scalability, resilience, maintainability, security) and how to measure and communicate them to stakeholders
  • Deployment, monitoring, and operational complexity: the true cost of microservices and when the trade-off is worth it
  • Communication and stakeholder alignment: presenting architectural decisions with clear rationale, trade-offs, and risk mitigation
You should be able to answer
  • What are the four dimensions of software architecture, and how do they inform an architectural decision?
  • How would you evaluate whether a monolithic or microservices architecture is the right choice for a given business context, and what are the hidden costs of each?
  • What is a fitness function in architecture, and how would you define one for a system you're designing?
  • How do you identify service boundaries in a microservices system, and what happens when boundaries are poorly chosen?
  • What are the key operational and organizational challenges of microservices, and how do you mitigate them?
  • How would you present an architectural decision to a non-technical stakeholder, including trade-offs and risks?
Practice
  • Read and annotate Part I of 'Fundamentals' (chapters 1–5) focusing on the four dimensions; create a one-page summary of how each dimension applies to a system you know well
  • Work through a real or hypothetical system: define 3–5 fitness functions for it, then evaluate a monolithic vs. microservices approach against those functions
  • Map a moderately complex domain (e.g., an e-commerce platform or SaaS product) using domain-driven design principles; identify candidate service boundaries and justify each boundary
  • Create a detailed architectural decision record (ADR) for a significant architectural choice: include problem statement, options considered, trade-offs, and rationale
  • Design a microservices deployment and monitoring strategy for a system with 8–12 services; document operational complexity, failure modes, and mitigation strategies
  • Conduct a mock architecture review: present a design to peers, defend trade-offs, and respond to critical questions about scalability, resilience, and maintainability

Next up: This stage equips you with the frameworks and communication skills to make and defend architectural decisions at scale; the next stage will likely focus on specialized domains (event-driven systems, data-intensive architectures, or organizational scaling) where you apply these principles to specific technical challenges.

Fundamentals of Software Architecture
Mark Richards · 2020 · 432 pp

Provides a structured vocabulary for architecture styles (event-driven, microservices, layered, space-based) and teaches how to evaluate and communicate trade-offs — the meta-skill that ties all prior learning together.

Building Microservices
Sam Newman · 2015 · 265 pp

The definitive guide to decomposing large systems into services, covering service boundaries, inter-service communication, data ownership, and operational concerns — the capstone for real-world large-scale design.

Discussion

Keep reading

Paths that share books, cover the same subject, or open a related topic.

Shares 3 books

Learn cloud computing: from servers to serverless

Beginner9books87 hrs4 stages
More on Computer science fundamentals

Computer science fundamentals: the best books to understand how computing works

Beginner9books95 hrs5 stages
More on Deep learning

Deep learning: a reading path from neural networks to modern architectures

Intermediate8books63 hrs5 stages
More on Ethical hacking & penetration testing

Ethical hacking and penetration testing: an ordered reading path into offensive security

Beginner9books78 hrs4 stages