The System Design Interview
Learn about the key phases in the System Design Interview and how it differs significantly from other technical interviews, such as coding interviews.
We'll cover the following
What’s unique about System Design Interviews?
System Design Interviews are some of the most creative technical interviews. There is no single right or wrong answer to a System Design problem—every problem can have many solutions.
With many different paths to the same outcome, your reasoning behind the solution (and how you present it) is key to showing your interviewers your technical skill set and ability to collaborate with a team.
What does a System Design solution involve?
The interview is a design process that involves much discussion with your interviewer. Let’s discuss what the design process looks like from a birds-eye view.
A good System Design solution will involve a structured approach. We will provide an example of a structured solution later in the course.
With a System Design Interview, you begin with a vague problem statement that asks you to design a web service. This statement will likely be something like the following:
Design a search engine
Design a rideshare app
Design a messaging service
Design a URL shortener
Requirements and constraints
From here, you identify the essential functions of the system you’ve been asked to design. These functions are known as requirements and are categorized into two types:
Functional requirements—Specific functionalities that bring the user to the service. These specific functions are directly adjacent to providing the key service.
Non-functional requirements—Functionalities that affect the overall operation of the system but are broader system functions that aren’t adjacent to specific functions of a service. Examples include scalability, reliability, usability, security, and performance.
Which of the following is an example of a functional requirement for an eCommerce website?
Adding an item to the user’s shopping cart
Usability (easy to use for most users)
You also want to understand any constraints for your system. Perhaps a company’s budget is low, which means they can’t afford expensive hardware for their storage solutions.
Note: To understand the problem, you will need to ask your interviewer questions.
After determining your requirements and constraints, you’ll start designing your system. This will involve identifying the components, technologies, and APIs that will work together to help you achieve your goal. The components can include front-end servers, analytics, and more. We’ll discuss more components later in the course.
There are many ways to approach a design, and design choices come with limitations. It’s essential that you allow your interviewers to hear your thought process regarding your solution. This includes how you’ve connected the elements of your design to requirements, and how you’ve reasoned through making compromises in your design (these compromises are known as trade-offs, which we’ll discuss in the next chapter).
Finally, you will reflect on your design. Nobody can design a perfect system in less than 45 minutes. If you’re aware of shortcomings in your design, begin to address them and discuss other design choices you could’ve made, or explain your decision based on your understanding of the given requirements and constraints.
Ideally, you will be getting feedback and conversing with your interviewer both during and throughout the design process. Your interviewer may point out shortcomings or ask about certain choices you made to give you an opportunity to demonstrate and explain your thinking.
If time allows, you can also do a second iteration of your design based on your new findings and takeaways.
System Design Interview prep: timeline and considerations
Successfully preparing for the System Design Interview won’t be as simple as memorizing answers. Proper preparation requires internalizing and reflecting on the concepts you are learning. This process takes time and effort—and it cannot be rushed.
The duration of your preparation will be determined by several factors, including:
Your individual circumstances
Your learning pace
Your daily study routine
Your current proficiency level in System Design
Your target role
Your daily time allocation
If you commit two to three hours a day to your preparation, five days a week, you can expect it to take:
4 to 10 weeks if you’re starting with minimal System Design experience or need more time to absorb and retain information.
3 to 6 weeks if you have some experience.