Grokking The System Design Interview

There are plenty of videos about backend system design interviews and just few of them about mobile one. The same situation is with the articles, one can find a lot of articles and even courses that would help to be prepared to the backend system design interview and there is no articles at all about mobile system design interviews. If you are looking for a resource to prepare for system design interviews, look at the newly released course Grokking the System Design Interview that covers the basics of distributed systems and has interactive lessons covering how to design Instagram, Dropbox, Twitter, Facebook Messenger, Youtube, Facebook Post Search, Typeahead, Web crawlers. System design questions have become a standard part of the software engineering interview process. Performance in these interviews reflects upon your ability to work with complex systems and translates into the position and salary the interviewing company offers you. Grokking the System Design Interview. 103 Illustrations. $ 16.66 / month. Unlimited access to all 260+ Courses and Paths. Certificates Included. Early access to new courses.

  1. Grokking The System Design Interview Youtube
  2. Software Design
  3. Grokking The System Design Interview Video
  4. Grokking The System Design Interview Free
  5. Grokking The System Design Interview Book

One of the most common set of questions I get from people who are looking to interview with top tech companies (FAANG's) are :

Grokking The System Design Interview Youtube

'How to crack the software system design interview?'
'What is enough v/s what is not enough information to give?'
Grokking The System Design Interview
'How do I structure my system design round in the limited 45 mins that I get?'

While System design round can be difficult, we all need to understand that neither a system cannot be fully designed in 45 mins nor system design has one approved solution. There can be multiple ways to design the system based on what are the top problems you are trying to solve and What requirements are you going to be targeting while you design the system.

Here's an interesting approach that you can use to go around your system design interview:

  1. Start by collecting the requirement and set the tone of the interview by level setting with the interviewer about what are the specific features or the requirements you are trying to address in this interview. (Time < 5 mins)
  2. Navigate to some back of the envelope calculations. You may want to calculate the storage and memory requirements of the system considering scaling of the system over the period of 5 or 10 years. You may also want to calculate network bandwidth requirements parameters when required. (Time = 5-7 mins)
  3. Design API's of the system with parameters and return type. You may get into the depth of API design depending on the role you are interviewing for. (Time ~ 5 mins)
  4. Create ER diagram and select the type of Database you are going to select for solving the problem. You may select SQL, NoSQL or the combination of both depending on the type of problem. Be sure to provide your rationale behind DB selection and create ER diagram. Ask the interviewer how far they want to go. Do they want all the tables defined or they are fine with a few important ones. This is a very important step in the process. (Time = 10 mins)
  5. Once you have got a high level idea of how your system will look like, create a high level system design. Create the block diagram placing all the services, Databases, Internal/External communication protocols, Authentication/Authorization mechanism, API's etc and try to provide a high level description while you draw the diagram. This should be interactive so think loud while you are drawing. (Time = 10 mins)
  6. You interviewer will guide you to what part of the system they want to understand from you. Read that signal. Idea is to make sure you answer interviewers question and not speak about what you know. If you are not very sure about the answer, instead of digressing, stop there and affirm to the fact that you may need to look it up offline as you are not sure about that. It is ok to say you are not sure about something rather than taking the conversation somewhere else. (Time = N/A)
  7. Once you have spoken about the key parts of the system, be sure to include load balancing and caching techniques (LB algorithms, Caching algorithms, Cache evection policy etc.). This is extremely important as you cannot design a scalable distributed system without LB and Cache. (Time = 5 mins)
  8. Navigate to Database Partitioning) next. Partitioning is essential for a large scale distributed systems. Be sure to speak about Partitioning technique and why would you select that? (Time =2 mins)
  9. By now you have covered major pieces in your system design. You only have around 5-7 mins left in your interview. To be a bar raiser, it is important to talk about telemetry. be sure to talk about the metrics (KPI's) you would be watching, What would be the response and how would you include the results the data you have collected by analytics to better the system further. Talking about telemetry gives you an edge over other folks as not everyone thinks about analytics. (Time = 5-7 mins)
  10. You have exhausted your 45 min in the interview! Congratulations on navigating through it! I wanted to mention a few more things that are essential and you can fit them in your high level system design (Point 5) discussion -
  • Data de-duplication.
  • Redundancy and Replication (Important based on the type of problem you are solving)
  • System should not have single point of failure.
  • Scaling
  • Trade-off's you have made and why?

With the above approach, solving the system design problem becomes manageable and you are more likely to succeed.

DesignSystem

Resources: For your prep, I would recommend the following guides/resources that would be helpful.

  1. Design Data-Intensive Application - Martin Kelppmann
  2. Grokking the System Design Interview/ Grokking the Advanced system design Interview - Eductaive.io
  3. System Design primer - Donne Martin (Available on GitHub)

Please like and share if this article provides any value and you learn some new information from it.

Grokking The System Design Interview

Disclaimer: Content in this article is provided only for information purposes. This content should be used as a reference and not an actual approved guide to crack an interview. All views provided in this article are my own and has nothing to do with any employer or entity I am affiliated with. I do not endorse any of the recommended resources above.

At Big Tech and high-growth startups, coding and systems design interviews are common - and fairly standard. A lot of people have asked me for preparation advice for these. Here is what I used when getting ready for an E5/E6 Facebook interview, and the one at Uber - where I was hired as a senior software engineer (L5). It's the same resources I recommend to people who are preparing for Big Tech or high-growth tech company interviews.

Systems Design Interviews

System

Software Design

Systems design interviews are more relevant for senior and above positions, while coding (data structures and algorithms and problem-solving) will be an interview type you can expect at all levels. If you're a senior engineer or engineering manager, you might also find my thoughts for senior and above people to be useful.

Grokking The System Design Interview Video

Note that systems design is not the same across the board. Expectations are very different for an 'entry-level' senior position than it is for staff or above positions. The more senior the position, the more real-world experience will start to matter. This is similar to how having 'done the job' becomes more important for senior engineering manager and above positions - and staff levels often run parallel to these in scope and compensation at Big Tech.

I summarized a framework for the systems design interview with a book review and will write more about this in my email notes.

1. Books

While there is no shortage of online resources for systems design topics, I find going through a book an underrated resource. Take notes, go one step at a time, jump between pages, and take your time to learn the concepts they teach.

Grokking The System Design Interview Free

Books are the best price-for-value preparation resource: the information is much more dense than with video courses, while the price of books is lower than any course subscriptions. Books take time to work your way through them: and so does understanding distributed systems.

Grokking The System Design Interview Book

  • Understanding Distributed Systemsby Microsoft principal engineer Roberto Vitillo fills the void between the deep theory and the 'interview preparation' focused books. The book walks through practical concepts like failure detection, replication, scalability, resiliency, and operating large systems. It's the book I'd recommend to start with if you have less hands-on experience with distributed systems.
  • Systems Design Interview: an Insider's Guide by Alex Xu, previously senior engineer Twitter, Apple, and Zynga is the most focused book that aims to help prepare for the interview itself. The book is the best I've found so far - though I would have liked to see a bit some depth as I detailed in my review of this book.
  • Designing, but still an excellent place. There are many companies that have great engineering cultures and large challenges to tackle but are more open to hiring people who do not have actual experience shipping systems to millions of people.

    After a few years at this company, this person then got offers from all their dream companies - as they now had that hands-on experience that was previously missing.

    Coding Interviews

    The nice thing about generic coding interviews is how you can prepare for them, even if you have not been exposed to these kinds of problems before. They are also more or less standard between most companies.

    Some larger tech companies have started to put 'nicer' coding interviews in a place that reflects more real-world problems. However, I have found that these are still a minority among Big Tech - though I'd welcome to see more of a change in this direction.

    I suggest you create your own study plan for topics you want to cover: data structures, algorithms, and coding challenges you'd like to complete. I'll be sharing my study plan as part of the tech interview preparation notes.

    1. Books

    Cracking the Coding Interview is the book I'd start with. It is the most mature and easy-to-understand read resource. I also recommend it because the author, Gayle trains large and small tech companies on how to do coding interviews well: she did this at Uber, where we made changes following her help. No other book prepares for the type of interviews that Gayle helped put together.

    I own multiple editions of this book, and it has made the biggest difference in preparing for various interviews for me. It's dense, worth every penny and has become a 'baseline' for most Big Tech interview preparation.

    De-Coding The Technical Interview Process from Spotify software engineer Emma Bostian is a fresh take on navigating the tech the interview process, tailored for frontend engineers. She wrote the book after she found Cracking the Coding Interview to be too Java/backend-focused. The book comes with 1, 2 and 4-week learning plans as well. A great book to start with.

    Elements of programming interviews is an extensive collection of programming challenges. I really like how exercises are grouped per data structure and algorithm area. It's a good place to reach to for more practice on specific problem areas.

    Grokking Algorithms is the book I'd recommend to understand the most common algorithms. I'm convinced you don't need to know of more algorithms at tech companies and (most) engineering interviews. I have bought - and read most of the Algorithm Design Manual and Algorithms: Fourth Edition. Both books go far deeper than I have found any coding interview to dive into. Unless you're really into algorithms, I would not recommend them.

    2. Coding Sandboxes

    Practicing coding exercises is something you'll want to do, and there is no shortage of sandbox platforms:

    • Leetcode is the mostpopular destination, with lots of free resources, and a Pro tier.
    • Codewars coding katas: complete small coding challenges.
    • Edabit coding challenges is a free resource with numerous coding challenges.
    • SWECareers is built by a Facebook engineer, and is the most affordable service that comes with a detailed algorithms video course, and 200 common coding questions, categorized by companies that tend to ask them. Get a 10% discount by using this link (affiliate)
    • AlgoExpert is a paid service that offers video walkthroughs for more than 100 coding challenges, curated by a former Google engineer.

    3. Other Resources

    There are almost too many articles, videos, and people giving advice on how to prepare for coding interviews at tech companies. Here are my favorites:

    • Discord servers can be useful in finding mock interview partners, and getting the scoop about the process at various companies. See the most popular Discord servers here.
    • Problem-Solving for the CS Technical Interview- a course from Stanford. The slides and course material are one of the best preparations for Big Tech coding interviews. I used an early, 2009 version of this course to prepare for interviews when I moved to the UK.
    • Get That Job at Google- an article from Google engineer Steve Yegge, from 2008. Shockingly, the contents did not get out of date.
    • Always be coding: how to land an engineering job from Google and Square software engineer David Byttow. The article was written in 2013, but I find the advice still relevant. See this video from 2019 with actionable advice. I especially like the advice on reinventing the wheel - I did the same when preparing for interviews.
    • The Google frontend interview process by Emma Bostian, who interviewed onsite here.
    • Interview bootcamps are becoming more popular. They are the most expensive option but can help you level up faster and give you far more feedback. I suggest you choose ones where the identity of the instructors is known, and they are experienced interviewers at the types of companies you are hoping to break into.

    Take Ownership of Your Education

    Big Tech interviews are both fairly standard and widely documented. There is a wealth of resources to prepare for the coding interview and a growing pile of systems design resources.

    It's easy to get lost in so much information: which is why you should make a plan on how you will get 'interview-ready'.

    Create a study plan with topics you want to cover for the interview types you're expecting to have. Learn the theory, then practice this with practice and exercises where you create something from scratch: implementing a data structure, drawing up a diagram.

    There is no shortage of people complaining about the difficult interview process Big Tech has. However, I know of no other industry where you can get a high-paying job with no college degree, no connections: purely through interviews that are fairly standard among the highest paying employers like Netflix, Airbnb, Uber, Facebook, Pinterest, and others.

    Tech interviews being 'standard' across the Big Tech makes preparing for these a high-leverage activity: study once, interview many times. Once you prepare, just make sure your software engineering resume grabs the attention of the recruiters.

    Good luck - and if you are looking for more advice for senior and above interviews, I have some.