| How to structure a system design interview | chapter-03-framework-for-system-design-interviews.md | 4-step framework, time allocation, dos/don'ts, interviewer signals |
| How to scale from single server to millions of users | chapter-01-scale-from-zero-to-millions.md | Progressive scaling: LB, replication, cache, CDN, stateless tier, sharding, multi-DC |
| How to estimate QPS, storage, bandwidth, server count | chapter-02-back-of-envelope-estimation.md | DAU-to-QPS formula, latency numbers, availability nines, estimation template |
| Design a rate limiter / API throttling | chapter-04-design-rate-limiter.md | Token bucket, leaking bucket, sliding window; Redis counters; race conditions |
| How to distribute data across servers evenly | chapter-05-design-consistent-hashing.md | Hash ring, virtual nodes, affected-key redistribution, rehashing problem |
| Design a distributed key-value store | chapter-06-design-key-value-store.md | CAP theorem, quorum (N/W/R), vector clocks, gossip, Merkle trees, write/read path |
| Generate unique IDs in distributed systems | chapter-07-design-unique-id-generator.md | Snowflake (64-bit), UUID, ticket server, multi-master; bit layout tuning |
| Design a URL shortener | chapter-08-design-url-shortener.md | Base 62 vs hash+collision; 301/302 redirect; bloom filter; read-heavy caching |
| Design a web crawler | chapter-09-design-web-crawler.md | BFS traversal, URL frontier, politeness, robots.txt, dedup, content fingerprinting |
| Design a notification system | chapter-10-design-notification-system.md | Multi-channel (push/SMS/email), message queues, retry, dedup, templates, analytics |
| Design a news feed system | chapter-11-design-news-feed-system.md | Fan-out on write vs read, celebrity problem, feed publishing vs retrieval, graph DB |
| Design a chat system | chapter-12-design-chat-system.md | WebSocket, presence, service discovery, message sync, KV store for history |
| Design search autocomplete / typeahead | chapter-13-design-search-autocomplete.md | Trie data structure, top-k, data gathering vs serving, caching at browser/CDN |
| Design YouTube / video streaming | chapter-14-design-youtube.md | Video transcoding DAG, CDN delivery, blob storage, pre-signed URLs, streaming protocols |
| Design Google Drive / cloud file storage | chapter-15-design-google-drive.md | Block-level splitting, delta sync, dedup, notification service, conflict resolution, versioning |
| Which database: SQL vs NoSQL | chapter-01-scale-from-zero-to-millions.md | Decision criteria, tradeoff table |
| What is the CAP theorem | chapter-06-design-key-value-store.md | CP vs AP analysis, practical implications |
| How to handle server failures | chapter-01-scale-from-zero-to-millions.md + chapter-06-design-key-value-store.md | Failover at every tier (Ch1); gossip, hinted handoff, Merkle trees (Ch6) |
| How to choose a sharding key | chapter-01-scale-from-zero-to-millions.md + chapter-05-design-consistent-hashing.md | Celebrity/hotspot problem, resharding, virtual nodes |
| When to add a cache layer | chapter-01-scale-from-zero-to-millions.md | Read-through cache, expiration policy, cache SPOF, thundering herd |
| When to add a message queue | chapter-01-scale-from-zero-to-millions.md | Decoupling, async processing, independent scaling |
| How to handle rate-limiting race conditions | chapter-04-design-rate-limiter.md | Lua scripts, Redis sorted sets, centralized store vs sticky sessions |