System Design Interview Roadmap and Resources

Sphoorthi Gaddam
Tech x Talent
Published in
3 min readSep 2, 2021

How to prepare for System Design interviews?

I’ve prepared and gave multiple interviews last year. One of my favorite interview types is the System Design Interviews. I’ve swayed through many great resources — blogs, books, websites to prepare for these interviews. Here I am putting together a roadmap and resources I used that will help prepare for these interviews.

System Design Interviews are usually unstructured and open-ended, which are 45 to 60 minutes long. The questions are usually a prompt like “Design WhatsApp.” The expectation is to give a high-level design showing different components, connections, and trade-offs of design choice. Think the design at scale.

Know the System Design Topics

System Design is a vast subject, and you obviously need not know everything. Read through the topics below,

  1. Scalability: Every system we use today is built to scale. Scalability is a system’s ability to perform under load. Understand the different approaches to cope with the load — Horizontal Scaling and Vertical Scaling.
  2. Caching: With increasing load, there is an increase in data and fetching from the database every time results in a slow response. Caching improves page load times and can reduce the load on your servers and databases. Read through the caching mechanisms and understand different caching strategies.
  3. Databases: Understand different storages, Relational Databases, and Non-Relational Databases, and SQL vs. NoSQL. For SQL, go through topics like replication, sharding, functional partitioning, denormalization, and ACID properties. For NoSQL, understand topics like BASE properties, different ways NoSQL data is stored — key-value store, document store, wide column store, or a graph database.
  4. Load Balancers: When there is an increasing load, we often use load balancers to distribute the load between the resources such as application servers and databases. Understand the different uses of load balancers and the different load balancing strategies available.
  5. Microservices: Microservice architecture is an application that is deployed as a collection of lightweight and small services. Each service is independent of others and communicates through a well-defined mechanism. While you’re here, read Monolithic vs. Microservice architecture and Service Registry and Discovery.
  6. Other topics worth reading and learning are — Consistency Patterns, Availability Patterns, CAP theorem, Asynchronous communication mechanisms, long polling, rate limiting, consistent hashing, and Reverse Proxy.

This list is not exhaustive but should be a good starting point for you to get started.

Understand the approach

After you get through the basics, get familiarized with the approach to these questions,

Read through few questions and understand how the problem is being approached. The goal of this interview is to build a design and be collaborative. CLARIFY the assumptions about the problem asked.

For example, if you are asked to design an existing application like WhatsApp, we are aware of the features WhatsApp provides today; please DO NOT start by making assumptions about chat, groups, status features, and build the system. Make sure to ask the requirements of the system and scope the design accordingly. If the requirements are not clarified, the chances are that the scope of the design is more than required, you run out of time designing everything, and the interviewer does not understand the approach.

Things to note while walking through examples are,

  1. Requirements and use cases are defined.
  2. Focus on how the bottlenecks are identified and resolved.
  3. Note the design choices — why SQL over NoSQL, what type of caching is being used, trade-offs between choices, read to write ratio for the system, and how the components are connected.

I will be covering the approach to these problems in another blog.

Mock Interviews

  1. Give a good number of mock interviews for System Design. Pramp was very useful during my preparation for my system design interviews.
  2. Find a buddy — if you don’t have an interviewing buddy from your connections, find one on Pramp, Team Blind, or any developer community slack groups and keep practicing.

Remember that it is not going to be a one-off preparation. You will explore more topics and many design choices, which will help you beyond the interviews.

Resources:

Listing down a few of the resources which helped me prepare for these interviews, there are a ton of blogs when you navigate through GitHub Primer

Blogs / GitHub:

Books:

YouTube:

Courses:

Thank you for reading! I hope this helps!

Claps and Comments are much appreciated :)

Reach out at LinkedIn or Instagram for any other questions.

--

--

Sphoorthi Gaddam
Tech x Talent

👩🏽‍💻 Engineer who enjoys beyond career conversations. Fitness | Mindset | Productivity | Books | Tech and Career