Vibe Engines
YouTube
LEARNING PATH · Systems & Backend

System Design in 30 Days

For engineers who want to design real systems, not memorize diagrams.

Intermediate ~7h19 lessons21 steps

A structured month through the canonical system designs — from a URL shortener to Uber — each built on the fundamentals it needs: capacity math, caching, partitioning, consistency. Design the systems, and implement one primitive underneath them, the token bucket.

  • Do back-of-the-envelope capacity math before you design
  • Sketch the canonical architectures from memory
  • Reason about caching, partitioning and consistency tradeoffs
  • Walk a whiteboard interview end to end
0 / 19 done · 0%
  1. HandbookNext up

    The System Design Fundamentals Handbook

    The vocabulary: latency, throughput, consistency, the napkin math.

  2. ToolTool · optional

    Interactive Capacity Estimator

    Do the back-of-the-envelope: QPS, storage, bandwidth.

  3. Handbook

    CAP Theorem & Consistency Models

    The tradeoff that shapes every distributed design.

  4. System Design

    Design a URL Shortener

    Warm up: reads, hashing, and a KV store.

  5. System Design

    Design a Rate Limiter

    Protect the system: token bucket at scale.

  6. Challenge

    Token Bucket Rate Limiter

    Implement the limiter you just designed.

  7. System Design

    Design a Key-Value Store

    The storage layer everything else sits on.

  8. Handbook

    The Caching Patterns Handbook

    Where and how to cache without lying to users.

  9. System Design

    Design a Distributed Cache

    Cache at scale: sharding, eviction, hot keys.

  10. ToolTool · optional

    Consistent Hashing Visualizer

    Feel how consistent hashing spreads and rebalances keys.

  11. System Design

    Design a News Feed

    Fan-out on write vs read — the feed problem.

  12. System Design

    Design Twitter

    Timelines at Twitter scale.

  13. System Design

    Design WhatsApp

    Real-time messaging: delivery, presence, ordering.

  14. System Design

    Design a Notification System

    Push at scale without melting downstream.

  15. Handbook

    Partitioning, Sharding & Replication

    Split the data, keep the copies honest.

  16. System Design

    Design a Message Queue

    The async backbone: queues, offsets, delivery.

  17. System Design

    Design a Search Engine

    Inverted index, ranking, and query serving.

  18. System Design

    Design YouTube

    Storage, CDN and transcoding at video scale.

  19. System Design

    Design Uber

    Geospatial matching in real time.

  20. System Design

    Design a Payment System

    Money: idempotency, ledgers, exactly-once.

  21. Handbook

    50 System Design Interview Questions

    Package it all for the whiteboard.

How this path works

This path is for engineers who want to design a system from a blank page, for a design review at work or for an interview loop, and who have found that memorized reference diagrams fall apart at the first follow-up question. It assumes you have built services and used a database. One focused hour a day for a month is the intended pace.

Designing well is a chain of decisions under constraints: estimate the load, pick a storage model, decide where to cache, split the data, choose what can be eventually consistent, and say what breaks first. Interviews and design reviews test that same chain, usually by changing one constraint and watching how you adapt.

The month is sequenced so each design needs only what came before it. You start with vocabulary, estimation and CAP, then the URL shortener and the rate limiter, where you also implement a token bucket yourself. Storage and caching come next, then the fan-out designs: news feed, Twitter, WhatsApp and notifications. Partitioning and queues follow, just before the heavy systems, search, YouTube, Uber and payments. The interview question bank comes last, once you have designs of your own to hang the answers on.

What each step gives you

  1. The System Design Fundamentals Handbook

    Day one: the four questions underneath every design, covering partitions and consistency, concurrent writes, splitting and copying data, and getting machines to agree, plus why stateless services scale horizontally. Don't try to memorize it; read it once to learn the words, then return after the first week of designs, when each section will map onto something you have already built.

  2. Interactive Capacity Estimator

    The habit to build before any design: turn daily users into requests per second, peak QPS, storage per year, bandwidth and node counts, with the formula shown beside each number. Use it once per design this month, estimating by hand first and checking with the sliders, so that by week four the two-minute estimate at the top of an answer is automatic.

  3. CAP Theorem & Consistency Models

    CAP as it applies to real choices: what a partition forces, why "CA" is a myth, the latency-versus-consistency trade-off PACELC adds for normal operation, and the consistency spectrum from linearizable to eventual. Every design later this month makes a per-operation consistency decision, and this page gives you the words to state it, such as strong for a balance and eventual for a view count.

  4. Design a URL Shortener

    Your first full design, small enough to finish in one sitting: a server that writes and redirects, base-62 codes from a key-generation service, a read-heavy path with caching, scale-out, sharding, analytics behind a queue, and expiry and abuse handling. Before reading, spend fifteen minutes designing it yourself, then compare; the gaps you find are what the rest of the month fixes.

  5. Design a Rate Limiter

    A design about counting correctly at scale: rejecting early at the gateway, choosing what to limit per user or per key, token bucket versus window algorithms, atomic counters shared by many gateways, regional placement, and fail-open versus fail-closed behavior. It sets up the next step, so note exactly how the token bucket refills and what state it keeps for each client.

  6. Token Bucket Rate Limiter

    The one implementation exercise of the month: write token_bucket(capacity, rate, times) so that a bucket starting full refills lazily, credits the time elapsed since the last request, caps at capacity, and accepts only when a whole token is available. Passing the hidden tests proves you understood the design you just read, and the same function makes a plausible coding follow-up to a rate-limiter question.

  7. Design a Key-Value Store

    The storage layer under most of the designs to come, built Dynamo-style: consistent hashing, replication along a preference list, R and W quorums, conflict resolution, gossip membership, hinted handoff and read repair. Take this one slowly; when later designs say "store it in a key-value store", you should know what that store does when a node fails and why it favors availability.

  8. The Caching Patterns Handbook

    The arithmetic of caching: average latency as a hit-rate-weighted blend of the fast and slow paths, why a small change in hit rate moves latency so much, the cache-aside, write-through and write-back patterns, TTLs, and the two hard problems of invalidation and stampedes. It prepares you to justify a cache with numbers in any design, rather than adding one by reflex.

  9. Design a Distributed Cache

    The cache as its own distributed system: cache-aside, sharding with consistent hashing rather than modulo, LRU, LFU and TTL eviction, replication and failover, invalidation, and coalescing misses during a thundering herd. Coming right after the caching handbook, it shows the operational side and prepares you for follow-ups about hot keys, choosing a TTL, and whether the cache is ever the source of truth.

  10. Consistent Hashing Visualizer

    A quick hands-on break: add and remove servers on a hash ring, change the virtual-node count, and watch which keys move and how balanced the load becomes. Spend ten minutes here after the cache and key-value designs, since both rely on the ring, until you can predict before clicking roughly how many keys a new node will take.

  11. Design a News Feed

    The start of the fan-out week: separating posts from feeds, pull versus push fan-out with the costs of each, ranking candidates, a hybrid for accounts with huge followings, mixing sources, and pagination with deduplication and freshness. Design it yourself first with one question in mind, which is whether the work should happen when someone posts or when someone reads.

  12. Design Twitter

    The same fan-out question at a harsher scale: an immutable tweet store, a directed follow graph, precomputed home-timeline inboxes, sharding by access key, retrieve-then-rank, and the celebrity problem that forces hybrid fan-out. Compare it with the news feed you just did and write down what changed and why, because seeing one pattern under different constraints is the skill this month builds.

  13. Design WhatsApp

    Real-time messaging instead of feeds: persistent connections that push rather than poll, finding which server a user is connected to, store-and-forward for offline delivery, sent, delivered and read receipts built from acknowledgments, group fan-out, media kept off the socket, and end-to-end encryption. It prepares you for chat prompts and for the question of how a handful of servers can hold billions of connections.

  14. Design a Notification System

    A pipeline design: one API for every producer, a queue to decouple them from delivery, user preferences as a gate, rendering once and fanning out through push, SMS and email adapters, scheduled sends, delivery tracking with retries, and protection against duplicates and floods. It is good practice for the "what if a downstream provider goes down?" style of question that pipeline designs attract.

  15. Partitioning, Sharding & Replication

    A mid-month consolidation: by now you have sharded URLs, a key-value store and timelines, and this handbook names what you were doing, covering range, hash and directory partitioning, consistent hashing, hot partitions and shard keys, and replication topologies tied together by quorums. Use it to revisit one earlier design and justify its partition key properly.

  16. Design a Message Queue

    The async backbone that several earlier designs assumed: an append-only log, partitions with per-partition ordering, consumer groups and offsets, leader and in-sync-replica replication, retention and compaction, and delivery guarantees. After this you can say precisely what "put it on a queue" means in your own diagrams, including how many partitions you need and what delivery semantics you are promising.

  17. Design a Search Engine

    An inverted index from scratch: analyzing queries and documents the same way, building postings offline and serving them online, ranking by relevance and authority, sharding with scatter-gather, caching hot queries, and keeping the index fresh. It prepares you for search prompts and for the tail-latency question that scatter-gather raises, since every query waits for its slowest shard.

  18. Design YouTube

    Video at scale, which is mostly a storage and delivery problem: metadata split from blobs, transcoding one upload into many renditions for adaptive bitrate, serving through a CDN, hot and cold storage tiers, separate read and write planes, view events, and the unhappy paths of uploads, copyright and live. Expect follow-ups on adaptive bitrate and resumable uploads, both covered on the page.

  19. Design Uber

    Real-time geospatial matching: a hot path for driver locations kept apart from durable trip data, geospatial indexing to answer who is nearby, picking a driver when two riders want the same one, scaling to millions of trips a day, live map updates, and the trip lifecycle through payment. It prepares you for location prompts and for the race conditions interviewers like to add.

  20. Design a Payment System

    The month's correctness capstone: an authorize-and-capture state machine, idempotency keys that make retries safe, a double-entry ledger, tokenization to contain card data, webhooks for asynchronous events, and reconciliation with the provider. Where earlier designs could accept stale reads, this one cannot, so practice explaining which parts need strong consistency and how you avoid charging anyone twice.

  21. 50 System Design Interview Questions

    Fifty questions with short answers you can say out loud, across requirements, networking and load balancing, caching, storage, CAP, messaging, reliability and design scenarios, including a runnable demonstration of why fan-out makes tail latency the common case. Use it in the final days as a self-test: answer each question from the designs you built this month before reading the written version.

A study plan

  1. Days 1–3

    Read System Design Fundamentals on day one and CAP Theorem and Consistency Models on day three. In between, use the Capacity Estimator to size three systems you know, such as a chat app, a photo feed and a ticketing site, estimating by hand first and checking with the sliders second.

  2. Days 4–8

    Give the URL shortener and the rate limiter two days each: one to attempt the design on paper, one to read the page and fix your version. Spend day eight on the Token Bucket challenge, and try for twenty minutes before you open the hints.

  3. Days 9–13

    Work through the key-value store, The Caching Patterns Handbook and the distributed cache, then use the Consistent Hashing Visualizer as a short review. By day 13 you should be able to explain cache-aside, quorums and virtual nodes without notes.

  4. Days 14–19

    Fan-out week: the news feed, Twitter, WhatsApp and the notification system. Before each page, write down the read-time or write-time fan-out decision you would make and why, then check it. Keep a one-page sheet of the patterns that repeat across all four.

  5. Days 20–25

    Read Partitioning, Sharding and Replication and the message queue design, then the search engine and YouTube. Each day, also revisit one earlier design and improve its partitioning or queueing with what you just learned.

  6. Days 26–30

    Finish with Uber and the payment system, then spend the last three days on 50 System Design Interview Questions and timed 45-minute mocks. Pick prompts at random from the month's designs and run each one end to end out loud, from requirements and estimates to trade-offs.

Questions about this path

Can you learn system design in 30 days?

You can learn the core of it in a month if you practice daily and design rather than only read. Thirty days is enough to work through the building blocks and a set of classic designs, and to get comfortable estimating load and stating trade-offs. It is not enough to build the instincts that come from running systems in production, so treat the month as a strong foundation rather than an endpoint. Engineers who already work on backend systems tend to move faster; if distributed systems are new to you, stretch the plan to six weeks.

How many hours a day should I study system design?

About an hour a day is enough for this plan, as long as most of that hour is active: sketching a design before reading it, estimating by hand, and explaining trade-offs out loud. Longer weekend sessions help with the bigger designs, such as YouTube or Uber. Consistency matters more than volume, because each design builds on the vocabulary of the ones before it, and short daily sessions keep that vocabulary fresh. If you miss a few days, resume where you stopped rather than skipping ahead.

What are the most common system design interview questions?

Prompts that come up again and again include a URL shortener, a rate limiter, a key-value store, a distributed cache, a news feed or Twitter timeline, a chat system like WhatsApp, a notification service, a search engine, video streaming like YouTube, ride-hailing like Uber, and a payment system. This month covers all of them. The exact prompt matters less than you might think, because they reuse the same building blocks; once you can handle these, an unfamiliar prompt becomes a new combination of familiar parts.

Do I need to write code to practice system design?

Mostly not. System design is practiced on paper or a whiteboard, by reasoning about components, data flow and trade-offs. Writing a small piece of a design yourself does help it stick, which is why this month includes one implementation challenge, the token bucket behind the rate limiter. Some design pages also include short runnable snippets, such as base-62 encoding and consistent hashing, that you can read and modify. Use code to check your understanding, not as a substitute for practicing the spoken walkthrough.

Designing real systems is a skill you build by designing, not by memorizing reference diagrams. This path is a 30-day progression through the building blocks and the trade-offs, ending with the judgment to architect a system for a real requirement rather than pattern-match to a template you half-remember.

← All learning paths