Prologue

Learn system design one problem at a time in about 15 minutes.

We'll cover the following

Introduction

When we need to design a system to solve a specific problem, two conflicting strategies might emerge: 1) The problem at hand is novel, and no one has ever solved it before. 2) There is nothing new, and we need to force the problem to a known set of solution templates.

In some sense, these two strategies are on opposite ends of the spectrum, and reality might be somewhere in the middle. On one hand, a thorough understanding of the basic building blocks of systems is necessary, while on the other hand, studying how others solved specific problems guides us to see the design tradeoffs and make an informed call about which parts of our problem can be reduced to already solved problems. Our earlier course on system design started by introducing the fundamental building blocks of any modern system and its application in carefully selected design problems.

In this course, we take our system design endeavor to the next level by learning from some carefully selected seminal systems. We’ll present these systems from the first principles (meaning posing the problem at hand, thinking through different solutions, their tradeoffs, and evaluation) as a learning tool. We’ll learn many design patterns along the way, and we’ll see that such systems often challenge the conventional wisdom of solving a problem (hence their novelty).

Note: This course is an abridged version of our course: Grokking the Principles and Practices of Advanced System Design. If you are short on time, possibly due to an approaching interview, or simply want to refresh the salient points of a design, this course is for you. Our estimate is that it will take you between 15 to 30 minutes to review each problem.

Design problems covered

We’ll cover the following design problems in this course:

Let’s dive in!