# donnemartin/system-design-primer

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/donnemartin-system-design-primer).**

353,387 stars · 56,748 forks · Python · NOASSERTION

## Links

- GitHub: https://github.com/donnemartin/system-design-primer
- awesome-repositories: https://awesome-repositories.com/repository/donnemartin-system-design-primer.md

## Topics

`design` `design-patterns` `design-system` `development` `interview` `interview-practice` `interview-questions` `programming` `python` `system` `web` `web-application` `webapp`

## Description

This project is a comprehensive educational resource and study guide focused on distributed systems architecture and backend infrastructure design. It provides a structured curriculum for mastering the principles of scalability, reliability, and performance required to design complex software systems.

The repository distinguishes itself by offering a methodical approach to technical interview preparation, incorporating design patterns, architectural trade-offs, and spaced repetition tools to help users retain complex concepts. It emphasizes constraint-driven analysis, teaching users how to evaluate competing requirements like latency, consistency, and availability when drafting architectural designs.

The content covers a broad spectrum of system design capabilities, including strategies for database scaling, traffic management, and infrastructure optimization. It details techniques for horizontal scaling, multi-layered caching, asynchronous communication, and service discovery, while also providing frameworks for performing resource estimations and capacity planning.

The documentation is organized as a study guide, offering a systematic path through the fundamentals of backend engineering and large-scale system design.

## Tags

### Education & Learning Resources

- [System Design Roadmaps](https://awesome-repositories.com/f/education-learning-resources/curricula-instructional-design/curricula-roadmaps/systems-infrastructure-operations/system-design-architecture-roadmaps/system-design-roadmaps.md) — Serves as a structured guide for learning architectural patterns, trade-offs, and design principles for scalable distributed systems.
- [Architectural Trade-off Analyses](https://awesome-repositories.com/f/education-learning-resources/architectural-trade-off-analyses.md) — Teaches critical evaluation of architectural trade-offs and constraints in distributed system design.
- [Technical Interview Preparation](https://awesome-repositories.com/f/education-learning-resources/professional-development-career/career-development/career-advancement-resources/technical-interview-preparation.md) — Offers structured study materials and methodologies for preparing for technical interviews and hiring assessments.
- [System Design Concepts](https://awesome-repositories.com/f/education-learning-resources/system-design-concepts.md) — Offers a structured curriculum and spaced repetition tools for mastering system design principles and interview preparation. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Technical Interview Prep](https://awesome-repositories.com/f/education-learning-resources/technical-interview-prep.md) — Includes resources and guides covering common technical interview questions and scenario-based assessments for backend engineering.
- [System Design Interview Guides](https://awesome-repositories.com/f/education-learning-resources/curricula-instructional-design/curricula-roadmaps/systems-infrastructure-operations/system-design-architecture-roadmaps/system-design-interview-guides.md) — Offers guides for defining functional requirements, system constraints, and core assumptions during technical interviews. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Requirement Clarification Techniques](https://awesome-repositories.com/f/education-learning-resources/curricula-instructional-design/curricula-roadmaps/systems-infrastructure-operations/system-design-architecture-roadmaps/system-design-case-studies/requirement-clarification-techniques.md) — Provides methods for scoping system design problems through targeted questioning and requirement gathering. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))

### Software Engineering & Architecture

- [Distributed Systems Architecture](https://awesome-repositories.com/f/software-engineering-architecture/distributed-systems-architecture.md) — Provides a core educational curriculum on the principles and patterns of distributed systems.
- [Distributed Systems Architectures](https://awesome-repositories.com/f/software-engineering-architecture/distributed-systems-architectures.md) — Explores design principles and patterns for building robust, asynchronous, and network-based distributed applications.
- [System Design Concepts](https://awesome-repositories.com/f/software-engineering-architecture/system-design-concepts.md) — Provides educational resources and memory aids for recalling complex architectural patterns and design concepts. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Availability Modeling](https://awesome-repositories.com/f/software-engineering-architecture/availability-modeling.md) — Provides theoretical frameworks for calculating and optimizing system availability based on component dependency structures. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [High Availability Patterns](https://awesome-repositories.com/f/software-engineering-architecture/high-availability-patterns.md) — Teaches architectural strategies for redundancy, clustering, and system availability to ensure service continuity. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Message Queuing Architectures](https://awesome-repositories.com/f/software-engineering-architecture/message-queuing-architectures.md) — Provides architectural patterns for decoupling system components through asynchronous message routing.
- [Service Discovery Registries](https://awesome-repositories.com/f/software-engineering-architecture/service-discovery-registries.md) — Maintains dynamic registries for service discovery and health monitoring in distributed environments.
- [System Architecture Designs](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/backend-enterprise-systems/system-architecture-designs.md) — Covers architectural principles and design patterns for planning and building reliable, scalable, and high-performance software systems.
- [Asynchronous Messaging](https://awesome-repositories.com/f/software-engineering-architecture/asynchronous-messaging.md) — Explains architectural patterns for handling background tasks without blocking the main execution thread. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/sales_rank/README.md))
- [Asynchronous Task Processing](https://awesome-repositories.com/f/software-engineering-architecture/asynchronous-task-processing.md) — Explains architectural patterns for offloading non-critical operations to background threads to maintain system responsiveness. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
- [Data Consistency Models](https://awesome-repositories.com/f/software-engineering-architecture/data-consistency-models.md) — Covers strategies for managing state, consistency, and data synchronization in distributed architectures. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Microservices](https://awesome-repositories.com/f/software-engineering-architecture/microservices.md) — Offers educational resources on designing and implementing microservice architectures. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))
- [Microservices Design Patterns](https://awesome-repositories.com/f/software-engineering-architecture/microservices-design-patterns.md) — Provides educational content on decomposing applications and managing microservice communication. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Service Locators](https://awesome-repositories.com/f/software-engineering-architecture/service-locators.md) — Implements service discovery patterns to allow components to locate and connect with each other automatically. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))
- [Cache Aside Patterns](https://awesome-repositories.com/f/software-engineering-architecture/architectural-design-patterns/design-patterns/cache-aside-patterns.md) — Explains the cache-aside pattern for managing data consistency between caches and databases. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
- [Asynchronous Task Queues](https://awesome-repositories.com/f/software-engineering-architecture/asynchronous-task-queues.md) — Covers the architectural pattern of using message queues to decouple system components and handle background tasks. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))
- [Decoupled Logic Layers](https://awesome-repositories.com/f/software-engineering-architecture/decoupled-logic-layers.md) — Discusses architectural patterns that separate backend data operations from the presentation layer. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Centralization Patterns](https://awesome-repositories.com/f/software-engineering-architecture/system-internals/centralization-patterns.md) — Explains architectural strategies for unifying service interfaces and security filtering. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))

### Data & Databases

- [Data Partitioning Strategies](https://awesome-repositories.com/f/data-databases/data-partitioning-strategies.md) — Explains strategies for partitioning large datasets across database nodes to improve scalability.
- [Database Scaling Strategies](https://awesome-repositories.com/f/data-databases/database-scaling-strategies.md) — Teaches techniques for distributing data and workload across multiple nodes to enhance system throughput and fault tolerance. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md))
- [Application Caching](https://awesome-repositories.com/f/data-databases/data-engineering-infrastructure/data-persistence-storage/data-storage/application-caching.md) — Details mechanisms for storing frequently accessed data in memory to reduce latency and backend processing requirements. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Data Replication](https://awesome-repositories.com/f/data-databases/data-replication.md) — Teaches mechanisms for synchronizing data across distributed database nodes or clusters to ensure consistency and availability. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [NoSQL Data Modeling](https://awesome-repositories.com/f/data-databases/nosql-data-modeling.md) — Teaches the use of non-relational databases to handle flexible data models, favoring high availability and horizontal scalability. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Unique Identifier Generators](https://awesome-repositories.com/f/data-databases/data-management/unique-identifier-generators.md) — Provides utilities for creating globally unique identifiers to ensure data consistency across distributed systems. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [Database Query Optimizations](https://awesome-repositories.com/f/data-databases/database-management-systems/database-systems-management/performance-optimization-tools/database-query-optimizations.md) — Teaches techniques and resources for improving the efficiency of database queries. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Search and Indexing](https://awesome-repositories.com/f/data-databases/search-indexing-technologies/search-indexing/search-and-indexing.md) — Covers integrated systems that combine data indexing capabilities with search functionality to enable fast information discovery. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md))
- [Uniqueness Enforcement](https://awesome-repositories.com/f/data-databases/data-management/unique-identifier-generators/uniqueness-enforcement.md) — Covers mechanisms for ensuring data integrity and preventing duplicate entries in distributed storage systems. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [Batch Processing Utilities](https://awesome-repositories.com/f/data-databases/data-processing-pipelines/batch-processing-systems/batch-processing-utilities.md) — Provides helper libraries and scripts that assist in the scheduling, monitoring, and management of batch processing jobs. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [Data Sharding](https://awesome-repositories.com/f/data-databases/data-sharding.md) — Covers data sharding strategies for distributing large datasets across physical servers to overcome capacity limits. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))
- [Expired Record Purging](https://awesome-repositories.com/f/data-databases/database-record-management/expired-record-purging.md) — Explains automated processes for removing outdated database entries based on timestamp thresholds. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [Horizontal Database Scaling](https://awesome-repositories.com/f/data-databases/horizontal-database-scaling.md) — Details horizontal scaling patterns like sharding and replication for database systems. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/query_cache/README.md))
- [Object Storage Retrieval](https://awesome-repositories.com/f/data-databases/object-storage-retrieval.md) — Teaches how to fetch associated data from an object store after verifying the existence of a requested identifier in the database. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [Read Replicas](https://awesome-repositories.com/f/data-databases/read-replicas.md) — Describes the use of secondary database replicas to distribute read workloads. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md))

### DevOps & Infrastructure

- [Multi-Layer Strategies](https://awesome-repositories.com/f/devops-infrastructure/caching-layers/multi-layer-strategies.md) — Implements multi-layered caching strategies to optimize data access and reduce backend load.
- [High Availability Systems](https://awesome-repositories.com/f/devops-infrastructure/high-availability-systems.md) — Covers architectural patterns and configurations designed to ensure continuous service availability and fault tolerance. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Horizontal Scaling Tools](https://awesome-repositories.com/f/devops-infrastructure/horizontal-scaling-tools.md) — Details patterns for scaling infrastructure horizontally by adding nodes to handle increased workloads.
- [Capacity Planning](https://awesome-repositories.com/f/devops-infrastructure/devops/operational-reliability/capacity-planning.md) — Provides tools and methodologies for analyzing and forecasting resource requirements to ensure systems meet future demand.
- [Service Proxies](https://awesome-repositories.com/f/devops-infrastructure/service-proxies.md) — Explains tools for intercepting and routing network traffic between internal service components. ([source](https://github.com/donnemartin/system-design-primer#readme))
- [Traffic Management](https://awesome-repositories.com/f/devops-infrastructure/traffic-management.md) — Covers systems for controlling request throughput and connection concurrency to prevent bottlenecks. ([source](https://github.com/donnemartin/system-design-primer#readme))

### Part of an Awesome List

- [Developer Learning Resources](https://awesome-repositories.com/f/awesome-lists/devtools/developer-learning-resources.md) — Comprehensive guide for learning system design and architecture.
- [General Architecture Patterns](https://awesome-repositories.com/f/awesome-lists/devtools/general-architecture-patterns.md) — Comprehensive guide to designing large-scale systems.
- [Software Architecture](https://awesome-repositories.com/f/awesome-lists/devtools/software-architecture.md) — Extensive guide for learning how to design large-scale distributed systems.
- [System Architecture](https://awesome-repositories.com/f/awesome-lists/devtools/system-architecture.md) — Extensive collection of resources for learning system design.
- [System Design](https://awesome-repositories.com/f/awesome-lists/devtools/system-design.md) — Comprehensive guide for mastering system design interview concepts.
- [System Design and Architecture](https://awesome-repositories.com/f/awesome-lists/devtools/system-design-and-architecture.md) — Comprehensive guide for learning and practicing system design.
- [Educational Decks](https://awesome-repositories.com/f/awesome-lists/learning/educational-decks.md) — System design interview preparation materials including flashcards.
- [Educational Resources](https://awesome-repositories.com/f/awesome-lists/learning/educational-resources.md) — Comprehensive guide for learning large-scale system design.
- [General Programming Resources](https://awesome-repositories.com/f/awesome-lists/learning/general-programming-resources.md) — Guide for learning large-scale system design.
- [Learning and Reference](https://awesome-repositories.com/f/awesome-lists/learning/learning-and-reference.md) — System design interview preparation.
- [Learning Roadmaps](https://awesome-repositories.com/f/awesome-lists/learning/learning-roadmaps.md) — Extensive resources for learning large-scale system design and interview preparation.
- [Programming Foundations](https://awesome-repositories.com/f/awesome-lists/learning/programming-foundations.md) — Guide for learning how to design large-scale systems.
- [System Design And Architecture](https://awesome-repositories.com/f/awesome-lists/learning/system-design-and-architecture.md) — Comprehensive guide for mastering system design interview concepts.
- [System Design Foundations](https://awesome-repositories.com/f/awesome-lists/learning/system-design-foundations.md) — Comprehensive guide for learning system design and interview preparation.
- [System Design Resources](https://awesome-repositories.com/f/awesome-lists/learning/system-design-resources.md) — Extensive guide for learning and preparing for system design interviews.
- [More to explore](https://awesome-repositories.com/f/awesome-lists/more/more-to-explore.md) — Comprehensive guide for learning system design.

### Networking & Communication

- [Content Delivery Networks](https://awesome-repositories.com/f/networking-communication/content-delivery-networks.md) — Covers the use of global content delivery networks to reduce latency and offload application servers.
- [Load Balancers](https://awesome-repositories.com/f/networking-communication/load-balancers.md) — Explains systems that distribute network traffic across multiple servers to optimize resource use. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
- [Network Routing and Traffic Management](https://awesome-repositories.com/f/networking-communication/network-infrastructure-routing/network-routing-traffic-management.md) — Details mechanisms for directing data packets and balancing traffic loads across network paths. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))
- [Communication Protocols and Standards](https://awesome-repositories.com/f/networking-communication/communication-protocols-architectures/communication-protocols-standards.md) — Defines consistent communication protocols to ensure reliable interaction between distributed system components. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md))
- [Fan-Out Patterns](https://awesome-repositories.com/f/networking-communication/content-delivery-networks/fan-out-patterns.md) — Teaches architectural patterns for distributing content updates to followers asynchronously in real-time. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md))
- [Decoupled Communication Services](https://awesome-repositories.com/f/networking-communication/decoupled-communication-services.md) — Manages internal service communication to ensure scalable and efficient data flow. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/query_cache/README.md))
- [Remote Procedure Call Frameworks](https://awesome-repositories.com/f/networking-communication/distributed-systems-p2p/distributed-computing/remote-procedure-call-frameworks.md) — Facilitates reliable data transfer between internal components using remote procedure call frameworks. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md))
- [Remote Procedure Calls](https://awesome-repositories.com/f/networking-communication/remote-procedure-calls.md) — Enables low-latency interaction between services by invoking remote functions as local methods. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
- [API Clients](https://awesome-repositories.com/f/networking-communication/api-clients.md) — Provides tools and patterns for connecting external clients to services via standardized web protocols. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md))
- [RESTful Data Services](https://awesome-repositories.com/f/networking-communication/api-integration-frameworks/api-management-integration/application-programming-interfaces/restful-data-services.md) — Serves application data through structured RESTful endpoints for predictable client access. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/sales_rank/README.md))
- [Connection Pooling](https://awesome-repositories.com/f/networking-communication/connection-pooling.md) — Optimizes throughput by maintaining pools of reusable network connections to external resources. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/web_crawler/README.md))

### System Administration & Monitoring

- [Estimation Techniques](https://awesome-repositories.com/f/system-administration-monitoring/resource-estimation/estimation-techniques.md) — Details methodologies for performing back-of-the-envelope calculations for capacity planning. ([source](https://github.com/donnemartin/system-design-primer/blob/master/README.md))

### Testing & Quality Assurance

- [Performance Testing](https://awesome-repositories.com/f/testing-quality-assurance/performance-testing-analysis/performance-testing.md) — Covers techniques for subjecting software to high-volume traffic to evaluate stability and responsiveness under load. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/web_crawler/README.md))

### Scientific & Mathematical Computing

- [Shortest Path Algorithms](https://awesome-repositories.com/f/scientific-mathematical-computing/numerical-mathematical-foundations/algorithms-and-complexity/algorithms/graph-processing/shortest-path-algorithms.md) — Explains algorithms used to calculate the most efficient path between nodes in a graph. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))

### User Interface & Experience

- [Public API Definitions](https://awesome-repositories.com/f/user-interface-experience/component-utilities/ui-frameworks/component-apis/interface-configuration-definitions/component-interfaces/exposed-component-apis/public-api-definitions.md) — Defines standardized public interfaces for secure and predictable external access to system resources. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/twitter/README.md))

### Web Development

- [REST API Services](https://awesome-repositories.com/f/web-development/rest-api-services.md) — Provides standardized web service endpoints for external client access. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
- [REST APIs](https://awesome-repositories.com/f/web-development/rest-apis.md) — Exposes system resources through standardized RESTful API endpoints for consistent data interaction. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/social_graph/README.md))
- [Static Asset Serving](https://awesome-repositories.com/f/web-development/web-infrastructure-deployment/web-server-capabilities/static-asset-serving.md) — Covers web server capabilities optimized for delivering static files directly to clients. ([source](https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/mint/README.md))
