Focus of this course

This course is about designing systems that scale with increasing users, remain available even under different kinds of faults, and meet functional goals with good performance. A real-world system building is an iterative process where we start with a reasonably good design, implement it, measure how it performs, and improve the design for the next iteration. The focus of this course is to immerse ourselves into carefully selected system design endeavors to enable ourselves to tackle any novel design problem, be it in a systems design interview or a task on our jobs.

The missing pieces

This course aims to build concepts instead of giving out boilerplate designs.

A fresh look at system design

Many system design courses provide a formula to attack the problem. Such a mechanism might seem attractive to get started in a high-stress situation like an interview, but it might encourage memorizing a design solution. To the least, it gives a trite feel to the interviewer (who probably can tell right away which guide an applicant is following). If system design was that formulaic, we probably don’t need humans for system designing. System design is as much art as a science, and attacking a design problem from the first principles gives a fresh feel to it.

Building blocks and design problems

At the high level, we have separated out commonly used design elements (such as load balancers) as basic building blocks. Doing so serves two purposes. First, it allows us to discuss the building blocks in detail, which are interesting mini-design problems in their own right. Second, when we tackle a design problem, we can concentrate on problem-specific aspects, and allude to the building blocks as black boxes. Doing so helps us remove duplicate discussions of commonly occurring design elements.

Create a free account to access the full course.

By signing up, you agree to Educative's Terms of Service and Privacy Policy