A comprehensive guide to system design interviews — frameworks, core concepts, and technologies you need to know.
Ask about functional requirements (what the system should do) and non-functional requirements (scale, latency, availability, consistency). Nail down the scope before designing anything.
Identify the main data entities (e.g., User, Post, Order) and their relationships. This grounds your design in concrete data.
Define the key API endpoints or interfaces. This clarifies what the system exposes and how clients interact with it.
Sketch the main components: clients, load balancers, application servers, databases, caches, message queues. Show how data flows through the system.
Pick 1-2 components to zoom into based on interviewer interest. Discuss database schema, caching strategy, or how a specific service works internally.
Every design decision has trade-offs. Discuss consistency vs availability, SQL vs NoSQL, synchronous vs asynchronous processing, and why you chose what you chose.
How systems handle increasing load by scaling horizontally or vertically, and how load balancers distribute traffic.
Storing frequently accessed data in fast storage to reduce latency and database load.
Choosing the right database, designing schemas, and scaling data storage.
A technique for distributing data across nodes that minimizes redistribution when nodes are added or removed.
A distributed system can only guarantee two of three: Consistency, Availability, and Partition Tolerance.
Decoupling services using asynchronous message passing for reliability and scalability.
Designing clean, scalable interfaces for communication between services and clients.
Controlling the rate of requests to protect services from abuse and overload.
Architectural patterns for structuring applications as single units or collections of small services.
Core networking concepts that underpin all distributed systems.
Different storage types and when to use each for different data access patterns.
Algorithms that allow distributed systems to agree on a single value, even in the presence of failures.
In-memory data store used for caching, session management, rate limiting, and pub/sub messaging.
Distributed event streaming platform for building real-time data pipelines and streaming applications.
Powerful open-source relational database with strong ACID compliance, JSON support, and extensibility.
Document-oriented NoSQL database designed for flexible schemas and horizontal scaling.
Wide-column / key-value stores designed for high write throughput and horizontal scalability across regions.
Distributed search and analytics engine for full-text search, log analysis, and real-time indexing.
High-performance web server, reverse proxy, and load balancer used to handle concurrent connections efficiently.
Containerization and orchestration tools for packaging, deploying, and managing applications at scale.
Centralized service for distributed coordination, configuration management, and service discovery.
Content delivery networks that cache and serve content from edge locations close to users for low latency.