Learn which thought processes and actions to take during the interview process, while minimizing errors 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. Think you know what a system design interview is — think again 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. Message queues — System Design What interviewers are looking for during a SDI 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: — learned and practical Your knowledge — lead the conversation and discuss high-level components, details, design pros and cons, and other relevant information with the interviewer. More on thought processes later. Your ability to convey your thoughts — do you work according to best practice steps, such as: : Clarify ambiguities and determine system end-goals to assess the exact scope of the problem or task at hand. : Identify and define any expected system APIs. : Ensure you know the scope of your system. : to clarify how data will flow between different system components and enable better data partitioning and management. : Identify the components needed to solve the SDI problem from end-to-end, first, on a basic level, then on a deeper level. : to determine how to mitigate their effects best. Your operational efficiency A. Requirement gathering B. System interface definition C. System scale estimation D. Data model definition E. High-level design F. Identification and resolution of bottlenecks — once you’ve designed the system, how will you continuously work to make it better? Your ability to iterate and improve Your interviewer may also be looking to see if you possess the following : abstraction, databasing, networking, concurrency, estimation, availability, and reliability. skills and abilities Most commonly asked questions during a SDI 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: Given a (typically) long URL, how would you design a TinyURL or bit.ly (a URL shortening service), the unique ID for a shortened form of the same web address? Design a social network, such as Facebook, Quora or Reddit, on which users can view and post messages, comments, and links. Design a global chat service, such as WhatsApp or Messenger, that is both user-friendly and secure. Design a global video streaming service, like YouTube, including essential features, such as data recording and social commenting. Design a global file storage and sharing service, optimized for simultaneous use by multiple users. Design a search engine or related services such as a web crawler or type ahead. How to employ critical thinking during a SDI As mentioned above, the interviewer is just as interested in the 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 . Otherwise, you might wind up designing a system that drastically differs from the one you envision. thought processes be sure you understand both the questions you ask AND the answers you receive Practice makes perfect Honestly, are not the easiest to prepare for on your own; as design interviews are highly dynamic and similar to actual design sessions, . 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. system design interviews there’s no standard answer for any given scenario 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 , a peer-to-peer mock interview platform. check Pramp Using to practice your system design interview skills is a great way prep for actual SDIs and future design sessions. , 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. Pramp Mock interviews
Share Your Thoughts