About a month ago, I applied and went through a couple of interview loops for mid-level software engineer roles at big-tech companies. This was my first exposure to system design interviews because I never had to do them as an intern or entry-level software engineer.
The extent of my system design knowledge was in designing SQL database tables. The majority of my other developer contributions were made through Google’s internal tooling and frameworks which abstracted a lot of the heavy system design work away. This was good for productivity, but not the best thing for learning about systems on a fundamental level.
In a period of about 4 months, I was able to learn everything related to system design that I needed to pass interviews for a mid-level software engineer role. In this article, I will go over the best resources for system design that I found helpful for myself (and hopefully will be helpful for you).
1. The Best Introductory System Design Interview Book
If there’s one book I had to recommend for someone getting ready for system design interviews, the best book I would recommend would be System Design Interview – An Insider’s Guide.
System Design Interview – An Insider’s Guide is probably the best book to read to prepare for system design interviews. It covers the crucial components of distributed system design as well as a proposed flow for navigating the interview itself. This is a book you want to read from cover to cover.
This book is not too long and is relatively easy to read. The first chapter alone provides a great introduction to building a complete, scalable, highly available, and low-latency distributed system.
Is System Design Interview – An Insider’s Guide For Beginners?
For myself, an engineer who felt completely incompetent about designing end-to-end distributed backend systems that scaled to millions of users,
System Design Interview – An Insider’s Guide is the best book you could read as a newbie to get a high-level understanding of the components of scalable distributed system design. In addition, the book contains detailed examples of common system design problem types that could be asked during an interview.
In terms of my return on my time investment into the book, I could confidently say that this brought me from utterly incompetent to comfortable with the main concepts of system design and the system design interview process.
Is System Design Interview – An Insider’s Guide Worth It?
There are a lot of resources people can use to study for the system design interview. Many of these resources are free through blog posts and YouTube videos, and some of them are courses or books you have to pay for. Is System Design Interview – An Insider’s Guide worth the price as a resource you have to pay for?
Of all the resources that I’ve used, I would say that System Design Interview – An Insider’s Guide is the best resource on this list that’ll give you the most relevant system design interview information in the shortest amount of time.
The way the book is written compacts a lot of information into its pages, but still allows the book to be very readable. The book adds lots of references to outside information that you can additionally research.
I really enjoyed this type of presentation method because it allowed for a really productive reading experience for the entire book at an appropriate level of information breadth for system design interviews.
Is System Design Interview – An Insider’s Guide Volume 2 Worth It?
Whenever you see another volume of a book, sometimes it’s not worth checking out if you’ve read through a previous volume of the book before. Is that the case for System Design Interview – An Insider’s Guide Volume 2, or is the information within the second volume of the book worth purchasing?
System Design Interview – An Insider’s Guide Volume 2 is worth buying in addition to the first volume. The first volume provides a framework for approaching system design interviews and system design problem examples. This second volume contains additional examples in greater and more relevant depth.
As a disclaimer, I’ve only read a handful of chapters of the second volume of the book series at the time I’m posting this article. Based on my independent research online, I found that the second volume of this book went into much more detail than was likely going to be necessary for the mid-level software engineering roles I was targeting.
If I was interviewing for senior roles and above, I think that the second volume of the book would be worth reading through along with the first volume. I might even read it for fun later on (even if I’m not actively looking to interview) because a lot of the system design information in the book is relevant to day-to-day work, after all.
Overall, I would say that the second volume of System Design Interview – An Insider’s Guide is worth reading if you have the time for it within your preparation because it covers different system designs (which appear to be fair game for interview) compared to the first volume in greater detail.
What Does System Design Interview – An Insider’s Guide Lack?
While I think that the book System Design Interview – An Insider’s Guide is a great book for learning about performing well on system design interviews, I think it’s only fair to mention some of the areas it fails to cover which are important.
System Design Interview – An Insider’s Guide is a great book but could be better if it discussed more depth about tradeoffs behind design decisions, discussed the application of real-world software used within distributed systems, and discussed additional common system design examples.
Many of the tradeoffs discussed within the book were shallow compared to other resources available online. This could’ve been to keep the book simple and easier to digest (which I appreciated), but I think it’s worth mentioning.
An example of this is when a message queue was going to be used within a system to decouple the architecture. While the solution made sense in that example, what about the cases when you’d want to not use a queue? Basically, I’m hinting at the fact that there’s potentially a bigger discussion to be had which could be extremely relevant within a system design interview.
Another example of this is when deciding to use a SQL vs. NoSQL database. There is a larger discussion here about when to pick either type of database or when it wouldn’t necessarily matter. In addition, there are a lot of types of NoSQL databases to choose from like key-value, document, column-oriented, and graph databases (some are discussed within the book briefly).
This required me to look elsewhere from the book to find the answers I was looking for.
This led me to create another article on this site where I talk about tradeoffs between all the most important system design components.
Popular systems discussions
Depending on your system design interviewer, this might be important. In the book, a lot of the system design components for things like databases, caches, and queues were discussed at a very high level.
Some interviewers may be testing your ability on a slightly lower level. When you say you want to use a NoSQL database, maybe they’re looking for you to pick a particular one and justify the decision (like picking Cassandra vs. MongoDB).
With something like a cache, the book doesn’t elaborate on certain limitations or use cases of existing popular caching solutions like Memcached or Redis in a comparative way which could’ve also been useful.
At this point, I’m nitpicking what could potentially make the book better from my perspective of course. Detailed information on these specific pieces of software is available online for free.
From what I’ve researched online there are other key system design interview problems/examples that are worth researching. Each of these problems has unique constraints and approaches that I don’t think you would want to risk seeing for the first time during a system design interview.
Additional system design questions that aren’t included are:
- Design the backend to a reservation system for Booking.com
- Design the backend to a food delivery service in GrubHub
- Design the backend to a dating matching app like Tinder
The first and second volumes of the book series do not include these examples that I’ve listed even though they’re fairly popular (where variations are asked during real system design interviews). This is probably the biggest nitpick here because this issue can logically be addressed in additional volumes of the book series.
2. The Most Popular System Design Interview Course
When I was initially researching ways to prepare for the system design interview, I came across a single course that was commonly recommended. This recommendation spanned various web spaces such as personal blogs, Reddit, and Blind.
The most popular system design interview course that is recommended is Grokking the System Design Interview on educative.io. This course was especially recommended for mid-level engineers because it covers just enough to pass commonly asked system design questions.
I’ll be completely honest about my initial experience with the course at that time.
What Is Best About Grokking the System Design Interview?
The best part of Grokking the System Design Interview is probably the number of example system design problems along with the commentary. That’s what I found to be the most useful in my study plan. At the time of this article, there are 15 system design problems with commentary.
Something else I found useful was searching for the problems on YouTube and discovering alternative system design solutions that discuss different tradeoffs, assumptions, and requirements.
What Is Bad About Grokking the System Design Interview?
While many people deem Grokking the System Design Interview as the best-recommended course for preparing for the system design interview, the course does have its faults (in my opinion).
The worst part about Grokking the System Design Interview is that it doesn’t go over the basics in an easy-to-understand way for beginners. I read texts that were confusing without a basic understanding of system design, to begin with (which is why I bought the course).
Additionally, the explanations of the system design interview examples and components of the glossary were somewhat difficult for me to understand.
I briefly touched on this before as well, but this course (based on random internet forum users) appears to be sufficient at best for mid-level engineer system design interviews. At senior levels and above, Grokking the System Design Interview may not cover enough depth to be used as learning research alone.
The last critique that I have of the course is that you pay for it with a subscription. While I understand that they could add more content to this course over time, I don’t think this is worth a subscription (especially if the frequency at that they add content is extremely rare).
Is Grokking the System Design Interview Worth It?
When I purchased a subscription to view the course, it was pretty confusing for me to understand all the system design concepts and examples. Looking back on some of the free lessons in hindsight, it did seem just comprehensive enough for my system design interviews (for a mid-level role) and understandable once you have a basic understanding of system design.
While I found Grokking the System Design Interview to be difficult to understand as a beginner, it does serve its purpose well if you supplement your learning and deep-dive concepts elsewhere. That said, is the course worth it then?
Grokking the System Design Interview is worth it because it does cover the major fundamentals and concepts of the system design interview. The examples are the best part of this course because they’re in the point-of-view of how you are expected to drive the system design interview discussion.
In my personal opinion, the course is worth reading for its content (subscribing only for a month or two to finish consuming the content). To make the best use of the course, it would be best to fully understand each of the example system design problem explanations (paying close attention to the design choices).
3. The Most Underrated System Design Course
In hindsight, I’m glad that I found this resource when I was first starting out with my system design interview prep.
AlgoExpert (the product) is AlgoExpert’s (the company) best product that everyone talks about when preparing for coding interviews. However, I think that their SystemsExpert product should receive more attention because of its quality and unique video delivery of system design interview content compared to similar products.
SystemsExpert is the best system design course that I found to be helpful as a beginner. While there are other resources like Grokking the System Design Interview and System Design Interview – An Insider’s Guide, SystemsExpert provides an alternative learning experience through high-quality videos.
What is Good About SystemsExpert?
One of the biggest things I was worried about when studying for the system design interview was making sure that I knew all the important concepts that could be potentially discussed during the interview. In other words, I was afraid of “what I didn’t know, I didn’t know“.
The best part of SystemsExpert (in my opinion) is the “System Design Fundamentals” section of the course. Here, all the fundamental concepts of system design are explained in video form. There are currently 25 videos, and they span concepts from the client-server model to map-reduce.
When I was going through my system design interviews, there weren’t any major system design component pieces that weren’t covered by SystemsExpert’s System Design Fundamentals course.
One of the things that took me a little bit off guard during a couple of system design interviews (one for a mid-level role and another for a senior role I was using as interview practice) was the detail expected by the interviewers related to alerting and monitoring (which I understand is important within a real system). SystemsExpert could have gone into more detail about this, but it was fine during my interviews because I had prior experience (luckily) with alerting and monitoring.
What is Bad About SystemsExpert?
As good as SystemsExpert was for me when it came to the fundamental system design components, I do have my own personal negative critiques of the platform.
The worst parts about SystemsExpert would be their limited number of system design questions, as well as the presentation of the video solutions. There are only 13 questions, and the videos are handwritten in a way that was hard for me to read.
I would really like it if the videos were remade and used another platform (or equivalent) of Excalidraw to make the presentation cleaner with typed/formatted text and blocks for system components. At the very least, the messy presentation of the videos didn’t interfere with the contents of the course in a significant way because of the adjacent “Solution Overview” tab which presented the contents of the video explanations in a cleaner way via text and images.
There are a couple of other issues I have with SystemsExpert that may be helpful to other people deciding on whether to purchase it.
Video heavy content
Personally, I bought it because it’s video-heavy content and that’s how I prefer to consume content most of the time. However, I think it’s important to understand the limitations of this consumption format.
For many podcasts or entertainment-type content, you’re able to 1.5x or 2x the speed and still understand what’s going on. With educational-type videos, this is difficult to do because you can’t process and learn all the information that fast without backtracking throughout the video actively.
Basically, my experience with video content is that it’ll take you longer to process concepts because watching video content is slower than reading through an equivalent text.
With text-based content, you can speed up, slow down, and re-read content is a much more efficient way. While SystemsExpert does provide some text content alongside its video content, I would say that the primary product within SystemsExpert is supposed to be its video content. So, mind that fact if you’re pressed for time.
Is SystemsExpert Worth The Price?
Even though SystemsExpert’s product covers 4 modules composed of system design fundamentals, system design questions, system design quiz, and system design interview tips, I found only two of them (fundamentals and questions) to be the most helpful in preparing for my system design interviews.
So, for these two modules, is SystemsExpert worth the price (and was it worth it for me)?
SystemsExpert is worth the price of about $140 a year if you’re looking for video content on system design interviews for an absolute beginner. The system design fundamentals section of the course itself was worth my money because of how clear the video explanations were.
Just understand that this is an introductory-level product. Based on my personal research online, the interview examples within SystemsExpert are acceptable for mid-level engineers but may not be enough for senior-level engineers at big tech. I’ll report back with my personal findings “if and when” I interview for senior roles in the distant future.
4. Best Basic System Design Interview Video Examples
When I said that I started from zero system design knowledge, I meant it. This resulted in me struggling to understand a lot of system design interview examples.
Of all of these examples, a series of videos I found very helpful for myself as a beginner was Exponent’s YouTube series on system design. As a person who prefers to consume video to learn the material, this was probably the greatest introduction I had to what a system design interview would look like along with learning the important concepts.
Through these videos, I learned about how the general flow of the interview would be as well as seeing how various mock candidates reason through design choices during the interview.
One of the best parts about these video series is the comments section. A lot of people in the comments section recommend alternative solutions and feedback for what they would’ve done differently. I found all of this feedback in addition to the video series to be extremely helpful in studying for my system design interviews as a beginner.
Are Exponent’s System Design YouTube Videos Enough?
My biggest unfavorable critique of the series is the depth of the content within the interviews. While the mock interviews simulated the general flow of a real system design interview, they were about half as long as the real thing would be (15 – 20 minutes instead of 45 – 60 minutes). That’s why I imagine a lot of decisions were made relatively fast without much depth considered in each of the design choices.
That said, I still think this is probably one of the best introductory video series into system design for absolute beginners.
What Other Good Video Resources to Learn System Design Exist?
Besides Exponent’s system design-related videos, there are a couple of other YouTube channels that I found helpful to learn system design interview concepts.
I found Gaurav Sen’s YouTube playlist on system design to be really beneficial in deep-diving into certain components of system design. He does a great job of describing a lot of the lower-level details in deciding when to opt to use one form of a system design choice over another.
In addition to describing each of the important individual components of a system design interview, he does provide examples of mock system design interviews on his channel which I found to be useful as well.
Additionally, in Exponent’s playlist, this one of the best free video resources I used to prepare me for my system design interviews.
I wish I looked at the entire playlist during my system design interview preparation because after looking through some of the videos that I overlooked, they’re really helpful. Instead, I only watched videos from sudoCODE on certain topics that I was shaky on for a greater understanding.
Personally, I’ve watched (and deeply remember) sudoCODE’s videos related to database types, message queues, database replication, and consistent hashing and they were really solid in terms of video production quality and tangible information given.
This is just another resource that worked for me to supplement my system design interview preparation, so I thought I’d mention it.
5. Most In-depth System Design Book
Designing Data-Intensive Applications (often referred to as DDIA) is a masterpiece.
If I was learning modern system design in college, this would be the textbook the professor would assign. This is the most comprehensive book in explaining the fundamental problems and solutions related to creating distributed systems that are faced within the current age.
As a result, this book is highly recommended by many software engineers.
I haven’t read through all of the chapters yet (only the first four chapters), but I plan on reading through all of them later on. The book is very helpful in providing details about the actual mechanisms of system design which can be deep-dived during system design interviews. I’d imagine that this would be much more relevant at senior (and beyond) level interviews.
Is Designing Data-Intensive Applications (DDIA) Worth Reading for System Design Interviews?
I wouldn’t recommend reading through the book (alone) to prepare for the system design interview especially if you’re pressed for time. This book gives you clarity into lower-level system design decisions (which may be discussed) but doesn’t cover the key elements of the system design interview.
Instead, I think that it’s worth reading through at your own pace well before you start preparing for system design interviews (if possible). The knowledge within this book is a lot more practical for the day-to-day software engineer job compared to other interview preparation resources and products.
6. The Best System Design Newsletter (My Favorite)
One of my goals for learning system design (asides from passing system design interviews) is to truly become more knowledgeable about designing and architecting systems over time. I understand that this process is a marathon and not a race.
A great way I learned to do this is by following the ByteByteGo newsletter which sends out easy-to-understand weekly emails about system design topics at both a high and low level.
This is a resource that I found at the end of my system design preparation (when I was already prepared enough for interviews), but I wish I found this resource *long ago* when I was a junior engineer.
The best time to learn about system design is as early as possible because ideas and concepts related to system design compound each other.
A lot of the information within the newsletter is lightweight and revolves around building and understanding services that run on a large scale, and I strongly recommend this to all software engineers.
7. Top 8 Engineering Blogs for System Design
As a part of my daily work routine, I started reading tech blogs from popular tech companies to see how they addressed certain problems within their fields at scale. While reading articles from these blogs (alone) didn’t directly prepare me for my system design interview, they helped me gain different perspectives on designing maintainable and scalable systems.
Below, I’ll list a handful of my favorite engineering blogs to follow, in no particular order.
- Instagram engineering blog: https://engineering.fb.com/tag/instagram/
- formerly https://instagram-engineering.com/
- Netflix technology blog: https://netflixtechblog.com/
- Discord engineering blog: https://blog.discord.com/engineering-posts/home
- Twitter engineering blog: https://blog.twitter.com/engineering/en_us
- Uber engineer blog: https://eng.uber.com/
- Airbnb infrastructure blog: https://medium.com/airbnb-engineering/airbnb-engineering-infrastructure/home
- Flipkart technology blog: https://tech.flipkart.com/
- Grab technology blog: https://engineering.grab.com/