3 tips: How to answer System Design Interview Questions
Tags: systems, systemdesign, tutorial, career
Published: 2023-05-04 18:48:44

> *This article was written by Educative's Co-founder and CEO, Fahim ul Haq.*

The tech interview process has multiple rounds — from coding interviews to System Design Interviews. System Design Interviews are commonplace at FAANG companies like Netflix and Amazon, and small tech companies. System Design Interview questions prompt you to mockup a high-level design of a large-scale distributed system. 

However, creating a high-level design isn't the only skill that interviewers need candidates to demonstrate. They also need evidence of an appropriate depth of knowledge for the desired role — which comes through discussion. 

To make the strongest impression, you need to demonstrate competency in both of these areas within a **limited time**. So, how should you approach answering [System Design Interview](https://www.educative.io/blog/how-to-prepare-system-design-interview?eid=5082902844932096) questions, and what exactly should you prioritize?

As a former FAANG systems engineer who has conducted hundreds of System Design Interviews myself, I'll be sharing **3 tips** for effectively answering System Design Interview questions. But first, let's take a closer look at some of the questions you might encounter.

**We'll cover:**
* System Design Interview Questions and Answers
* 3 tips for answerings System Design Interview questions
  * 1. Discuss trade-offs with your interviewers
  * 2. Manage your time efficiently
  * 3. Start wide and end deep
* Mastering System Design Interview Questions and Answers


## System Design Interview Questions and Answers

When interviewing for a software engineering role, you could be asked to design a variety of real-world design problems.

Common System Design problems can include:
* Design a URL shortening service like [TinyURL](https://www.educative.io/blog/system-design-tinyurl-instagram?eid=5082902844932096)
* Design a messaging service (e.g., WhatsApp or Facebook Messenger)
* Design YouTube or a video-streaming service
* Design a search engine like Google
* Design a newsfeed
* Design a file sharing service (e.g., Dropbox or Google Drive)
* Design a web crawler
* Design a rideshare service (e.g., Uber, Lyft)

System Design Interview questions are **intentionally vague**, and can be as simple as, "How would you design a web crawler?" Your interviewer is trying to evaluate your **investigative abilities**. Do you know where to start, and what questions to ask? Are you capable of doing the legwork needed to succeed in practical settings with real-world problems? 

That's why from that point on, your priority should be to **clarify as much as you can** about the requirements of the system they've asked for.  

Then, you can move on to complete a high-level design based on what you know.

![SDI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5m5j1b9k7kgjy1sspjhx.png)

One thing to note is that there isn't a one-to-one relationship between System Design Interview questions and answers. By this, I mean that there can be **multiple correct answers** to any given design problem. 

That said, at a high level, there are some steps you should cover when answering a System Design question.

Your System Design Interview answer should check off the following boxes:
* **Requirements**: Compile a list of requirements, which can be clarified by asking the interviewer questions about the system. There are two types of requirements you should track down:
  * **Functional requirements**: These are the fundamental features and specifications required to meet the expectations of the system's users. 
  * **Non-functional requirements**: These are features or specifications that improve the system's overall functionality. 
* **Estimation**: Estimate the hardware and infrastructure needed to meet the requirements at the desired scale. Identify the number of users, peak load, and resources required for each user. 
* **Storage:** Define the storage or database schema (optional) by considering the types of data your system will need to store, such as user profiles, transaction records, or multimedia content.
* **High-level design**: High-level design involves deciding which building blocks of system design will be used, along with any unique components specific to the design problem (e.g., cache, load balancer, etc.). Think about how these components will interact and communicate. 
* **APIs**: Define which interfaces your end users will interact with to call various services within the system.
* **Detailed design**: Take any non-functional requirements into account and produce a final outline of the components and technologies needed that improves on the base system.
* **Evaluation**: Compare your design to the requirements, and acknowledge any trade-offs made and improving aspects of the design.
* **Distinctive components**: Discuss components and features that are unique to your particular system, and explain why they enhance the system.

> You can memorize these checkboxes with the [RESHADED framework](https://www.educative.io/blog/use-reshaded-for-system-design-interviews?eid=5082902844932096).


## 3 tips for answering System Design Interview questions

Effectively answering a System Design Interview question relies on your ability to demonstrate your thought process and domain-specific knowledge to your interviewers. With many possible answers to a given design question, *how* you answer a question can be as important as the answer itself. In other words, presentation matters! 

Still, I've seen highly experienced engineers leave underwhelming impressions during interviews due to a few preventable mistakes.

Here are **3 tips** to help ensure your answers to System Design Interview questions leave a positive impression on your interviewers. 


### 1. Discuss trade-offs with your interviewers

When participating in System Design Interviews, it's critical to demonstrate your ability to recognize and evaluate trade-offs, as it reflects your understanding of various design aspects and their implications. 

> Designing a large-scale distributed system is rarely straightforward. As we mentioned earlier, there are endless ways to mix and match different components of a system, each with their own strengths and weaknesses.

Trade-offs can occur between various requirements of a system, such as:
* **Performance vs. Scalability**: Systems that are optimized for performance may have to compromise their scalability, and vice versa.
* **Consistency vs. Availability**: Optimizing consistency in a system can sacrifice availability, and vice versa.
* **Reliability vs. Cost**: High reliability increases a system's cost because it often requires redundancy and fault tolerance.

Every solution comes with a trade-off. Your goal is to choose the solution with the most workable trade-off. Ultimately, the solution you choose should have a trade-off that doesn’t severely impact the most important requirements of your system.

**Discussing trade-offs shows interviewers** that you can consider users’ needs, business goals, and constraints, and prioritize the right use cases for a system. As you land on your decision, be sure to narrate your thought process to demonstrate you're making an informed decision (and when in doubt, you can ask more clarifying questions about requirements and constraints).

![Trade-offs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uyblbflu6cpra52h1vi0.png)



### 2. Manage your time efficiently  

Time is of the essence in the interview. You have anywhere from a 30 to 45-minute window to complete a solution, evaluate it, and engage in feedback and discussion. 
For a 45-minute window, you should budget:
* 5 minutes for introductions and icebreakers
* 5-10 minutes for requirements gathering and clarifying questions 
* 20-25 minutes for your design process
* 5-10 minutes for addressing feedback and discussing your solution

Keep in mind that your goal is **not** to create a perfect design within this timeframe. Most interviewers understand the constraints you're working under and will not expect a flawless solution. 

To best manage your time, focus on the following:
* **Complete a high-level design**: Prioritize completing a high-level design that addresses the main requirements of the system.
* **Monitor the time**: Regularly check the time to ensure you're on track with the time that you've budgeted for each phase. 
* **Be concise**: Avoid unnecessary elaboration at all costs, and learn to present your ideas and thought process clearly and concisely. Do not go off on unrelated tangents. 
* **Leave time for discussion**: Always reserve enough time for discussions, feedback, and questions at the end of the interview.


### 3. Start wide and end deep

By the end of your interview, you should have some time to speak deeper on some topics that showcase your knowledge for your desired role. 

For instance, depending on the level (or seniority) of the role you're applying to, you'll be expected to have knowledge of different System Design concepts:
* **Junior System Designers**: At this level, you're expected to possess at least a basic understanding of system design principles, concepts, and best practices. You'll need to know how to implement small components or features based on given specifications, and understand trade-offs, performance, and scalability at a basic level. 
* **Mid-level System Designers**: At this level, you'll be expected to have a solid grasp of system design, and experience in designing, developing, and implementing system components. Interviewers will expect you to be able to identify and address performance, scalability, and reliability issues in addition to being well-versed in various architectural styles, design patterns, and their trade-offs. 
* **Senior System Designers**: At the senior level, you should have strong expertise in this field that enables you to not only tackle some of the most challenging design issues, but also the insight to address long-term issues that may affect a system over its lifetime. In other words, you should be able to speak toward bottlenecks and long-term scalability of the system. In addition, you should feel confident enough to lead and **mentor other designers**, in regard to system design principles, concepts, and best practices. 

* **Principal/Lead System Designers**: Professionals at this level possess both strong expertise in system design, but also extensive knowledge of the field, its history, and industry trends. These designers are often recognized for designing and implementing complex and large-scale systems. They have a deep and thorough understanding of trade-offs, performance optimizations, and long-term scalability. 

The best way to ensure you get the time to address these specific talking points is by starting **wide** and ending **deep**.
* Start the conversation by discussing broad solutions and components
* As the conversation progresses, focus on a handful of things in greater depth

This approach will help you avoid a **common mistake** of going too deep into the complexities of certain aspects of your system early in your interview. Not only would you risk an incomplete solution by doing this — you might also leave your interviewers with the impression that you're unable to prioritize your assigned task.

This approach also allows you a chance to demonstrate your knowledge or awareness of how emerging and in-demand technologies can be implemented to improve your solution. For instance, as part of the *Evaluation* stage of *RESHADED* method we discussed earlier, you can use this stage to discuss how [machine learning](https://www.educative.io/blog/machine-learning-edge-system-design?eid=5082902844932096) technologies and algorithms could be leveraged to further improve your system. 


## Mastering System Design Interview Questions and Answers

There are various possible answers to any given System Design question, which makes **mastering your approach just as crucial as honing your technical skills**. 

To effectively answer System Design Interview questions in the engineering interview, be sure to:
* Discuss trade-offs when deciding on a solution
* Keep the time, especially to ensure you can complete a high-level design
* Showcase your level-specific knowledge with discussion

Keep these tips in mind as you prepare for the interview, and be sure to do mock interviews to ensure you get real-time practice performing them on the spot. 

I provide actionable steps on how to implement these tips — along with other best practices — in **my free course**: [**The System Design Interview Prep Handbook**](https://www.educative.io/courses/system-design-interview-handbook?utm_campaign=system_design&utm_source=medium&utm_medium=text&utm_content=&utm_term=&eid=5082902844932096). 

Compiling best practices from my 15+ years of experience designing distributed systems and conducting System Design Interviews, you'll come away from the course knowing the following: 
* Specific talking points for your desired level/role
* A 3-step method to demonstrate your understanding of trade-offs
* Do's and Don'ts for showing your culture fit and technical skillset
* A deeper, applied look at the 8-step RESHADED framework

As you work to master the System Design Interview, you're investing in an essential skill to **keep advancing in your tech career**. I'm honored to support you in your journey, and hope you found this article helpful.

*Happy learning!*

### Continue learning about System Design Interview Questions on Educative
* [SQL vs noSQL: Choosing a database for your project](https://www.educative.io/blog/sql-vs-nosql-choosing-a-database?eid=5082902844932096)
* [Design the Uber backend: System design walkthrough](https://www.educative.io/blog/uber-backend-system-design?eid=5082902844932096)
* [24 microservices interview questions and answers to land that job](https://www.educative.io/blog/microservices-interview-questions-and-answers?eid=5082902844932096)


### Start a discussion
What other helpful tips do you have for grokking the System Design interview? Was this article helpful? Let us know in the comments below!