The System Design Interview: What is Expected at Each Level
By Evan King
Nov 30, 2023
Over the past 2 months, as the co-founder of Hello Interview, I have conducted nearly 100 mock interviews with candidates at various levels, ranging from junior to principal. Prior to this, I spent 5 years at Meta, where I was a staff engineer heavily involved in interviewing, conducting well over a hundred interviews.
All of this to say, I’ve learned a lot about what it takes for a candidate to excel and where they often face uncertainties.
One common question I receive is, "how do the expectations for a System Design Interview change based on a candidate's level?" It's a valid question, and grasping these expectations can significantly influence a candidate's success. The reality, however, is that existing resources often adopt a 'one size fits all' approach.
Most online resources and preparation guides are tailored towards mid-level candidates, offering a broad overview of system design principles but rarely delving into the depth required for more senior roles. This leaves many candidates, particularly those aiming for senior or staff positions, without a clear roadmap for success.
In this blog, I will explore the evolving expectations across the dimensions of breadth, depth, and proactivity in system design interviews, tailored to different career stages from mid-level to staff+. By understanding these shifting criteria, you can strategically focus your preparation, ensuring you address the key aspects that are most relevant to your targeted role, and significantly enhance your chances of nailing the interview
How Do Expectations Evolve with Each Level?
While the core structure of a system design interview remains consistent across various career levels, the nuances of evaluation shift markedly across three key dimensions: Depth, Breadth, and Proactiveness.
The breadth dimension refers to the range of topics and areas a candidate is expected to be familiar with. The amount of breadth is negatively correlated with increases in level. Said simpler, the higher the level, then less breadth I expect. This may sounds counterintuitive, but it’s intentional.
At mid-level, a broad understanding is vital. Candidates are expected to demonstrate a general knowledge of various system design principles and practices. This foundational breadth ensures that they have a solid base upon which to build more specialized skills.
In essence, I am not taking anything for granted with regards to your knowledge. If you introduce an API gateway, for example, expect that I may ask you what it does and why its needed in your design.
As candidates target senior positions, the evaluation criteria undergo a nuanced shift. While maintaining a broad knowledge base is essential, the extent of assumed knowledge increases significantly.
I start the interview with the presumption that candidates have a thorough understanding of the fundamentals. This means when you introduce technical elements like a load balancer or an API gateway, I won't probe into their basic functionalities unless you expose a lack of understanding in your explanations. Instead, the expectation is that you are already well-equipped with this foundational knowledge. This approach is deliberate—it conserves valuable interview time, allowing us to focus more on the depth of your understanding.
For staff-level and beyond, the required breadth continues to taper. At this stage, I operate under the strong assumption that you have a complete grasp of the fundamentals. The focus here shifts significantly towards how you apply your comprehensive understanding to innovate, optimize, and foresee the implications of your design choices in large-scale systems.
Staff-level candidates are expected to demonstrate not just knowledge, but wisdom in their application, showcasing an ability to foresee potential challenges and opportunities in the architecture they propose. This level is less about covering a wide range of topics and more about the strategic application and integration of this knowledge in complex, real-world systems.
In direct contrast with breadth, depth in system design interviews represents the intensity and intricacy of a candidate's understanding in specific technical areas. As one climbs the career ladder, depth becomes increasingly paramount, emphasizing not just a candidate’s knowledge, but their profound expertise and hands-on experience. Depth is about delving into the minutiae, understanding the underlying mechanics and practical implications of technologies and design choices. This dimension shifts from a basic comprehension at lower levels to a rich, nuanced, and seasoned understanding at senior and staff levels, often distinguished by a 'been there, done that' level of expertise.
At this level, the expectation for depth is limited. Mid-level candidates are often transitioning from academic and theoretical knowledge to practical application. While I don’t expect extensive hands-on experience, a solid understanding of core concepts and the ability to discuss technical problems through an academic lens is essential. Candidates should demonstrate their growing familiarity with system design principles and their readiness to start applying these concepts in real-world scenarios.
For senior candidates, the depth of technical discussion is expected to move beyond general statements to specific, experience-based details. It's no longer sufficient to broadly state a preference for a type of technology throughout the interview, like "I'll use NoSQL." The expectation is for you to draw upon your past experiences and delve into the particulars, picking and choosing the right moments to do so. For instance, if you choose to discuss DynamoDB based on your experience, I expect an explanation of your specific choices in its configuration—why a certain partition key and sort key were chosen, for example. The inclusion of advanced features like DynamoDB Accelerator (DAX) could be a part of this discussion if it's relevant to your experience.
The key here is to find areas where you have substantial hands-on experience and to articulate this depth through concrete examples and real-world application insights. I want to see you go deep in around 2 places, demonstrating this practical experience.
At the staff level, depth is expected in multiple areas. The expectation for depth extends beyond mere knowledge—it encompasses the ability to provide expertise in multiple areas and to contribute novel insights. Staff candidates are expected to possess not just depth in technical understanding but also the capacity to educate and enlighten the interviewer.
In these interviews, I look for candidates who can delve deeply into several technical domains, demonstrating a breadth of experience combined with significant expertise. The ability to impart new knowledge is not a strict requirement, but it helps to elevate a candidate's profile, showcasing their potential as thought leaders in the field; staff candidates often stand out by introducing and explaining modern technologies or innovative approaches that I may not be familiar with. For instance, a candidate might introduce Temporal.io as a solution to address specific challenges like distributed system orchestration or workflow management in their design. If this is a technology I'm less acquainted with, a great staff candidate would skillfully elucidate its functionalities, advantages, and integration strategies, effectively broadening my understanding. This level of engagement and knowledge sharing is what sets staff candidates apart, marking them as leaders and innovators in their field.
Proactiveness is a measure of how a candidate takes the lead in driving the interview process, recognizing unique challenges, and identifying potential issues or limitations in their own designs. Unlike breadth and depth, which are more about knowledge and expertise, proactiveness is about the application of this knowledge in an anticipatory and strategic manner. It's an active demonstration of a candidate's ability to not just respond to questions, but to guide the conversation, proactively address complexities, and foresee potential pitfalls in their system design. As candidates progress through their career, the level of proactiveness expected in the system design interview increases; it evolves from simply being prepared to answer questions at junior levels to actively shaping the dialogue and demonstrating foresight in higher-level roles.
At this level, candidates should guide the early parts of the interview, focusing on gathering requirements, designing APIs, outlining schemas, and developing a high-level design. While not required to actively spot problems or precisely identify system challenges, they should be ready for the interviewer to play a more dominant role in the later stages, posing detailed questions about the design. It's typical for the interviewer to direct the conversation periodically, highlighting key or intriguing aspects of the system design during the interview.
Senior candidates should exhibit more proactiveness. This involves early recognition of what makes the system uniquely challenging and prioritizing requirements accordingly. They are expected to proactively recognize some limitations in their own design and discuss alternatives. A senior candidate should be able to steer the interview process more confidently, bringing to light critical aspects of the system that might require special attention, and engaging in a more interactive and solution-oriented discussion with the interviewer.
For staff-level candidates and above, a high degree of proactiveness is essential. These candidates should not only identify unique challenges and limitations but also propose innovative solutions and approaches. They are expected to lead almost the entire interview, demonstrating a deep understanding of the system's complexities and navigating through them with expertise. Their ability to foresee potential issues, address them preemptively, and articulate their thought process clearly sets them apart. At this level, the candidate is often seen as a peer in the conversation, contributing significantly to the discussion with insights that may even enlighten the interviewer, as mentioned earlier.
How to Prepare
Within different expectations come different preparation strategies. Here is what I have found most effective at each level.
For mid-level candidates, there is a wealth of targeted online and written resources. Books like "System Design Interview – An Insider's Guide" by Alex Xu or "Grokking the System Design Interview" are excellent for covering the basics in breadth. To complement theoretical learning, simulated practical experience is key. Engaging with platforms like Hello Interview and their AI mock interviews, which are specifically designed for E4 candidates, provides a hands-on approach to learning. There's a significant advantage in 'learning by doing', as it helps in understanding real-world application of system design principles.
For those aiming for senior positions, it's crucial to first refresh your foundational knowledge, especially if it's been a while since your last interview or if your current role hasn't involved much system design. Start with revisiting the basics and then delve deeper with resources like "Designing Data Intensive Applications" for more detailed insights. The focus should be on understanding complex systems and the reasoning behind certain design choices. Practice through mock interviews or discussions with peers can also be beneficial, as it can help in articulating your thoughts and experience in a more structured manner.
At the staff level, the expectation is that you already possess deep experience and knowledge. However, refreshing the fundamentals is always beneficial. More importantly, spend time reflecting on your own professional experiences and design decisions. Analyze why certain choices were made and explore modern alternatives or advancements in the field. Keeping up with industry trends through newsletters like TLDR or PragmaticEngineer can provide insights into contemporary practices and innovations. The key is to stay updated and be able to articulate not just what you know, but how it applies to ever-evolving system design landscapes.
[!NOTE] Regardless of the level you're targeting, my experience has taught me that there is truly no substitute for practicing through mock interviews with experts who understand the intricacies of these expectation. These simulated settings put you in the hot seat, closely mimicking the real interview scenario. They provide an unparalleled opportunity to pinpoint your strengths and areas for improvement in a way that self-study alone cannot. You gain direct feedback on not just your technical knowledge, but also on how you communicate, structure your thoughts, and handle unexpected questions. The value of this real-time, interactive experience is immense – it builds your confidence, sharpens your problem-solving skills, and equips you with the insights needed to excel in the actual interview.
Evan, Co-founder of Hello Interview and former Tech Lead at Meta, possesses a unique vantage point having been on both sides of the tech hiring process. With a track record of conducting hundreds of interviews and securing offers from top tech companies himself, he is now on a mission to help others do the same.