The free, open companion to the original Grokking the System Design Interview course by DesignGurus.io, created by Arslan Ahmad and the original Grokking team.
A pattern-based guide to system design interviews. Learn the building blocks once, then apply them to any design question. This repository is a free index, summary, and cheat-sheet collection. For interactive diagrams, video lessons, and worked solutions, see the full course.
- What is Grokking System Design?
- How to use this repo
- The interview framework
- Core building blocks (patterns)
- System design questions
- Company-specific interviews
- Distributed systems deep dives
- Cheat sheets
- Study roadmaps
- Glossary
- Recommended reading
- Newsletter
- Contributing
"Grok" means to understand something so completely that it becomes intuitive. Grokking System Design is the pattern-based approach to system design interviews: instead of memorizing answers to a fixed list of questions, you learn a small set of reusable building blocks (caching, sharding, replication, consistency models, messaging, and more) that appear again and again across very different systems. Once you know the patterns, any new design problem feels familiar.
This methodology was created by Arslan Ahmad. The original, fully updated course lives at DesignGurus.io.
- Read the interview framework so you have a repeatable structure for any question.
- Work through the core patterns until each one is intuitive.
- Practice with the question catalog, applying the patterns.
- Follow a study roadmap to stay on track.
- Go deeper in the full course when you want interactive lessons and worked solutions.
A repeatable structure beats memorized answers. The short version:
- Clarify requirements and scope (functional and non-functional).
- Estimate scale (traffic, storage, bandwidth).
- Define the API.
- Design the data model.
- Sketch the high-level architecture.
- Deep dive on one or two components.
- Identify bottlenecks and trade-offs.
Full breakdown with timings: cheat-sheets/interview-framework.md.
| Pattern | What it solves | Cheat sheet | Learn in depth |
|---|---|---|---|
| Caching | Read latency and load on the data store | caching.md | Course |
| Load balancing | Distributing traffic across servers | load-balancing.md | Course |
| Sharding and partitioning | Scaling data beyond one machine | sharding-partitioning.md | Course |
| Replication | Availability and read scaling | replication.md | Course |
| Consistency models | Correctness under concurrency | consistency-models.md | Course |
| Consistent hashing | Even distribution with minimal reshuffling | consistent-hashing.md | Course |
| Message queues | Decoupling and async processing | message-queues.md | Course |
| Rate limiting | Protecting services from overload | rate-limiting.md | Course |
| CAP theorem | Reasoning about trade-offs under partitions | cap-theorem.md | Course |
| CDN | Serving static content close to users | cdn.md | Course |
| Database indexing | Fast lookups | database-indexing.md | Course |
| Bloom filters | Cheap "definitely not present" checks | bloom-filters.md | Course |
These are the 12 most essential building blocks. All 24 patterns live in patterns/, including API gateways, quorum, leader election, idempotency, write-ahead logs, circuit breakers, and more. To add a new pattern, copy patterns/_template.md.
Forty-plus walkthroughs at the approach-and-trade-offs level, grouped by difficulty. Self-test with the practice question bank, and see full worked solutions in the course.
- Design TinyURL
- Design a rate limiter
- Design a unique ID generator
- Design a distributed cache
- Design an API gateway
- Design typeahead / autocomplete
- Design a notification system
- Design a YouTube likes counter
- Design Amazon shopping cart
- Design Instagram
- Design Twitter
- Design WhatsApp
- Design Reddit
- Design YouTube
- Design Discord
- Design Amazon S3
- Design Google Calendar
- Design Gmail
- Design Airbnb
- Design a metrics and monitoring system
- Design a recommendation system
- Design People You May Know
- Design LinkedIn connections
- Design an ad click aggregator
- Design a live comment streaming service
- Design a code deployment system
- Design Google News
- Design a code judging system
- Design a distributed job scheduler
- Design Uber
- Design Netflix
- Design Dropbox
- Design a web crawler
- Design a payment system
- Design a flash sale system
- Design a reminder and alert system
- Design Google Search
- Design Google Docs
- Design a collaborative whiteboard
- Design a stock exchange
- Design Google Ads
- Design ChatGPT
- Design Amazon Lambda
The fastest-growing question category, asked heavily by AI labs and increasingly by big tech:
- Design a RAG pipeline
- Design semantic search (vector search)
- Design an LLM inference platform
- Design a model evaluation pipeline
- Design an AI agent orchestration system
- Design a GPU cluster scheduler
See the full catalog in questions/. To add a new question, copy questions/_template.md.
The same question plays differently at different companies: a rate limiter at Stripe is an API-contract exercise, at xAI it turns into implementation, and at Bloomberg it scales to Terminal fan-out. The company index summarizes how 58 companies run their system design rounds: the signature questions candidates report, what interviewers probe, and which patterns to review for each.
Includes Stripe, OpenAI, Bloomberg, Databricks, Discord, Palantir, Robinhood, Figma, Citadel, LinkedIn, and 48 more, grouped by sector.
Case studies of landmark systems, the "how does X work" questions common in senior interviews: Dynamo, Cassandra, BigTable, Kafka, Chubby, GFS, HDFS, Spanner, Raft, MapReduce, ZooKeeper, Memcached at Facebook, Aurora, and DynamoDB. See deep-dives/ for all fourteen, with a suggested reading order.
- System design in one page: the whole framework, patterns, and numbers, condensed into one screenshot.
- Back-of-the-envelope estimation: the latency and capacity numbers worth memorizing.
- Interview framework: the step-by-step structure with timings.
- Non-functional requirements: scalability, availability, latency, consistency, and the rest.
- Trade-off decision guides: the common "X vs Y" decisions and how to choose.
- SQL vs NoSQL: how to choose, and how to justify it in an interview.
- PostgreSQL vs DynamoDB vs Cassandra: the concrete version of the SQL vs NoSQL decision.
- Kafka vs RabbitMQ vs SQS: log vs broker vs managed queue, and the one-question shortcut.
- Redis vs Memcached: data-structure server vs pure cache.
- REST vs gRPC vs GraphQL: pick the API style per boundary, not per fashion.
- Core components reference: the building blocks and when to use each.
- Common mistakes and anti-patterns: what sinks interviews, and how to avoid it.
- Interview communication tips: how to come across as a senior candidate.
- Senior vs staff expectations: how the same question is graded differently by level.
- A mock interview, annotated: two candidates, one question, and where the hire/no-hire line actually sits.
- 1-week crash plan: when your interview is days away.
- 2-week sprint: a focused sprint before an interview.
- 6-week study plan: build depth from a baseline.
- Pick by timeline in roadmaps/.
New to the vocabulary? Start with the glossary.
Free, in-depth articles that pair well with this repo.
Start here
- 25 Fundamental System Design Concepts
- System Design Interview Guide (2026): Framework and How to Prepare
- The Ultimate System Design Cheat Sheet
- 185+ System Design Guides: The Interview Library
Core concepts
- Back-of-the-Envelope Estimation
- Scalability in System Design
- High Availability in System Design
- CAP Theorem vs PACELC
- Consistency Patterns in Distributed Systems
Architecture and APIs
This repo gives you the map. The course gives you the territory: interactive diagrams, video lessons, worked solutions, and practice.
- Course: Grokking the System Design Interview
- Patterns course: System Design Patterns: From Fundamentals to Real Systems, built around the same building blocks as patterns/
- Practice live: Mock interviews with ex-FAANG engineers
- More reading: DesignGurus blog
System design and interview tips, straight to your inbox.
Contributions are welcome. See CONTRIBUTING.md. If this repo helps you, please star it so more engineers can find it.
Content is licensed under Creative Commons Attribution 4.0 (CC BY 4.0). You may share and adapt with attribution.
Maintained by DesignGurus.io, the home of the original Grokking the System Design Interview course by Arslan Ahmad.