top of page

Everything you need to know about system design interviews in 2024

What qualities separate a good software engineer from a great software engineer?

 

In my experience, it’s not usually their technical skills.

 

Sure, the best software engineers I’ve worked with are technically adept. But more importantly, they are also great collaborators, communicators, and problem-solvers.

 

I have always loved conducting design interview loops for exactly this reason. As opposed to coding interviews, which are much more focused on assessing technical know-how, system design interview questions can be an effective way to assess these important intangibles.

 

Can you navigate tradeoffs, ask clarifying questions, and develop a resourceful solution that satisfies the use case? Can you unpack functional and nonfunctional requirements? Can you defend the choices you made when pressed?

 

This is why top companies typically use design interviews as a key factor in determining a candidate’s starting level.

 

Fumbling your design interview can result in down-leveling, i.e. getting hired for a lower-level role than the one you originally applied for. For example, instead of being hired at Meta at E4 (Software Engineer III), you might get offered a position at E3 (Software Engineer II).

 

Why is this a big deal? It means you could miss out on years of potential earnings.

 

It can take anywhere from 1-3 years to be promoted to the next seniority level at most orgs. During that time, you'd be losing out on anywhere from 10-20% of your earning potential — all because you didn’t perform the best you could in a 30-45 minute interview.

 

So with all of this in mind, let’s start out the new year on the right foot. Today, I want to dig into design interviews at top companies, and share some tips for how to prepare comprehensively.

 

Here’s what I’ll cover:

  • Unpacking design interviews in 2024

    • System Design

    • Product Design & API Design

    • Object Oriented Design

  • Which kind of design interview should you prepare for?

  • Your 2024 design interview crash course

 

Let’s get started.

Unpacking design interviews in 2024

If your interview loop contains a design interview round, there are several unique types, or “flavors” of design interviews that you will want to account for. I will cover those main types in just a moment. However, no matter which type of design interview you get, you can expect a similar structure:
 

  1. Design Challenge: Candidates have 30-45 minutes to tackle a design task (whether that entails creating, optimizing, or scaling a software system — or designing and leveraging individual components within that system).

  2. Clarification and Analysis: Next, candidates delve deeper into the problem's requirements, constraints, and goals by asking relevant questions. 

  3. Solution Presentation: Candidates present their solution, considering scalability, performance, reliability, and security.

  4. Discussion and Review: If there's enough time, the interviewer may provide feedback, and the candidate can refine their design.

 

Just remember: the goal of a design interview is not merely to test your design knowledge as it relates practically to your role. It’s also an invitation to demonstrate your problem-solving skills. 

 

With this context in mind, I’ll provide an overview of the main design interview types you might encounter in 2024:

  1. System Design

  2. API & Product Design

  3. Object Oriented Design

1. system design 

Back when I interviewed at Facebook, I was asked to do a System Design Interview (Meta refers to their System Design Interview as the “Pirate” round).

 

Since I knew I wanted to work on distributed storage at Facebook (i.e. designing and building large-scale distributed systems), it was clear that System Design was the right path for me.

 

Indeed, for many senior engineers, software architects, machine learning engineers, TPMs, and engineering leaders, System Design remains a popular interview choice.

 

(Perhaps I’m biased given my background as a systems engineer, but I think that a working knowledge of System Design remains a critical skill for any engineer working on modern software).

 

However, nowadays many software developers are not actively working on the key building blocks of distributed systems. That means the better fit for many developers (especially web developers) is an API Design or Product Design Interview. At Meta this interview round is now called “Pirate X”.

2. Product Design & API Design

Product Design Interviews – and their close cousin API Design Interviews – represent a relatively recent addition to the design interview family. This is a result of the explosion of APIs in the modern software development landscape over the past 10-15 years, as developers have increasingly had to leverage APIs and software architecture building blocks in their day-to-day.

 

As with System Design Interviews, Product Design and API Design interviews assess how candidates ask questions and communicate, design individual components within a larger product or system, and make and defend tradeoffs regarding their design.

 

To effectively design an API, you'll need working knowledge of the current software system. For example, if the existing distributed store is unable to meet the speed requirements of the API, you will need to call the caching layer instead. In a successful API Design interview, the candidate will creatively navigate the constraints of the software system to create fast and functional APIs.

 

When designing an API there are multiple factors that need defining. It is important to begin clarifying these criteria at the beginning of the interview.

 

  • User: Is this an internal tool, or is it a product that other parties may need?

  • Problem: What does the API aim to solve?

  • Response type: Endpoints and successful or unsuccessful calls must be clearly defined.

    • Some standard failed HTTP request status codes to know are: 301, 403, 500

  • Use-case: How will the API be implemented? This is essential for testing and debugging.

    • Common API architectures include: REST, GraphQL, and RPC

    • Common data formats are: JSON, XML, MessagePack

  • Scalability: Plan for an increase in demand. The API should be resilient and expandable.

  • Documentation: What documentation is required for other developers to successfully integrate the API? This includes structure, behaviors, and parameters to be defined.

 

Product Design and API Design Interviews are a rapidly growing trend in the software industry. More and more companies are transitioning their design interviews to this smaller scope, API-focused approach.

 

Front-end devs, back-end devs, full-stack devs and product managers need to be prepared for these types of design interviews.

3. Object Oriented Design & Low-level Design

Whereas System Design deals with system architecture at a high-level, Object Oriented Design (OOD) represents the other end of the spectrum.

 

OOD involves implementing specific modules or components and their classes within a more extensive system.

 

We can think of OOD similarly to building the engine of a Formula 1 race car. If the entire car is a distributed system, then the engine's design would be considered a low-level process within that system. 

 

When I first started interviewing for software engineer positions, Low-Level OOD interviews were the only type of design interview you'd find yourself in. System Design and scalable systems weren't as integral as they are today because large-scale distributed systems were relatively uncommon.

 

The OOD interview will primarily measure two criteria: 

  1. Can you design a component that successfully interacts with other components in the system?

  2. Can you use design patterns to create this component efficiently?

 

Understanding the various design patterns of OOD should be a primary focus of your preparation for the low-level design interview.

 

“Design Patterns: Elements of Reusable Object-Oriented Software” (1994) by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (collectively known as the "Gang of Four") is considered a landmark text in the field of object-oriented design. It helped popularize the use of design patterns at a time when object-oriented design was reaching new heights of popularity. 

 

This book highlighted 23 fundamental design patterns of OOD organized into three categories: creational, structural, and behavioral patterns. 

 

  1. Creational patterns deal with the process of object creation and are used to abstract the process of object creation.

  2. Structural patterns deal with class and object composition. These patterns provide ways to organize or combine classes and objects to form larger structures. 

  3. Behavioral patterns focus more on object interaction and how objects communicate with each other. These patterns deal with how responsibilities are delegated across different objects. 

 

Each category represents a set of design patterns meant to solve a specific type of object-oriented design problem. By using these patterns, developers can significantly improve their software's coherence, modularity, and maintainability. 

 

Of the 23 design patterns, these are the most frequently used in technical design interviews:

  • Singleton: Restricts the instantiation of a class to a single object.

  • Factory: Doesn't require the use of a constructor to create objects (aka, the `new` keyword).

  • Constructor: Uses the constructors present in the class to create specific types of objects.

  • Iterator: Iterates a collection of objects without exposing the underlying form.

  • Facade: Simplifies a client’s interaction with the system by hiding the underlying complex code.

  • Adaptor: Allows an object to cooperate with a class that has an incompatible interface.

  • Visitor: Allows new operations to the objects without changing the structure of the objects themselves.

 

Ultimately, the best pattern to use depends on the question asked. For example, if your software is generating IDs for your desktop app, you only want a single class generating those IDs, especially if you have more than one thread working off that class. The Singleton pattern is extremely relevant here as it ensures that each process in the software will have only one instance of your class.

 

OOD is the oldest among the stages of tech design interviews, but it is not going away anytime soon. System Design can only be effective with individual processes also being optimized. Nobody will use a web app if their web browser software provides a bad user experience. Scalability only matters if customers want to stick around in the first place. 

Which kind of design interview should you prepare for?

Now that we’ve explored each type of design interview at a high level, let’s talk about which kind of interview you should prioritize in your prep.

 

Here’s some points you can use as a starting point:

System Design Interview is suitable for: 

  • Senior engineer

  • Software architect

  • Systems engineer

  • Technical product manager

  • Engineering leader

Product Design & API Design is suitable for: 

  • Front-end developer

  • API engineer

  • Cloud engineer

  • Mobile app developer

  • Product designer

Object Oriented Design is suitable for: 

  • Back-end developer

  • Software engineer

  • Game developer

 

No matter your career track, I promise that you will benefit from a working knowledge of each of these essential disciplines. (However, for senior engineers, an understanding of System Design building blocks and best practices is non-negotiable, so there’s never a bad time to focus on your System Design skills).

 

So if you are ready to dive into design interview prep, where’s the best place to start?

Your 2024 design interview crash course

Luckily, no matter which design interview type or career specialization you’re targeting, Educative has resources for you.

 

Today I want to share a few of my favorite hands-on courses on Educative, and talk briefly about how to get the most out of them.

Recommended Resources for System Design

Recommended Resources for System Design

 

1) Best System Design course overall

 

Grokking the System Design Interview for Engineers & Managers

This is one of our most popular courses on the platform. It covers the foundational building blocks of modern System Design and provides a step-by-step process for tackling any System Design problem (RESHADED). It also contains 13 real-world problems where you can practice your skills (e.g. Design Uber, Design WhatsApp, etc.). It’s a great foundation for interviews and beyond.


 

2) Best System Design course if you’re in a rush

 

System Design Interview Prep Crash Course

 

If your time is limited, this awesome resource distills the essentials from our popular Grokking course into a digestible crash course. You’ll get a quick overview of System Design building blocks, and learn how to apply them in several popular real-world problems.


 

3) Best System Design course for ML engineers

 

Grokking the Machine Learning Interview

 

System Design is an important prerequisite for machine learning engineers, and can provide a boost in ML interviews. This hands-on course covers some of the most popularly asked interview problems at big tech companies. You’ll walk step-by-step through solving these problems, focusing on the design behind machine learning systems.


 

4) Best System Design course for senior roles

 

Grokking the Advanced Principles and Practices of System Design

 

This course teaches you how great systems from hyperscalers like Google, Facebook, and Amazon are built and operated to meet strict service-level agreements. This course dives deep into influential systems that have stood the test of time, enabling you to apply those same foundational design principles in real-world applications.

Recommended Resources for Product Design & API Design

 

1) Best API Design course for interviews

 

Grokking the API Design Interview

 

In this hands-on course — the first of its kind — you will learn the REDCAMEL approach to designing APIs of well-known systems, including YouTube, Stripe, and Zoom. You’ll also learn how these APIs fit in the bigger product, preparing you for API Design and Product Design Interviews.

 

2) Best course on API design and development

 

Design and Build Great Web APIs

 

Learn best practices for designing and building APIs that are robust, reliable, and resilient. Get hands-on with a range of developer tools, including for design, documentation, building, testing, security, and deployment. By the end, you will have an in-depth understanding of how to make fully functional efficient APIs from inception to deployment.

Recommended Resources for Object Oriented Design

 

1) Best Object Oriented Design course overall

 

Grokking the Low Level Design Interview Using OOD Principles

 

Master design principles and patterns to ace the object-oriented design interview. Learn a bottom-up approach to break down any design problem using 20+ real-world systems (e.g. Amazon Locker Service, StackOverflow).


 

2) Best primer in Object Oriented Programming (OOP)

 

If you are looking to refresh your knowledge in OOP, here are a few options in several popular programming languages:


 

3) Best course for practicing design pattern implementation

 

Node.js Design Patterns

 

Node.js is a popular JavaScript web development runtime environment. So if you are ready to get hands-on with design pattern implementation in a web development setting, this is a great course to try. 

Good luck with your interviews, and happy learning!

bottom of page