<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <link rel="stylesheet" href="/system-design-60-days/assets/css/just-the-docs-default.css"> <link rel="stylesheet" href="/system-design-60-days/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet"> <style id="jtd-nav-activation"> .site-nav ul li a { background-image: none; } </style> <script src="/system-design-60-days/assets/js/vendor/lunr.min.js"></script> <script src="/system-design-60-days/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>System design in 60 days | 60 days of system design, 4 hours a day. Notes, drills, and labs built from scratch.</title> <meta name="generator" content="Jekyll v3.10.0" /> <meta property="og:title" content="System design in 60 days" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="60 days of system design, 4 hours a day. Notes, drills, and labs built from scratch." /> <meta property="og:description" content="60 days of system design, 4 hours a day. Notes, drills, and labs built from scratch." /> <link rel="canonical" href="https://anurag629.github.io/system-design-60-days/assets/css/just-the-docs-head-nav.css" /> <meta property="og:url" content="https://anurag629.github.io/system-design-60-days/assets/css/just-the-docs-head-nav.css" /> <meta property="og:site_name" content="System design in 60 days" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="System design in 60 days" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"60 days of system design, 4 hours a day. Notes, drills, and labs built from scratch.","headline":"System design in 60 days","url":"https://anurag629.github.io/system-design-60-days/assets/css/just-the-docs-head-nav.css"}</script> <!-- End Jekyll SEO tag --> </head> <body> <a class="skip-to-main" href="#main-content">Skip to main content</a> <svg xmlns="http://www.w3.org/2000/svg" class="d-none"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE --> <symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"> <title id="svg-external-link-title">(external link)</title> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md --> <symbol id="svg-copy" viewBox="0 0 16 16"> <title>Copy</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> </svg> </symbol> <symbol id="svg-copied" viewBox="0 0 16 16"> <title>Copied</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16"> <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/> </svg> </symbol> </svg> <header class="side-bar"> <div class="site-header"> <a href="/system-design-60-days/" class="site-title lh-tight"> System design in 60 days </a> <button id="menu-button" class="site-button btn-reset" aria-label="Menu" aria-expanded="false"> <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> </button> </div> <nav aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/" class="nav-list-link">Home</a></li><li class="nav-list-item"><a href="/system-design-60-days/tracker/" class="nav-list-link">Track your progress</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 1: ground truth submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-01.html" class="nav-list-link">Week 1: ground truth</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 1: how slow is slow? submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-01.html" class="nav-list-link">Day 1: how slow is slow?</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-01-latency/RESULTS.html" class="nav-list-link">Day 1 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-01-drills.html" class="nav-list-link">Day 1 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-01-posts.html" class="nav-list-link">Day 1 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 2: estimation vs reality submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-02.html" class="nav-list-link">Day 2: estimation vs reality</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-02-estimation/RESULTS.html" class="nav-list-link">Day 2 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-02-estimates.html" class="nav-list-link">Day 2 estimates</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-02-posts.html" class="nav-list-link">Day 2 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 3: what happens when you type a URL submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-03.html" class="nav-list-link">Day 3: what happens when you type a URL</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-03-url/RESULTS.html" class="nav-list-link">Day 3 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-03-drills.html" class="nav-list-link">Day 3 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-03-posts.html" class="nav-list-link">Day 3 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 4: latency, throughput and the queue submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-04.html" class="nav-list-link">Day 4: latency, throughput and the queue</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-04-queues/RESULTS.html" class="nav-list-link">Day 4 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-04-drills.html" class="nav-list-link">Day 4 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-04-posts.html" class="nav-list-link">Day 4 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 5: designing an API submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-05.html" class="nav-list-link">Day 5: designing an API</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-05-pagination/RESULTS.html" class="nav-list-link">Day 5 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-05-drills.html" class="nav-list-link">Day 5 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-05-posts.html" class="nav-list-link">Day 5 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 6: more than one server submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-06.html" class="nav-list-link">Day 6: more than one server</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-06-load-balancer/RESULTS.html" class="nav-list-link">Day 6 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-06-drills.html" class="nav-list-link">Day 6 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-06-posts.html" class="nav-list-link">Day 6 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 7: your first real design submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-07.html" class="nav-list-link">Day 7: your first real design</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-07-url-shortener/DESIGN.html" class="nav-list-link">Day 7 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-07-drills.html" class="nav-list-link">Day 7 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-07-posts.html" class="nav-list-link">Day 7 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 2: storage submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-02.html" class="nav-list-link">Week 2: storage</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 8: how a row sits on disk submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-08.html" class="nav-list-link">Day 8: how a row sits on disk</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-08-pages/RESULTS.html" class="nav-list-link">Day 8 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-08-drills.html" class="nav-list-link">Day 8 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-08-posts.html" class="nav-list-link">Day 8 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 9: B-trees and LSM trees submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-09.html" class="nav-list-link">Day 9: B-trees and LSM trees</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-09-btree-lsm/RESULTS.html" class="nav-list-link">Day 9 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-09-drills.html" class="nav-list-link">Day 9 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-09-posts.html" class="nav-list-link">Day 9 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 10: indexes in depth submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-10.html" class="nav-list-link">Day 10: indexes in depth</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-10-indexes/RESULTS.html" class="nav-list-link">Day 10 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-10-drills.html" class="nav-list-link">Day 10 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-10-posts.html" class="nav-list-link">Day 10 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 11: transactions and isolation submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-11.html" class="nav-list-link">Day 11: transactions and isolation</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-11-transactions/RESULTS.html" class="nav-list-link">Day 11 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-11-drills.html" class="nav-list-link">Day 11 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-11-posts.html" class="nav-list-link">Day 11 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 12: replication and lag submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-12.html" class="nav-list-link">Day 12: replication and lag</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-12-replication/RESULTS.html" class="nav-list-link">Day 12 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-12-drills.html" class="nav-list-link">Day 12 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-12-posts.html" class="nav-list-link">Day 12 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 13: partitioning and sharding submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-13.html" class="nav-list-link">Day 13: partitioning and sharding</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-13-sharding/RESULTS.html" class="nav-list-link">Day 13 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-13-drills.html" class="nav-list-link">Day 13 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-13-posts.html" class="nav-list-link">Day 13 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 14: designing a storage layer submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-14.html" class="nav-list-link">Day 14: designing a storage layer</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-14-storage-design/DESIGN.html" class="nav-list-link">Day 14 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-14-drills.html" class="nav-list-link">Day 14 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-14-posts.html" class="nav-list-link">Day 14 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 3: caching and the CDN submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-03.html" class="nav-list-link">Week 3: caching and the CDN</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 15: caching and the cache-aside pattern submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-15.html" class="nav-list-link">Day 15: caching and the cache-aside pattern</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-15-cache-aside/RESULTS.html" class="nav-list-link">Day 15 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-15-drills.html" class="nav-list-link">Day 15 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-15-posts.html" class="nav-list-link">Day 15 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 16: eviction and the working set submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-16.html" class="nav-list-link">Day 16: eviction and the working set</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-16-eviction/RESULTS.html" class="nav-list-link">Day 16 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-16-drills.html" class="nav-list-link">Day 16 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-16-posts.html" class="nav-list-link">Day 16 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 17: the thundering herd submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-17.html" class="nav-list-link">Day 17: the thundering herd</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-17-stampede/RESULTS.html" class="nav-list-link">Day 17 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-17-drills.html" class="nav-list-link">Day 17 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-17-posts.html" class="nav-list-link">Day 17 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 18: hot keys and the celebrity problem submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-18.html" class="nav-list-link">Day 18: hot keys and the celebrity problem</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-18-hot-keys/RESULTS.html" class="nav-list-link">Day 18 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-18-drills.html" class="nav-list-link">Day 18 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-18-posts.html" class="nav-list-link">Day 18 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 19: Redis internals and pipelining submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-19.html" class="nav-list-link">Day 19: Redis internals and pipelining</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-19-redis/RESULTS.html" class="nav-list-link">Day 19 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-19-drills.html" class="nav-list-link">Day 19 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-19-posts.html" class="nav-list-link">Day 19 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 20: the CDN and cache invalidation submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-20.html" class="nav-list-link">Day 20: the CDN and cache invalidation</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-20-cdn/RESULTS.html" class="nav-list-link">Day 20 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-20-drills.html" class="nav-list-link">Day 20 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-20-posts.html" class="nav-list-link">Day 20 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 21: designing a news feed submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-21.html" class="nav-list-link">Day 21: designing a news feed</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-21-news-feed/DESIGN.html" class="nav-list-link">Day 21 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-21-drills.html" class="nav-list-link">Day 21 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-21-posts.html" class="nav-list-link">Day 21 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 4: async, queues and the log submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-04.html" class="nav-list-link">Week 4: async, queues and the log</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 22: sync vs async, and why queues exist submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-22.html" class="nav-list-link">Day 22: sync vs async, and why queues exist</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-22-queues/RESULTS.html" class="nav-list-link">Day 22 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-22-drills.html" class="nav-list-link">Day 22 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-22-posts.html" class="nav-list-link">Day 22 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 23: the log as a primitive submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-23.html" class="nav-list-link">Day 23: the log as a primitive</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-23-log/RESULTS.html" class="nav-list-link">Day 23 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-23-drills.html" class="nav-list-link">Day 23 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-23-posts.html" class="nav-list-link">Day 23 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 24: Kafka, partitions and consumer groups submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-24.html" class="nav-list-link">Day 24: Kafka, partitions and consumer groups</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-24-partitions/RESULTS.html" class="nav-list-link">Day 24 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-24-drills.html" class="nav-list-link">Day 24 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-24-posts.html" class="nav-list-link">Day 24 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 25: delivery semantics and idempotency submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-25.html" class="nav-list-link">Day 25: delivery semantics and idempotency</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-25-delivery/RESULTS.html" class="nav-list-link">Day 25 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-25-drills.html" class="nav-list-link">Day 25 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-25-posts.html" class="nav-list-link">Day 25 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 26: the outbox pattern submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-26.html" class="nav-list-link">Day 26: the outbox pattern</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-26-outbox/RESULTS.html" class="nav-list-link">Day 26 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-26-drills.html" class="nav-list-link">Day 26 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-26-posts.html" class="nav-list-link">Day 26 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 27: backpressure and load shedding submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-27.html" class="nav-list-link">Day 27: backpressure and load shedding</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-27-backpressure/RESULTS.html" class="nav-list-link">Day 27 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-27-drills.html" class="nav-list-link">Day 27 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-27-posts.html" class="nav-list-link">Day 27 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 28: designing a notification system submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-28.html" class="nav-list-link">Day 28: designing a notification system</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-28-notifications/DESIGN.html" class="nav-list-link">Day 28 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-28-drills.html" class="nav-list-link">Day 28 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-28-posts.html" class="nav-list-link">Day 28 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 5: distributed systems submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-05.html" class="nav-list-link">Week 5: distributed systems</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 29: failure, time, and the eight fallacies submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-29.html" class="nav-list-link">Day 29: failure, time, and the eight fallacies</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-29-clocks/RESULTS.html" class="nav-list-link">Day 29 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-29-drills.html" class="nav-list-link">Day 29 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-29-posts.html" class="nav-list-link">Day 29 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 30: CAP, for real, and PACELC submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-30.html" class="nav-list-link">Day 30: CAP, for real, and PACELC</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-30-cap/RESULTS.html" class="nav-list-link">Day 30 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-30-drills.html" class="nav-list-link">Day 30 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-30-posts.html" class="nav-list-link">Day 30 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 31: replication and quorums submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-31.html" class="nav-list-link">Day 31: replication and quorums</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-31-quorums/RESULTS.html" class="nav-list-link">Day 31 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-31-drills.html" class="nav-list-link">Day 31 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-31-posts.html" class="nav-list-link">Day 31 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 32: consensus and Raft submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-32.html" class="nav-list-link">Day 32: consensus and Raft</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-32-raft/RESULTS.html" class="nav-list-link">Day 32 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-32-drills.html" class="nav-list-link">Day 32 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-32-posts.html" class="nav-list-link">Day 32 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 33: logical clocks submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-33.html" class="nav-list-link">Day 33: logical clocks</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-33-logical-clocks/RESULTS.html" class="nav-list-link">Day 33 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-33-drills.html" class="nav-list-link">Day 33 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-33-posts.html" class="nav-list-link">Day 33 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 34: the papers submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-34.html" class="nav-list-link">Day 34: the papers</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-34-papers/SUMMARIES.html" class="nav-list-link">Day 34 paper summaries</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-34-drills.html" class="nav-list-link">Day 34 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-34-posts.html" class="nav-list-link">Day 34 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 35: designing a distributed key-value store submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-35.html" class="nav-list-link">Day 35: designing a distributed key-value store</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-35-kv-store/DESIGN.html" class="nav-list-link">Day 35 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-35-drills.html" class="nav-list-link">Day 35 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-35-posts.html" class="nav-list-link">Day 35 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 6: AI systems submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-06.html" class="nav-list-link">Week 6: AI systems</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 36: how LLM inference actually works submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-36.html" class="nav-list-link">Day 36: how LLM inference actually works</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-36-inference/RESULTS.html" class="nav-list-link">Day 36 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-36-drills.html" class="nav-list-link">Day 36 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-36-posts.html" class="nav-list-link">Day 36 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 37: the KV cache and continuous batching submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-37.html" class="nav-list-link">Day 37: the KV cache and continuous batching</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-37-batching/RESULTS.html" class="nav-list-link">Day 37 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-37-drills.html" class="nav-list-link">Day 37 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-37-posts.html" class="nav-list-link">Day 37 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 38: vector search and embeddings submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-38.html" class="nav-list-link">Day 38: vector search and embeddings</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-38-vector-search/RESULTS.html" class="nav-list-link">Day 38 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-38-drills.html" class="nav-list-link">Day 38 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-38-posts.html" class="nav-list-link">Day 38 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 39: RAG, and why it mostly fails at retrieval submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-39.html" class="nav-list-link">Day 39: RAG, and why it mostly fails at retrieval</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-39-rag/RESULTS.html" class="nav-list-link">Day 39 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-39-drills.html" class="nav-list-link">Day 39 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-39-posts.html" class="nav-list-link">Day 39 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 40: agents, and why the token bill explodes submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-40.html" class="nav-list-link">Day 40: agents, and why the token bill explodes</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-40-agents/RESULTS.html" class="nav-list-link">Day 40 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-40-drills.html" class="nav-list-link">Day 40 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-40-posts.html" class="nav-list-link">Day 40 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 41: serving concerns, caching, limiting and fallback submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-41.html" class="nav-list-link">Day 41: serving concerns, caching, limiting and fallback</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-41-serving/RESULTS.html" class="nav-list-link">Day 41 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-41-drills.html" class="nav-list-link">Day 41 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-41-posts.html" class="nav-list-link">Day 41 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 42: designing a production AI chat system submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-42.html" class="nav-list-link">Day 42: designing a production AI chat system</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-42-ai-chat/DESIGN.html" class="nav-list-link">Day 42 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-42-drills.html" class="nav-list-link">Day 42 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-42-posts.html" class="nav-list-link">Day 42 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 7: production submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-07.html" class="nav-list-link">Week 7: production</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 43: observability submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-43.html" class="nav-list-link">Day 43: observability</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-43-observability/RESULTS.html" class="nav-list-link">Day 43 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-43-drills.html" class="nav-list-link">Day 43 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-43-posts.html" class="nav-list-link">Day 43 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 44: SLOs and error budgets submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-44.html" class="nav-list-link">Day 44: SLOs and error budgets</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-44-slos/RESULTS.html" class="nav-list-link">Day 44 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-44-drills.html" class="nav-list-link">Day 44 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-44-posts.html" class="nav-list-link">Day 44 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 45: rate limiting submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-45.html" class="nav-list-link">Day 45: rate limiting</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-45-rate-limiting/RESULTS.html" class="nav-list-link">Day 45 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-45-drills.html" class="nav-list-link">Day 45 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-45-posts.html" class="nav-list-link">Day 45 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 46: multi-tenancy and isolation submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-46.html" class="nav-list-link">Day 46: multi-tenancy and isolation</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-46-multitenancy/RESULTS.html" class="nav-list-link">Day 46 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-46-drills.html" class="nav-list-link">Day 46 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-46-posts.html" class="nav-list-link">Day 46 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 47: security boundaries submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-47.html" class="nav-list-link">Day 47: security boundaries</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-47-security/RESULTS.html" class="nav-list-link">Day 47 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-47-drills.html" class="nav-list-link">Day 47 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-47-posts.html" class="nav-list-link">Day 47 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 48: cost and capacity planning submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-48.html" class="nav-list-link">Day 48: cost and capacity planning</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-48-cost/RESULTS.html" class="nav-list-link">Day 48 lab results</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-48-drills.html" class="nav-list-link">Day 48 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-48-posts.html" class="nav-list-link">Day 48 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 49: designing a multi-tenant SaaS submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-49.html" class="nav-list-link">Day 49: designing a multi-tenant SaaS</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-49-saas/DESIGN.html" class="nav-list-link">Day 49 design template</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-49-drills.html" class="nav-list-link">Day 49 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-49-posts.html" class="nav-list-link">Day 49 posts</a></li></ul></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Week 8: putting it all together submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/weeks/week-08.html" class="nav-list-link">Week 8: putting it all together</a><ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 50: the framework submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-50.html" class="nav-list-link">Day 50: the framework</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-50-framework/FRAMEWORK.html" class="nav-list-link">Day 50 framework sheet</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-50-drills.html" class="nav-list-link">Day 50 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-50-posts.html" class="nav-list-link">Day 50 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 51: mock, a URL shortener submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-51.html" class="nav-list-link">Day 51: mock, a URL shortener</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-51-mock-url-shortener/MOCK.html" class="nav-list-link">Day 51 mock brief</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-51-drills.html" class="nav-list-link">Day 51 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-51-posts.html" class="nav-list-link">Day 51 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 52: mock, a chat system submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-52.html" class="nav-list-link">Day 52: mock, a chat system</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-52-mock-chat/MOCK.html" class="nav-list-link">Day 52 mock brief</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-52-drills.html" class="nav-list-link">Day 52 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-52-posts.html" class="nav-list-link">Day 52 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 53: mock, a rate limiter and a news feed submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-53.html" class="nav-list-link">Day 53: mock, a rate limiter and a news feed</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-53-mock-ratelimiter-feed/MOCK.html" class="nav-list-link">Day 53 mock briefs</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-53-drills.html" class="nav-list-link">Day 53 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-53-posts.html" class="nav-list-link">Day 53 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 54: mock, an AI system submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-54.html" class="nav-list-link">Day 54: mock, an AI system</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-54-mock-ai/MOCK.html" class="nav-list-link">Day 54 mock brief</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-54-drills.html" class="nav-list-link">Day 54 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-54-posts.html" class="nav-list-link">Day 54 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 55: capstone kickoff submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-55.html" class="nav-list-link">Day 55: capstone kickoff</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-55-capstone-kickoff/REQUIREMENTS.html" class="nav-list-link">Day 55 capstone design doc</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-55-drills.html" class="nav-list-link">Day 55 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-55-posts.html" class="nav-list-link">Day 55 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 56: capstone build submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-56.html" class="nav-list-link">Day 56: capstone build</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-56-capstone-build/BUILD.html" class="nav-list-link">Day 56 build guide</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-56-drills.html" class="nav-list-link">Day 56 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-56-posts.html" class="nav-list-link">Day 56 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 57: capstone load test submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-57.html" class="nav-list-link">Day 57: capstone load test</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-57-capstone-loadtest/LOADTEST.html" class="nav-list-link">Day 57 load-test guide</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-57-drills.html" class="nav-list-link">Day 57 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-57-posts.html" class="nav-list-link">Day 57 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 58: capstone writeup submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-58.html" class="nav-list-link">Day 58: capstone writeup</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-58-capstone-writeup/ARCHITECTURE.html" class="nav-list-link">Day 58 architecture doc</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-58-drills.html" class="nav-list-link">Day 58 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-58-posts.html" class="nav-list-link">Day 58 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 59: review and gaps submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-59.html" class="nav-list-link">Day 59: review and gaps</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-59-review-gaps/REVIEW.html" class="nav-list-link">Day 59 review grid</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-59-drills.html" class="nav-list-link">Day 59 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-59-posts.html" class="nav-list-link">Day 59 posts</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Day 60: the finish submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/system-design-60-days/days/day-60.html" class="nav-list-link">Day 60: the finish</a><ul class="nav-list"><li class="nav-list-item"><a href="/system-design-60-days/labs/day-60-finish/FINISH.html" class="nav-list-link">Day 60 finish</a></li><li class="nav-list-item"><a href="/system-design-60-days/notes/day-60-drills.html" class="nav-list-link">Day 60 drills</a></li><li class="nav-list-item"><a href="/system-design-60-days/shares/day-60-posts.html" class="nav-list-link">Day 60 posts</a></li></ul></li></ul></li></ul> </nav> <div class="d-md-block d-none site-footer"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </div> </header> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search" role="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search System design in 60 days" autocomplete="off"> <label for="search-input" class="search-label"> <span class="sr-only">Search System design in 60 days</span> <svg viewBox="0 0 24 24" class="search-icon" aria-hidden="true"><use xlink:href="#svg-search"></use></svg> </label> </div> <div id="search-results" class="search-results"></div> </div> <nav aria-label="Auxiliary" class="aux-nav"> <ul class="aux-nav-list"> <li class="aux-nav-list-item"> <a href="https://github.com/anurag629/system-design-60-days" class="site-button" target="_blank" rel="noopener noreferrer" > View on GitHub </a> </li> </ul> </nav> </div> <div class="main-content-wrap"> <div id="main-content" class="main-content"> <main> <script src="/system-design-60-days/assets/js/progress.js" defer></script> </main> <hr> <footer> <p><a href="#top" id="back-to-top">Back to top</a></p> <p class="text-small mb-0">Built one day at a time. Source on <a href="https://github.com/anurag629/system-design-60-days">GitHub</a>.</p> <div class="d-md-none mt-4 fs-2"> This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </div> </footer> </div> </div> <div class="search-overlay"></div> </div> </body> </html>
