Preparing for Interviews <Part 2: System Design>

Aarti Dalvi
4 min readJun 3, 2022

--

So what is a System Design Interview anyway?

As software engineers, our scope is pretty limited when we start our careers. The positions are commonly called “entry-level jobs”. Things are pretty much laid out, we don’t have to worry a lot about the entire system to design a solution (senior engineers/reviewers do most of it) and in the interviews, we are tested mostly on our problem solving or coding skills.

But, as we become more and more aware of the systems and get experienced, we are expected to handle broader challenges. This involves not just developing one feature but understanding the use case, business impact, understanding the system architecture, understanding the volume of the data you’ll be dealing with, etc., and managing it in the most efficient and sustainable way without affecting the rest of the system.

And here, my friends, System Design comes into the picture.

The Good and The Bad:

The good thing about these interviews is you pretty much solve these types of issues in your everyday work, and as you start studying for these interviews, you’ll be able to map your work to the system design concepts.

Another good thing is, as you learn new things in the tech industry, .. say non-relational database which you have not worked on but interests you, you can pursue it and see how you like it. While you prepare for system design interviews, you get to know the latest trends.

The only vague/bad part of these interviews is you might not always know if you cracked this interview.

What helps? A lot of mock interviews. The only way to get better at System design interviews is to have a lot of discussions. Every engineer thinks differently about a problem and has different expectations. Since this is a very open-ended area, testing your approaches helps and prepares you better for any surprises in the interview.

Where do I start?

During the undergrad/grad courses, we come across a lot of concepts like OS, Networking, Databases, Security, etc. That knowledge is going to be very useful if you remember it. If not, we just need to refresh or learn. I’m sharing a lot of resources at the bottom of this blog to help get started.

Okay, enough of this background, but what does a System Design Interview look like and how should I approach it?

The interviewer will start the interview and explain a system that they want you to design in a couple of lines.

Next, you should ask a lot of questions to define the scope of the system — the interviewer wants you to ask a lot of questions and that’s how they see how you address the situation when you’re given a vague problem.

Propose a couple of features that you can design the system for. While preparing the list, make sure to get the hints about what the interviewer is interested in and what features you find comfortable to design. Do not get into too many details too soon.

Now start designing the system for 1 minimal feature first — ask some clarifying questions, propose a solution, draw a block diagram and move on to the rest of the features of the system. The resources below should help you a lot in preparing. There are a lot of videos available that take you from the very first step to the end for a better understanding.

Ask the interviewer if the direction you’re going in, is the direction that interviewer is looking for — that’s the rule of every interview, always communicate and communicate clearly.

The interview is up when the features are pretty much designed. Visit the system again to check for any obvious issues missed or ask the interviewer. For brownie points at the last minute propose some improvements that could be done.

One of my friends shared how he thinks about these interviews. “One (both interviewer and interviewee) should usually follow a ‘T’ approach in system design interviews. Just like the shape of the letter ‘T’, talk a bit about the breadth of the problems to solve and how to solve them. But also pick one area to go in-depth about.”

Getting into more details of system design over a single blog is pretty much impossible and I definitely do not want to reinvent the wheel :), so here are some resources that I find useful. Do contribute to them if you learn something new and share knowledge with others who’re in the same boat — that’s also another way to validate your learnings and get better at system design interviews. :)

Useful Resources:

https://www.linkedin.com/company/bytebytego/

https://github.com/InterviewReady/system-design-resources/

https://docs.google.com/document/d/1KfyhNgojjp-0fyBFqqV7jaGErPGFfo1BgnuN9_yDIkk/edit?usp=sharing

https://github.com/kilimchoi/engineering-blogs

https://www.hiredintech.com/system-design

About the Author: Aarti Dalvi

Aarti is Software Engineer at Microsoft Azure and has been in the tech industry for over 7 years. She is passionate about Distributed System and helping students. She is an advocate of diversity and inclusion at the workplace and enjoys helping and empowering others via several platforms. She is also a board member and a volunteer at several organizations like Bellevue College, AnitaB.org, Women @ Microsoft, Women Who Code, and Indian Women in Computing.

In her recent efforts for helping students or professionals in job search, she has launched, GRADMASTERS!

--

--