What stands between you and your dream job — especially if your dream is to work at one of the big 4 — is the long — and tiring — interview process. Designing large-scale distributed systems has become standard in software engineering interviews, primarily for senior roles, which means that once you pass the phone screening, and the coding interview, you’re going to have to endure — and pass, the ever-feared system design interview (SDI).
Unlike coding problems, the unstructured nature of system design interviews makes them harder to prepare for. Even programmers who have some experience building large systems aren’t comfortable with these interviews, primarily because of the open-ended nature of design problems that don’t have a standard answer.
Not sure how to design a large scale distributed system during a face-to-face interview? Fear not. Here’s everything you need to know about acing SDIs seamlessly and effortlessly. Or, at least that’s what you’ll feel.
While system design questions have become a standard part of the software engineering interview process, a SDI extends beyond the scope of testing traditional coding, technical and analytical skills. The principal aim of a systems design interview is to give the candidate an opportunity to demonstrate their knowledge and see how they work in dynamic, unpredictable situations and face somewhat tricky questions. You will not be presented with a coding question that can be run or compiled. You will often be asked open questions involving designing a new, large-scale distributed system, such as YouTube, another social platform, a URL shortening service or the like, capable of solving an open-ended problem, similar to the type of planning and structuring you will be expected to do if you are brought on as a software engineer.
During the SDI process, it is critical that lines of communication remain open at all times. This is because interviewers are looking to see how your handle dynamic, open-ended engineering situations, as they unfold. As such, performance in these interviews is assessed according to the following main factors:
Your interviewer may also be looking to see if you possess the following skills and abilities: abstraction, databasing, networking, concurrency, estimation, availability, and reliability.
Now that you know what your interviewer will be looking for, you can better prepare your answers to some of the most commonly asked SDI questions:
As mentioned above, the interviewer is just as interested in the thought processes you employ and how you articulate yourself, as he is in your final system design result. In fact, your thought processes are the interview’s main area of focus. This means you will need to work out loud and in plain sight, asking critical and clarifying questions that will guide you towards structuring the most efficient system, sketching diagrams on the board, and brainstorming with your interviewer if only to show him how your brain ticks. Keep your own notes, but make sure you share important contents. And be sure you understand both the questions you ask AND the answers you receive. Otherwise, you might wind up designing a system that drastically differs from the one you envision.
Honestly, system design interviews are not the easiest to prepare for on your own; as design interviews are highly dynamic and similar to actual design sessions, there’s no standard answer for any given scenario. It helps to brainstorm, communicate and work through potential scenarios with a peer, preferably an experienced engineer, just like you would during an actual interview. In other words, hold a mock interview and practice, practice, practice.
There are many resources out there where you can find system design questions, but it can’t be a replacement to an actual brainstorming session, that requires you to articulate your thought process out loud. You may want to check Pramp, a peer-to-peer mock interview platform.
Using Pramp to practice your system design interview skills is a great way prep for actual SDIs and future design sessions. Mock interviews, and specifically unstructured interview types such as system design, can help you hone your skills and acquire new ones (for interviewing purposes), so you can ace your next SDI like a pro.