Mastering System Design Interviews: 5 Key Tips for Success
Techniques, resources & practical advice to crack the System Design Interview
Introduction
System Design Interviews have become common in the software industry. It's uncommon to ask system design questions to college graduates. But as soon as you gain one or two years experience, you will be tested on your system design skills.
System Design Interviews are intentionally vague and open-ended. They not only test a candidate’s design skills but also communication skills. The candidate is in the driver’s seat in such interviews and is supposed to drive the discussion.
There is a common misconception among the candidates that System Design interview is all about showing off your knowledge and doesn’t test your problem solving skills. Before my first system design interview, I used to think “Well, If I draw a bunch of boxes and talk about technologies such as Lambda, Kafka, Redis, etc, I would easily crack the interview”. My first system design interview was a disaster but it was an excellent learning experience.
In these interviews, candidates are either asked to design a large scale system such as Twitter, Facebook, or a sub-system like post scheduling system or number of concurrent viewers on website. Since there are variety of software systems & each has it’s own challenges, candidates often get confused on how to prepare for System Design interviews.
Over the past few years, I have interviewed at many companies ranging from startups to Tech giants. I have successfully cleared the system design rounds in majority of these companies. However, in the beginning, I have faced multiple failures. With time, I started building expertise and didn’t repeat the same mistakes.
In this article, I am going to share few tips that would help you crack the System Design round in your next company. I will also touch upon few common mistakes that one must avoid during the interviews in few sections. Additionally, it will help you become a better engineer and architect a robust system in your current company. Let’s begin our journey and understand the key to crack the interview.
Tip 1: Understand the fundamentals thoroughly
To succeed in system design interviews, it's crucial to have a strong grasp of the fundamentals. Many candidates memorise the solutions to system design problems. This technique doesn’t work always. Also, it might help you crack the interview but won’t improve your design skills. Moreover, it is impractical to memorise the solutions given that there are more than thousand different software systems.
While designing a system, there is no right or wrong answer. A system design problem can have more than one solution. For eg:- You can either use WebSockets or HTTP request while designing a messaging app like WhatsApp. However, you need to justify why you are using one solution over the other.
You can make the right decision only when you understand the fundamentals very well. It’s essential to have a conceptual clarity of the problem as well as the different tech choices.
The best way to understand the fundamentals is to extensively read about different systems & techniques that you will use. One needs to dive deep into each of the systems and gain conceptual clarity. For eg: - It’s not just sufficient to tell the interviewer that you will use Redis for caching. You need to also tell the caching strategy, eviction policy, TTL (Time To Live), expected cache hit rate, etc. Hence, it is necessary to explore concepts such as Caching, Queuing, LoadBalancers, CDN, DNS, etc in detail.
Having a good technical depth helps you make the right trade-offs and choose the solution that meets the requirements. The best way to speed up and gain expertise is to do a real-world project. Building things on your own boosts your confidence and helps you connect the missing pieces as well.
Tip 2 : Read Tech blogs/papers
After understanding the basic concepts, the next thing is to read the tech blogs or research papers. Tech giants like Netflix, Amazon, Microsoft, Google, Meta frequently post their experiences on tech blogs. Additionally, there are many research papers that companies publish in different conferences.
These resources are best to improve one’s knowledge and gain sufficient technical breadth. A common observation is that there exist multiple software solutions to solve one problem. For eg:- To solve distributed caching, we have Redis, Memcache, Aerospike, Voldemort, etc. Examining the research papers will enlighten you why each solution is different and built for different requirement.
One common ask in the interviews is to build a scalable system. Many a times, in our full-time jobs, we may or may not get the opportunity to work on scalable systems. In such cases, reading someone else’s experience helps us view a problem from a different angle.
Also, we get sufficient context by reading solutions to problems that we haven’t heard of. For eg:- If you are working on payment systems in your full-time job, you won’t have any idea of how video processing systems work. Company blogs and research papers help bridge this gap.
Personally, I have found papers published by Meta to be very useful. Following are few papers & articles that I found useful :-
Tip 3: Improve communication skills
One can gain technical expertise by reading tech blogs but that is not sufficient for cracking the interviews. You must effectively communicate your solution to the interviewer. After all, software development is all about collaboration and working with multiple stakeholders.
Once I was interviewing a candidate and he started white boarding the solution without asking any questions related to the design problem. He came up with a solution that didn’t meet the requirements of my problem statement.
It is wrong to assume that you and your interviewer are thinking the same. Hence, one must be proactive and ask the right questions to clarify the problem statement.
When a candidate doesn’t communicate effectively, often interviewers don’t understand the solution. They tend to ask more questions and at times, the solution seems confusing. Hence, one needs to be mindful of what one is presenting and explain in simple words.
A candidate is supposed to be in the driver’s seat during the interview. He/she is expected to explain how the system will solve the design problem. It is a good practice to ask the interviewers if they have any questions while you are explaining your design. Also, one must justify why a particular solution is opted over other and list the pros/cons of each.
Tip 4: Form a study group
I started my system design interview journey in early 2019. I used to randomly browse through tech blogs, create notes, and go through youtube videos. One of the biggest mistake that I made was not studying together with friends.
When you form a study group, you debate ideas and come across different perspectives. The group study exercise also helps broaden your horizons & enlightens you with innovative solutions.
Moreover, many a times, we often overlook few hard concepts and don’t understand the reasoning behind it. If your friend knows about it and explains it to you, it helps you in the long-term. For eg:- I never understood why Twitter uses pull-model for celebrities and push-model for non-celebrity users while generating the news feed. One of my friend explained me and I can still explain why Twitter made this choice.
You can form a study group with your friends or also ask interested people on the internet. During the 2020 pandemic lockdown, I came across a popular study group called “SDE Skills”. I joined the group and we used to have different sessions during the weekends. I was able to crack Microsoft’s interview and landed a job offer the same year.
Tip 5: Mock interviews
I have seen many good candidates fumble during the interviews due to stress. It has happened to me as well in the past.
You might give your best while preparing for the interviews. You might have all the knowledge of building scalable systems. But on the day of the interview, if you become nervous and don’t come up with a good design, then it’s heart-breaking.
In order to overcome the interview anxiety, it is better to give some mock interviews. It helps you warm up for the actual interview. The mock interview feedback also helps you identify your weak areas. You can work on your weak areas and not repeat the same mistakes in a real interview.
Mock interviews boost your morale and help you overcome the fear. You can ask your friend to conduct a mock interview or leverage your study group. Additionally, there are numerous videos on youtube with mock interviews, which you can watch.
Conclusion
System design is a vast and a complex topic. The first step to become an expert in designing systems is to master the fundamentals.
Tech blogs and research papers help you widen your knowledge and offer unique perspectives. It helps you design better systems by understanding solutions to common design problems.
Communication skills play an important role during the interviewing process. You need to actively communicate and explain the solution to your interviews. Furthermore, you need to ask the right questions before diving into the solutions.
Mock interviews help you overcome the fear of interviews and raise your confidence. You can form a study group, discuss and debate ideas. This also helps you network with folks in the industry and improve your knowledge.
Interview preparation journey is not a sprint but a marathon. Rejections are common during the interviews. However, every rejection should be a learning experience. A rejection doesn’t mean that you aren’t good enough and hence, one shouldn’t take it personally.
Thanks for reading the article! Before you go:
You can share your thoughts on the article in the comments below.