A Systems Design Interview Primer For New Engineers

Objective: In this lesson, we'll introduce systems design interviews, and focus on these outcomes:

  • You'll learn what systems design is.
  • We'll walk you through the various concepts you should know to design highly reliable and performant systems.
  • We'll show you how to get better at answering systems design interview questions.
  • You'll see how it helps your career in the long run.

When I first got into programming, one of the biggest impediments to leveling up was my lack of understanding of software systems and how they worked. I felt this frustration in multiple sprints. There were always some intriguing, big, and hairy tasks in the backlog that I wanted to tackle-- but I didn't have enough knowledge to even think through how my piece of a project could, or should, integrate with the rest of the systems.

It turns out this is a very common experience. A large part of the reason that large software companies ask new university graduates mostly algorithm questions is because they can't give them systems design problems! As you become more senior, your job incrementally shifts from solving "small code" problems (figuring out syntax, structuring code well, etc.) to larger scale ones (how should we design our database schemas? What tools are available to ensure our requests are as fast as possible?)

This tutorial aims to be a primer focusing on systems design interview preparation, but can also be used to simply get better at systems design (a required skill) as a working developer.