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.
Discover the Who.
Let’s continue with our YT example. Before you start developing your system, take a step back and think of the users who will use it. Think of the broad categories of people who would interact with YT. This is where it helps to be observant. When I think of YT, I see 3 broad kinds of users.
Creators- Someone whose primary purpose/engagement with the platform is to create/publish their content and share it with others. For any platform, we want to create a refined system that doesn’t suppress smaller creators (great discovery mechanics) while also rewarding larger creators (to create incentives for people to reach the higher echelons).
Viewers- This will make up the majority of your user base (optimize accordingly).
Advertisers- Since YT is an ad-supported platform, we know that advertisers are the primary customers. We can design user experience and features accordingly.
Make sure you sketch out these user personas in your interview. Even if their implementation details don’t diverge too much, this process allows you to demonstrate your ability to think beyond the code- which is a very attractive trait.
Once we identify the types of users (the who) we can start to look into designing the incentives for them to interact with the system. These incentives will allow us to add more users and ensure that we don’t lose existing users to churn.
Develop the Whats and the Whys
Now is when we develop the whats (incentives/procedures) and the whys (why someone would interact with that kind of content). Take the creators on YT. Why would a creator take the time to create and share their work? Money and fame are the obvious answers, but most creators don’t make it that far. Many people started putting up videos because they wanted to store and share cool great memories/ideas. Sharing online would allow them to interact with other people who shared their interests. I started online content creation as a way to demonstrate my skills. Therefore to make your YouTube clone valuable for a creator, you want to lower the barriers to entry for publishing new content.
Once a creator starts publishing, you also want them to have detailed feedback so that they can continue to fine-tune their content and make things that viewers engage with. For example, Youtube Studio provides a lot of metrics, including where people find our videos. Following is what mine looks like right now.
Now we move on to viewers. Why would they watch? Entertainment, learning something specific, and research would be plausible reasons. So from a user perspective, you want to make videos easy to find. Recommending other videos that they might like is also a good avenue to explore. This will keep them on your platform longer. Some level of feedback would be great. That’s why we had the like and dislike buttons (before YT lost its soul and removed the dislike button). And lastly, viewers are more likely to have a good time if there is some way for them to have a community. The comments section/community posts are great places for that. Comments sections in any community will be filled with running jokes and other community-related text. This is not to be overlooked. A community makes the creator infinitely more monetizable, which makes our system more valuable.
Lastly, what would advertisers gain from coming to the platform? Eyeballs and an ability to align with different people/brands. How can we design the systems to suit them? I’ll let you think about that. As an interesting reference material, I want you to study why Reels and TikTok’s vaunted recommendation algorithm have been commercial failures and what you can learn from that. I’ll do a post on that soon.
At this stage, we have personas ready and we have a set of incentives for them. Now is the time to tie them together in a system.
Build a Self-Reinforcing System
Once we know why different personas will use the system we built we can design the incentives and technical aspects accordingly. How do we do this effectively? Simple- design your system in a way where the feedback causes a positive feedback loop. Following is a simple example of what a positive loop looks like.

Look at how elegantly YT did this. Originally creators started putting their videos to share their stuff. YT made it easy for them to do so by consolidating easy uploads. As more creators shared their work, users interested in those fields came to watch them. As the user base grows, we have more people interested in different niches coming in. Suddenly the third persona (advertisers) can align themselves with creators that represent their brand. As this happens, more creators join and a positive spiral is created. This also synergizes very well with the principles of the Network Effect, which we covered over here.
Systems that reinforce themselves allow for the snowball effect. Don’t underestimate the potency of that. With all this preparation out of the way, it’s time to flex your developer muscles.
Get into the How
So far, we’ve thought mostly as a designer or an architect. Now we change that.
At this stage, we have a high-level system sketched out. First, we will in the major components with relevant technologies, tools, and Entities (such as going over the OO design of our users and how we will store/search information). With the groundwork out of the way, it is time for you to show off your domain expertise. I will talk about writing recommendation systems and how representing users as nodes in a graph might be useful. Network experts can get into the exact protocols for streaming and encoding videos efficiently. This is where you go wild and show off your technical know-how and experience. For fields you don’t know much about, don’t waste your time. Spend a few minutes and bring it back to your strengths.
The benefit of holding this off until later is simple. By taking a high-level view of the system first, we can see the various parts that make it work. This way you will make sure that you don’t miss any important details/perspectives in your answers.
Closing
I like to use frameworks because it gives you a quick template with which you can gain confidence and attack questions. Interviews are very overwhelming settings, especially if it’s a job you really want. A framework is a great way to beat the jitters and focus your mind on the problem at hand. If you’re a developer who has truly prepared well, then your knowledge will carry you over the finish line. The framework is just there to help you start off well.
The goal of this framework in particular is to stop you from jumping into the coding too quickly and instead focus on following a first-principles approach to building your systems. Test it out, and you will see some great results in your interviews.
Loved the post? Hate it? Want to talk to me about your crypto portfolio? Get my predictions on the UCL or MMA PPVs? Want an in-depth analysis of the best chocolate milk brands? Reach out to me by replying to this email, in the comments, or using the links below.
Reach out to me
Use the links below to check out my other content, learn more about tutoring, reach out to me about projects, or just to say hi.
Small Snippets about Tech, AI and Machine Learning over here
AI Newsletter- https://artificialintelligencemadesimple.substack.com/
My grandma's favorite Tech Newsletter- https://codinginterviewsmadesimple.substack.com/
Read my articles on Medium: https://rb.gy/zn1aiu
My YouTube: https://rb.gy/88iwdd
Reach out to me on LinkedIn. Let’s connect: https://rb.gy/m5ok2y
My Instagram: https://rb.gy/gmvuy9
My Twitter: https://twitter.com/Machine01776819