This document provides recommendations on how to prepare for systems design interviews and what to do and not to do during such an interview.

Table of Contents

🚴‍♀️ Authors

Usman is an ex-CTO at Pipe and a systems design mentor at Outtalent. Previously, he worked as an engineering manager at Stripe, as well as a software engineer at PipelineDB, Locu, Meta, and Microsoft.

Tilek is a co-founder of Outtalent. Previously he worked as Project Lead at Google X, as well as in multiple software engineering, business, and other roles at Google.

👋 Introduction

The goal of this guide is to help software engineers show their best in systems design interviews at big tech companies. We provide tips on how to prepare for the interview, a framework for how to approach the interview, and what you should avoid during it.

These recommendations helped each Outtalent fellow we worked with get 2 to 5 offers at companies like Amazon, Facebook, Flexport, Google, Microsoft, Spotify, Stripe, and Uber.

🎼 Theory

Naturally, there are many topics to master before attempting to pass Systems Design interviews, but the good thing is that they differ based on the type of role you are targeting.

If you are going for junior roles (2-5 years of experience), we recommend you read up on back-of-the-envelope calculations, databases, caching, asynchronous processing, and availability vs consistency, learning about consistency patterns and availability patterns.

If you are going for senior or staff roles, we recommend you learn more about application scaling, distributed systems (consensus and distributed transactions), advanced data structures: probabilistic data structures, trees (e.g. B-trees, quadtrees), SLA, SLO, HADR, BCP, observability, and monitoring.

We recognize that there are a lot of resources on this topic and you can go fairly deep into any of these topics. To address that, we recommend starting with the resources on the right.

https://github.com/donnemartin/system-design-primer

Designing Data-Intensive Applications

You can also review a couple of online courses, which can help you visualize the concepts we will cover in this guide.

ByteByteGo | Ace Your Next System Design Interview

Grokking the System Design Interview - Learn Interactively

Once you’ve gone over this material, find additional resources for topics where you feel you need to build more understanding and intuition.

🫧 Key Design Components

After you learned the basic theory, we suggest using the following mental model to think of key components of a system: