A better way to approach Systems Design Interviews [Storytime Saturdays]
A systematic way to approach your Systems Design Interviews to not be overwhelmed.
Hey, it’s your favorite cult leader here 🐱👤
On Saturdays, I will cover stories/writeups covering various people’s experiences 📚📚. These stories will help you learn from the mistakes and successes of others. These stories will cover various topics like Leadership, Productivity, and Personal/Professional Development. Use these to zoom ahead on your goals 🚀🚀
To get access to all my articles and support my crippling chocolate milk addiction, consider subscribing if you haven’t already!
p.s. you can learn more about the paid plan here.
System Design interviews are particularly challenging for many people. Unlike Leetcode interviews, software architecture spans various domains and many different avenues. Leetcode questions are generally about one or two core ideas- you’re tested on your ability to find these core ideas and combine them in a coherent and organized manner. Systems Design Interviews, on the other hand, feature questions that are very ambiguous with a very large scope. This adds two huge problems for people studying for these interviews-
People don’t know what to study for. If we just went at System Design interview prep with no plan, we’d be overwhelmed. Every software system is built on decades of abstracts, architectural decisions, and ever-changing tools. Learning them all would be foolish, even if you had nothing else to do.
The scale of the questions makes it very easy to get distracted and end up focusing on esoteric details. This was a mistake I struggled with early on. When it came to interview questions like Design Twitter, I would spend wayy too long on the Recommendation Algorithms and the Data Pipelines, and almost no time on anything else. Systems design interviews are a delicate balancing act, where you have to both go deep enough to demonstrate your expertise and wide enough to capture the essential portions.
Problem 2 is especially pertinent when we consider that most questions tend to focus on Multi-Billion Dollar systems with a very unreasonable scope. A common question is “Design a video streaming platform like YouTube.” At first glance, this seems simple enough. We just have to design a video But when you get into it, there are so many parts to the platform. How do you recommend videos? How do we provide creators feedback/data? What kinds of protections do we want? How can we scale up efficiently as more users join (think of all the bytes that go into storing video likes, dislikes, and comments along with the video itself)? What about international law? YT won’t play certain videos in certain countries. How do we accommodate this (programmatically)? Take a second to think about how you will approach this question before, reading on.
Because the question is vague and high-level, people will tend to pigeonhole themselves into their strengths. This is good to showcase technical ability, but most likely you will miss important details/facets of the problem.
So how do we proceed? In this article, I will show you a specific framework that you can adopt to develop your systems design solutions. People I’ve worked with have used it to great success in their interviews. This framework focuses on having engineers take a step back and look at the system as a product. By looking at it from this perspective, we are able to identify the main components required to make the system work and build upon it. Once the skeleton is put in place, you can focus on your specialty- showing off your mastery in your domain. Thus, you’ll hit all the major points required to land those sweet offers.
Keep reading with a 7-day free trial
Subscribe to Technology Made Simple to keep reading this post and get 7 days of free access to the full post archives.