What makes a system design interview candidate stand out, and what can tank their interview? It can be disappointing to interview a promising candidate, only for them to overlook some vital aspect of a solution. Equally disappointing is the uneasy feeling of leaving an interview, as the candidate, and not knowing if you left the best impression possible.
With questions like “Design Twitter,” system design interviews can seem open-ended, vague, and almost conversational in nature. At the same time, interviewers are assessing your technical knowledge to see just how well-acquainted you are with the system you created. As an interview candidate, it can feel like juggling multiple balls, and it’s tricky to figure out which ones you absolutely cannot afford to drop.
In this article, we’ll discuss some common mistakes that come up in system design interviews and some advice on how to avoid them.
Let’s dive right in!
We’ll cover:
Try one of our 300+ courses and learning paths: Grokking Modern System Design for Software Engineers & Managers.
First, let’s talk about what interviewers want to know about you. When interviewers give you a system design question, they’re not just looking for a working solution and good communication skills.
Interviewers also want to answer the following questions: How many different solutions can this person come up with in a methodical way? Can this person do a pros-and-cons analysis of different approaches? What is the depth of their answers? Is this person thinking about the system’s lifetime and how it will evolve as more users and data come in? Can this person explain different scenarios end-to-end with concrete examples?
It’s important to note that not every interviewer will gauge your strengths using the questions above! Think of these questions as general guidelines for contextualizing answers as you practice solving system design questions. You want your interviewer to be able to have a definite answer to these questions whenever possible.
Now, let’s move on to some common red flags that interviewers see during system design interviews!
Finding out the functional and non-functional requirements of a system is one of the first things you should clarify with your interviewer.
System design interview questions are often intentionally vague, and it’s your responsibility to uncover the information needed to execute your design. When candidates jump into designing a solution without asking enough clarifying questions, they can make assumptions about how a system should function and perform.
If your interviewer doesn’t offer enough information, feel free to ask, “What are the functional and non-functional requirements of the system we are designing?”
Take the time to find out exactly what components your system needs to include and its expected performance.
There should probably be an award for the first person to design a system that never fails. Virtually all systems have bottlenecks, and all system designs are capable of having some kind of fault or vulnerability that can lead to total system failure.
Alright, “total system” failure might be a touch dramatic, but it’s meant to underscore the importance of knowing your system’s weaknesses. As a system designer, you must be able to figure out a solution to non-transient, permanent issues, or the system will fail on you.
Being aware of these faults means you can plan ahead with fail-safe measures for getting systems back online at 100% availability. Be sure to provide a solution (or multiple solutions) for points of failure to show your interviewer that you are considering the design from every possible angle.
Considering faults and points of failure can open up the discussion of whether or not capacity will become an issue down the road. If you find that your system design could fail under intense loads, then ask your interviewer what the intended load for this system is before thinking of ways to make your system more scalable.
Note: Some of the biggest (and most common) system vulnerabilities to look for are related to processing and user input data (e.g., security loopholes, SQL injection).
There are countless possible solutions you could provide for a system design interview question, and chances are you won’t be able to consider the tradeoffs for all of them. However, you don’t want to make the mistake of not considering any tradeoffs.
Every system design has strengths and weaknesses. Be sure to consider the scalability, availability, maintainability, and reliability of different solutions.
During the interview, your interviewer will assess your ability to communicate with others. How well can you work in a team? If you stay silent the entire time without asking questions or seeking feedback from your interviewer, it could give the impression that you are uncooperative or independent to a fault. At the other end of the spectrum, you risk dominating the conversation or over-communicating with irrelevant information.
Both of these issues can be improved through practice. When you practice solving system design problems, try walking yourself or someone else through your solution. Do you give them enough time to ask questions? Are your explanations clear and concise?
Finally, make sure that you have been able to accomplish the following: Define the problem Identify all constraints Identify the features needed to design the system Identify the most critical components to prioritize
Communication is an art form, and not one that is easily mastered!
Take the time to articulate the thought process behind your choices carefully.
You need to be able to explain why you made a design decision, full stop. Being unable to justify a design decision is one of the more severe mistakes that can be made during a system design interview because it can leave the impression that you don’t know what you’re doing.
Remember, one of a system design interviewer’s main goals is to discover your thought process and understand how you make your decisions. They will ask you questions about why you went with one technology over another or other aspects of your system. They want to know what you think is the most appropriate solution to a given problem and why.
For this reason, it’s imperative to familiarize yourself with as many different technologies and system design patterns as possible. One way to get comfortable talking about these technologies and designs is to explain them to a non-technical person in a way that makes sense.
Jumping straight into the details is one mistake that can lead to down-leveling. Down-leveling occurs when you apply for a job at a certain level but fail to meet the expectations for the level you’re applying to. So, for instance, if you were to apply for a senior SWE position but gave mid-level SWE interview answers, they might offer you a position at that level instead.
So, be sure to talk through your high-level system design details first. It’s important to ensure you aren’t jumping straight into the low-level aspects of your system design at the beginning of your interview.
Note: Experienced system designers will not only focus on the different software components and how they interact with each other but on the entire lifetime of a system and how it evolves. They will think about ways to make systems more efficient, resilient, and scalable.
Try one of our 300+ courses and learning paths: Grokking Modern System Design for Software Engineers & Managers.
Although we covered several mistakes to avoid during system design interviews, the biggest mistake to avoid is not preparing at all. The more you practice solving system design questions, the easier it will be to look at your solutions from multiple angles instinctively. This mindset will not only help you come up with better, more creative solutions, but it will also help you find ways to sustain and support those solutions efficiently.
Learning system design is not only one of the most effective ways to increase your value as a software engineer, but it’s also one of the best ways to prove that you’re ready for more senior roles. So, if you’re a software engineer who has been wondering what the next step is in your career, try learning system design! Educative is a leading expert in the system design field, and we prioritize continuously updating our learning resources to provide you with the best, most relevant courses.
Happy learning!
To get started learning these concepts and more, check out Educative’s Grokking Modern System Design course.
Free Resources