DEV Community

Fahim ul Haq
Fahim ul Haq

Posted on

Guide to Ace the System Design Interview: Junior vs. Senior Engineers

Preparing for System Design interviews can be overwhelming — especially at Big Tech or FAANG/MAANG companies, where expectations for candidates are exceptionally high.

However, there's one important thing to remember: These expectations will vary significantly depending on your target level.

Having been personally involved in hundreds of System Design interviews throughout my career – from both sides of the table – I have had the opportunity to observe the key differences in expectations for junior engineers vs. senior engineers.

I can use myself as an example. Early on in my career (including for my first role at Microsoft), interviewers were focused on assessing my understanding of functional requirements. As I advanced, it became clear that understanding how to navigate and communicate tradeoffs concerning nonfunctional requirements was the key to leveling up my career. For instance, in my interview at Meta, the focus pivoted to replication strategies, availability, and consistency models for storage systems.

In other words, as my career evolved, my System Design interview preparation strategies had to evolve, as well.

Today, I’ll share my insider's take – both as a candidate and as an interviewer – on how expectations for different level candidates play out at top companies. My goal is to help you focus your preparation around the kinds of System Design interview questions you will most likely encounter, and the scope of the answers that will be expected from you.

Let's break it down.

Question:
A simple question: why do I need to up-level myself?

Answer:
Leveling up is important in terms of career growth and compensation. Even a single level matters. For reference, the average compensation difference between an E4 and E5 at Meta is approximately $145,000.

Note: Companies have somewhat different responsibilities set for junior and senior engineering roles. For the sake of this blog, I will assume an engineer with 1-3 years of development experience as a junior and above that as a senior.

New to System Design interview prep? Take this free course to learn how to prepare, where to prepare from, and how to conduct yourself during a System Design interview:

Why do top companies conduct System Design interviews?

First, let me go back in history and explain when and why System Design interviews started. The 1990s were the era of the internet’s boom. The number of consumers started increasing as people started adopting technology to avail the different services offered on the internet. Companies such as Yahoo, Google, Microsoft, and Amazon were at the forefront of this race by capturing a large number of users. However, in the early 2000s, the widespread adoption was coupled with the inception of the mobile phone era, which led to a significant increase in users — thus, the need for large-scale distributed systems.

System Design involves orchestrating large-scale distributed systems to solve complex, real-world problems. Companies like Google, Amazon, and Microsoft started asking System Design questions in their interview, ultimately leading to a separate module in the interview process known today as System Design interviews.

In the mid-2000s, Netflix was transitioning from a traditional DVD rental company to a streaming service. The engineering team at Netflix faced three critical challenges:

  • Scalability: Storing, encoding, and streaming large binary chunks to users was not a piece of cake. At least not in 2007 and especially at such a large scale.

  • Data management: Storing a vast library and trying to provide the service globally was a challenge, not to mention the problem of duplication required across various regions.

  • End user experience: The ambitious goal was to let the users stream from their devices instead of grabbing DVDs, reducing user effort to a few clicks/taps. Delivering this experience with low latency was another bump on the road.

Essentially, a redesigned system was required. Netflix’s engineering team pulled off this engineering brilliance, focusing mainly on scalability, availability, reliability, and low latency.

Netflix is the perfect example of how a struggling business transformed itself into a tech giant in a few years by leveraging innovations in modern System Design.

Image description

I can continue with the examples of how Uber System Design revolutionized ride-sharing, or how Amazon transformed online shopping, but the key takeaways are:

  • System Design has the capacity to not only (re)build businesses and adapt to changing technological advancements, it can invent industries.
  • Companies conduct System Design interviews today to compete for the best talent. In turn, prepare themselves for unusual circumstances (like COVID-19) and unprecedented technological advancements (GenAI).
  • Learning to code can land you at your dream job but System Design will enable you to excel at your job. Netflix didn’t pull it off because they merely wanted to; they hired the right software engineers who had the skill set to do so.

Why should you prioritize learning System Design skills?

Today, System Design interviews play a pivotal role in building your engineering/software development career.

In general, companies conduct System Design interviews to evaluate a candidate’s ability to design distributed systems. However, System Design interviews are also a key factor when it comes to determining the starting level **of a new hire. In other words, it may seem like you aced the interview, but if you give the incorrect details corresponding to your seniority level, you might end up **down-leveling yourself.

Remember, optimally demonstrating your abilities at your level will not only land you at your desired level, but it will also reflect on the offer (compensation-wise) made to you.

Core System Design interview expectations

It’s not the norm for the interviewers to disclose their expectations from the candidates during the interview. However, there are some standards that you have to keep as a candidate. Let's see what they are:

  • Justifying choices: System Design is all about making design choices. Junior engineers might use boilerplate solutions in their designs and establish that they understand the basics; at least, that is my expectation after numerous interviews at FAANG. For senior engineers, I expect them not only to be more confident in making design decisions but also to be able to technically justify their choices and make informed decisions.

  • Adaptability: This is an important trait that applies differently to juniors and seniors. While I expect both levels to be receptive to feedback on the design. Senior engineers should effectively use that feedback to make the necessary design changes, demonstrating both flexibility and creativity, even with multiple solutions. For junior engineers, a high-level discussion on the updated plan to accommodate the changes with some tweaks to the design applies. Take, for example, the problem of a recommendation system for an e-commerce platform. When constraints such as real-time stock updates or seasonal demands are introduced, here is how junior and senior engineers can respond differently:

Image description

  • Handling edge cases: As junior engineers, you should be able to discuss and handle any questions on the most important functional and nonfunctional requirements of the design. If you are a senior engineer, you should also be able to handle edge cases within a design. For example, for a streaming service, junior developers should discuss how streaming, uploading, searching, etc., works. For senior engineers, they should also talk about handling duplicate content, privacy concerns, copyright infringement issues, age-restricted content, etc.

  • Demonstrating knowledge depth: Since junior engineers don’t have a lot of experience under their belt, it’s perfectly fine if they are able to stick to the basic concepts and demonstrate knowledge of fundamental components or building blocks (DBs, caches, rate limiters, APIs, etc.). Junior engineers are expected to have sound networking, operating systems, and programming concepts, whereas seniors must have in-depth knowledge of distributed systems and the implications of scalability on the overall design. Senior engineers must showcase their knowledge’s depth—especially in their area of expertise. It is quite possible that the interviewer will ask some questions about the area of expertise they mention in their curriculum. Since it validates your experience, consider it imperative to sprinkle those concepts here and there in the interview.

Image description

_

Tip: Before appearing in the interview, it’s good practice to go through the expertise of the interviewer and the project they are actively working on. Often, you'll find that they are more interested and enthusiastic about asking questions on concepts they know well.
_

Let me summarize my experience with expectations at different levels in the table below:

Image description

Key differentiators between junior and senior engineers

I already explained that System Design interviews can be the cause of leveling down, but surprisingly enough, it can result in leveling up, too!

In this section, I will talk about some key differentiators that will set the two levels of engineers apart. You can try to display these qualities in your next interview.

You don’t necessarily need to sit in a real interview to try to display these qualities. In fact, you can test your skills using our AI Mock Interviewer for a number of domains:

  • System Design
  • API design
  • Low-level object-oriented design (OOD)
  • Coding interview
  • Future-proof design: During the COVID-19 era, the number of users of nearly all tech giants, including Meta, Google, Netflix, and Amazon, increased. Interestingly, the services were designed for the future and experienced few service outages. As an engineer, your goal is to come up with a flexible design that fulfills the needs for today but is able to handle double the users tomorrow.

  • Tackling curveballs: Curveballs are unexpected questions that add a twist to the discussion. Interviewers ask these not-so-obvious questions, usually from good candidates. If you get one of the curveballs, it should be a confidence booster. The interviewer wants to test your limits here. In case you are wondering, the opposite is vanilla.

Let’s consider TinyURL as the example here:
Vanilla
How do you ensure scalability in the TinyURL design?
Curveball
Which encoding technique would you prefer and why?
Note: Interviewers can ask curveballs within curveballs. For example, for the second question, a follow-up can be: “What is the implication of the encoding technique you choose on readability?”

  • Discussing trade-offs: A crucial aspect of the design is trade-offs. Hands down, there is no perfect solution. You have to make compromises. As a junior, you may only identify where the trade-off is, but as a senior, staff, or principal engineer, you must be able to choose the trade-off that suits the needs of users based on the application you are designing, justify it with reasons, and highlight the techniques that best materializes the chosen trade-off.

  • Review design: Senior engineers tend to review their solutions once they finish designing. Reviews are important because they allow you to evaluate your design and (potentially) improve it on the second iteration. Carving a perfect solution based on specific requirements within 45–60 minutes is nearly impossible. Senior engineers know this, and that’s why they always leave some time for self-evaluation and improvement. During this phase, junior engineers concentrate on meeting functional requirements in general, whereas senior engineers focus on meeting nonfunctional requirements such as scalability, availability, fault tolerance, good performance, etc.

  • Asking refining questions: System Design interviews usually begin with a generic question like “How do you design a URL shortening system like TinyURL keeping scalability and low latency in mind?” Next, it is the job of the candidate to ask questions to understand the scope of the problem and the detailed requirements of the design. These include questions like:

  1. What is the total number of users?
  2. What is the frequency of requests or how many requests per second for different services can we expect, such as URL redirection or short URL generation?

Oftentimes, the interviewer holds certain information back to see if you will ask refining questions for clarification. Asking refining questions not only helps you design exactly according to the requirements, but it also sends hireable signals to the interviewer.

Use the following mnemonic to easily remember the crucial steps:

Image description

Coupling the mnemonic above with the RESHADED framework for solving unseen problems, you have the perfect formula to ace your System Design interview.

Tips and pitfalls

I will now share some do's and don'ts to help you achieve your target level. Do not skip these tips.

Tips

  • When designing, think and speak user experience and product business goals instead of acing the design only. Your thought process or angle of solving at a senior level is different altogether. At a senior level, solving a problem goes beyond just finding a solution. It’s critical to consider the people you’re solving it for.
  • Communication is always going to be the key. Knowing what to say is as equally important as when to say it.
  • Manage time before you enter the interview. While your interviewer is the one conducting the interview, you are going to be in a discussion. Therefore, you can drive the interview. Allocate time for each section. As a senior, you will want to allocate enough time to talk about the basics but the focus will be on detailed design, its key aspects, trade-offs, and optimizations.
  • When improving your design on a second iteration, focus on naming the technologies most suitable for the particular purpose instead of being generic. For example, you can use both SQL and NoSQL storage in your design. In the first iteration, it’s okay to use these names. On the second iteration, you can say Cassandra instead of NoSQL, depending on the design problem at hand.
  • Be ready for surprises at the end of the interview. It’s possible that the interviewer applies constraints to the requirements, and you might have to change or make tweaks to the design.
  • Divide complex tasks into smaller manageable pieces. Not only will you solve the problem easily, you will demonstrate your problem-solving skills to the interviewer as well.
  • Try to understand the interest of the interviewer to nudge yourself in that area. This will spark the interest of the interviewer in your profile. If you don’t get any such signals, discuss the key aspects related to the design problem and demonstrate your abilities in your area of expertise.
  • Study and learn from real-world systems to develop a deeper understanding of large-scale distributed systems.
  • Unlike coding interviews, you don’t get to sit in System Design interviews every day. Therefore, before you appear in a real interview, practice the talking points of different design problems. You can use our AI Mock interviewer, which is a great tool for evaluating your level of preparedness.

Pitfalls

  • Don’t be under the impression that answering all the questions means you have aced the interview. Remain in your lane in terms of depth and breadth that you cover according to your level.
  • When explaining your design, don’t go down a rabbit hole. First, complete your initial design and then dive into the details of different design aspects. Also, the purpose is not to satisfy the interviewer that you have a solid command of some topic; you have to leave a holistic positive impression.
  • Avoid doubling down on your solution if you receive constructive feedback. Instead, be honest about your solution and open to feedback.
  • If you don’t know the answer to a question, don’t pretend to know a concept. Randomly throwing jargon at your interviewer will lead to rejection. When on the other side of the table, interviewers are able to judge your level easily.

Conclusion

System Design interviews are an important component of your hiring process and pivotal to deciding your level. They are not easy to ace, but using the right plan, you can navigate through this confusion by applying the strategies underlined in this blog.

One more tip: Be sure to take the opportunity to learn System Design instead of just knowing boilerplate solutions by rote memorization. You can dive deeper into modern System Design best practices through the hands-on courses below.

Happy learning!

Top comments (0)