Systems Design is among the more advanced and important topics for those wishing to step up in their software career. Even if you’re a fresh graduate, it’s a good idea to acquaint yourself with the essentials of systems design so you know the framework of the system you’re working within. Systems design engineers are in high demand in the job market as well, with UX becoming the norm of the day and systems designing becoming the top-most important factor. Companies across the globe are therefore looking for systems design experts, making the systems design interview a must-crack for the candidates. To understand the nature of a systems design interview and the questions asked there, it is important to understand the context of these interviews.
While interviews for initial stages of your software career will probably be focused more on coding skills and programming abilities, as you progress higher, you’ll be required to know the ins and outs of designing complex, dynamic systems that are scalable in nature. This is one of the prime focus of questions asked in the systems design interview. The biggest struggle in dealing with systems design interviews comes with the ambiguity and open-ended nature of the question asked. This lack of structure can be intimidating for many aspirants.
To help with this, we’ll provide a comprehensive breakdown of systems design interview questions in the following article.
System Design Interview Process
The System Design Interview (SDI) typically spans 45-minute to 1 hour during which one or more technical or non-technical interviewers assess a candidate's ability to design and architect large-scale systems.
It generally starts with the interviewer defining a high-level problem or scenario and requires the candidate to propose a high-level design for the system, with focus on the overall architecture, key components, trade-offs, their design choices, scalability, reliability, and more. Interviewees are expected to effectively communicate their strong understanding of systems design principles, analyze high-level problems and ideate their best solutions.
How are System Design Interviews Different From Other Coding Interviews
System design interviews differ from other coding interviews in that they are generally longer, more open-ended, and focus on the overall focus on designing and architecting large-scale systems rather than a specific problem.
Given its complexity and vastness, there isn't an optimal solution to system design and architecture problems. So, the SDI is regarded more of a brainstorming session and a collaborative discussion as opposed to a coding interview that focuses more on coding skills and problem-solving abilities.
Watch these videos
An Overview of Systems Design Interview Questions
The precise questions that you face during the interview will depend vastly on the role you’re sitting for and the systems you’ll be working on. However, more generally speaking, you’ll be asked to elaborate on your experience of designing and implementing dynamic systems. Any project that you’ve done so far can come in handy for this question. For beginners, it is important to practice these questions regularly. This will help you feel really comfortable in a systems design interview. Apart from that, you’ll be asked some questions along the following lines:
- How will you design an Amazon-like frequently visited page, displaying the last 5-10 items the customer saw?
- How will you design an online multiplayer game in a concurrent manner?
- How will you design a basic URL compression system?
- What does Dropbox’s system architecture look like?
- How will you design a multimedia sharing website, and how will the thumbnails, images, videos be saved? How will you decide on the CDN to use?
- How will you design a product that uses mapping services - like ATM finder, shop finder, ride hailing app, etc?
- Design a price comparison website that compares prices from different ecommerce sites.
- Design a video conferencing system like WebEx or Google Meets or Zoom.
As you can see, most of these questions are extremely holistic in nature and test the interviewee on various skills. At first glance, being asked to design an entire system of the nature of Zoom might seem absurd. However, the purpose of these questions is not to seek the correct answers. You should remember this factor while you're preparing for a systems design interview.
These questions are asked for two main reasons - to test your knowledge of different stages involved in systems design, and to simulate a real-world scenario and test your responses. You don’t need to focus on getting the answer correct. Your focus should be on the following things:
- How are you handling challenges? Are you able to incorporate constructive feedback into your systems design?
- Do you have information about the different tradeoffs that various design decisions involve? It’s important to know the pros/cons and different consequences of a design decision.
- Are you able to communicate all technical details regarding the different dynamic elements of your system?
- Are you following a coherent, logical flow of thought to arrive at your answers and solutions?
The above-listed pointers will give you a good starting point for answering systems design interview questions. However, to truly ace the interview, you need a step-by-step plan by your side. Read on for that!
Read these articles
Acing the Systems Design Interview Preparation
Now that we’ve understood that the interview will mostly be around you trying to come up with a design outline for some or the other complex system, let’s look at a framework that you can use to structure your answer. You can also use this framework to arrive at your answer in a methodical manner. Here are the steps you can take:
Establish the design scope by clarifying the problem statement
Before you dive deeper into the problem at hand, you should take a few moments and clarify any doubts that you might have. You should know what exactly the problem statement is asking for. The worst thing you can do in this situation is just starting off with the design with half-baked information on the question statement. Further, since you only have limited time during your interview, you need to keep your solution as precise and to-the-point as possible. For that, you’ll need clarity.
To do that, here are some questions you can ask the interviewers:
- What are the use cases of the application?
- Which audience will be using the app?
- What is the expected traffic?
- How much collaboration is required on the application?
- How reliably does the system need to be and how much data will need to be stored?
Figure out rough bandwidth requirements
With the information collected from the first step, you’ll have a clearer understanding of the system that you’re about to design. Using that, you can begin to make some rough estimates for storage and bandwidth requirements. You’ll need to do basic generalizations and maths, like assuming the average traffic, multiplying the number of users with the average request size, and more, depending on your requirements.
Create a high-level design
Whenever you are practicing for a systems design interview, it is important to focus on the high-level design that you wish to use. With the basic assumptions in place, you should start thinking about a rough architecture for the system. This is what a high-level design is. Illustrate things like file storage, database, task queues, caching, web servers, load balancers, and so on. The idea of high-level design architecture is to showcase all the essential components that are needed to create the system at hand. While creating the high-level design, make sure to crosscheck with the interviewer to ensure that you aren’t missing out on anything. They’ll mostly give you a hint or a nudge if you forget some crucial component in your high-level design.
Work on the API design
Once you’ve sketched out your high-level design for the system, you can start working on some API endpoints for each dynamic component. For example, if you’re designing a YouTube-like system, you might need the following APIs, depending on the figures you’re including:
- viewVideo (videoID)
- uploadVideo (userID, title, description, video)
- videoSearch (query)
- comment (userID, videoID, comment)
Likewise, depending on the feature you add to your system, you’ll need that many APIs to handle those requests. Refer to multiple sources to educate yourself better about the API design related questions that are a major part of any systems design interview.
Create a data schema
By now, you have an understanding of all the requirements, trade offs, bandwidths, and data needed for the system to work. Now comes the time to finally decide the schema for the database. How will all the data that will come in and go out of your system be managed? You’ll need to compare the pros and cons of relational and non-relational databases. In this final stage, you’ll have to display your database skills and come up with a database architecture for your systems design.
Tips to Crack a System Design Interview
Here are some tips for succeeding in a System Design Interview:
- Practice brainstorming: Before you appear for the interview, try to come up with different open-ended problems and ideate as many potential solutions as possible. This will help you generate ideas and think creatively during the interview.
- Visualize the problem: Interviewers will be testing your ability to communicate your design choices and tradeoffs effectively, so drawing a diagram or visualizing the system can be of huge help.
- Don't jump to the solution: Make sure you understand the problem and the requirements before diving into the design. So, take a few minutes to think about the problem and your solution to come up with a more organized and thought-out solution.
- Take feedback into account: The interviewer may ask further questions or provide feedback for your design. So, be prepared to justify your decisions and show a willingness to learn to create a good impression.
- Participate in mock interviews: Mock interviews with ex-recruiters and experienced engineers can help you get more confident and comfortable with the SDI process. So, don't miss out on the opportunity to fine-tune your approach.
Systems design is seemingly a tricky task, but that’s only because it requires careful management of various dynamic elements. However, if you’re precise at what you do and have an eye for detail, systems design is just the field for you. It’s a higher-paying domain and puts you ahead of many software engineers by giving you access to the more crucial aspects of an application - the system design.
Keep the above information in mind while preparing for your next systems design interview, and we’re sure you’ll come out with flying colors!
Check out: How to become a Product Manager