There is a lot of mystery that surrounds the Staff level System Design interview at top tech companies. This makes sense. The majority of online resources target mid-level or senior talent. There are also far fewer staff-level interviewers, which means the pool of insiders sharing insider knowledge is noticeably smaller. All of this contributes to Staff Candidates feeling unsettled and unsure of how to differentiate themselves from a good senior candidate.
My name’s Evan, I spent 5 years at Meta where I was a staff engineer and interviewer. I’m now the co-founder of Hello Interview, a company that helps prepare software engineering candidates for upcoming FAANG and FAANG-adjacent interviews. As part of this, I’ve conducted mocks for hundreds of candidates in the last few months alone, with levels ranging from junior up to senior director. The point is, I’ve seen a lot, and for the purpose of this blog, I’ve seen exactly what sets a passing Staff Candidate apart from “just another strong senior candidate”.
Let’s start with the basics, a Staff Candidate is expected to go into greater depth than a senior candidate. This necessitates compromising on breadth. You can read all about this breadth vs depth tradeoff in this article. In short, don’t waste your time talking about things that are obvious. I, as an interviewer, know that you know what horizontal scaling is. I know you know what a load balancer is. I especially know that you know the types of the fields/columns in your data model. Don’t waste mine, or your time going into these things. Instead, I expect a Staff Candidate to get a working high-level design down relatively quickly, so we can spend most of our time going deep in 2-3 places. These places for depth should be aligned with what makes the particular system you’re designing challenging/interesting but should also be the areas you know well. It’s up to you to lead the conversation toward these gold mines of depth.
Need some examples of where to go deep? Scroll down to the “deep dive” sections in each of the problem breakdowns here.
Ok, more depth is pretty obvious and you’ve probably heard that one before. But there are 3 other critical dimensions that are worth highlighting in more detail.
1. Teach me something
2. Confidence in what you don’t know
3. Sophistication in simplicity
Teach Me Something
I won’t spend a lot of time breaking this one down, as the title says just about everything there is to say. When I interview a strong Staff Candidate, I usually leave the interview having learned something. This is often something small (which is great!), but it comes from them going deep in a place where they have far more expertise than me. Software is a vast field. Chances are if you’re a qualified Staff Candidate, you know more about a small set of things than most other people on the planet – show this off!
Confidence in Knowing What You Don’t Know
This is subtle, I’ll admit it. But your interviewer is human. Beyond the unbiased set of signals they’re instructed to extract, they’re also subconsciously evaluating whether they think this is someone who acts like a staff engineer. One thing I’ve observed candidates do that often leaves me with the impression that they are staff is they are confident about what they don’t know. When designing the system, they may determine they need a technology that they have less hands on experience with. Rather than getting flustered and pulling out half baked regurgitations of something they read online (as is usually the case with mid-level and senior candidates), they confidently explain that they don’t know the ins and outs of the particular technology but know it can be used to solve X.
For example, imagine you’re being asked to design a TopK system that has tight memory constraints. A count-min sketch (CMS) is typically the optimal data structure — but few people have hands-on experience with CMS. A Staff Candidate knows that this knowledge is a bit esoteric and will say something to the effect of, “I don’t know off the top of my head what the optimal data structure is, but I’d imagine there exists a probabilistic data structure that I could use here to cut down on memory. I’d guess it works similar to bloom filters but for counts. If I were actually designing this system, I’d do some research to find the optimal data structure that adheres to those constraints.” Cool, they didn’t know CMS existed, no big deal. But they knew how they’d find it.
Another contrived example may be when they need geospatial queries within their Postgres DB. They’d say, “I’m not sure what sort of support Postgres has for geospatial indexing, but most modern DBs have either native support or extensions for quad-trees or the like. So assuming it does as well, I’d use that. If it doesn’t I’d switch to another SQL DB that does.” In this case, they did not know that Postgres can be extended via PostGIS to support geospatial indexes, so what, they knew that they didn’t need to know that. Instead, they explained what they needed and how they’d go about finding it. The key here is the nuanced confidence in recognizing when a detail is esoteric and being comfortable in admitting ignorance, yet demonstrating a clear strategy for how you would bridge this knowledge gap to effectively solve the problem.
Beauty in Simplicity
Ok, I saved the best for last. This is a big one. If you take away only one thing from this article, it should be this: qualified staff engineers have an impressive ability to simplify systems. To some, this may sound counter intuitive, but let’s break it down a bit.
The diagram above charts candidate seniority vs the complexity of their design. Naturally, more junior candidates have simple designs, this is because they’ve reached the ceiling of their knowledge — they aren’t aware of any more complexity. Senior candidates design systems with peak complexity, oftentimes even over engineering. They throw message queues everywhere, elaborate on complex scaling strategies, and generally try to solve problems by adding more components.
Staff Candidates, interestingly enough, sometimes even design systems with a more similar level of complexity to junior candidates. The difference, however, is that they know the complex solution and are able to clearly articulate why it’s overkill or over engineering for this particular problem.
Let’s look at a simple example. Imagine you’re designing Yelp. A senior candidate might go into detail about the importance of sharding by location and the complexity that comes with querying businesses that exist on the boundary between two sharded regions. On the other hand, a Staff Candidate might point out that this boundary problem is common in these types of systems and that, given how few businesses exist in our database (say, 100 million) we could fit all the businesses in a single instance and we don’t need to shard at all – thus avoiding the need to handle the boundary issue in the first place.
Ultimately, staff engineers excel in designing systems that epitomize elegance through simplicity. This elegance is not born out of ignorance but a strategic choice to optimize for efficiency, maintainability, and scalability.
🚀
Final Words
Passing a staff interview isn’t easy. But it is possible. While the above tips may help shed some light on the qualities displayed by top Staff Candidates, there are no simple tricks that make you ready to pass a staff interview overnight.
If you want to practice with folks like myself who can point out exactly where your interview may be falling short, consider doing a mock or two via Hello Interview. Interviews are nerve-racking and the stakes are high, it’s worth a couple practice reps before you step into the arena for game day.
And of course, good luck!