System design interview preparation is a big challenge. The questions are complex, open-ended, and unlike any other interview round. Companies like Facebook, Google, and Amazon use these interviews to evaluate candidates for software engineer and many other tech roles, making them a key part of the hiring process.
So, what do you do to prepare? And where do you start?
That’s where we come in. From analyzing hundreds of interview questions reported by real candidates on Glassdoor, we’ve learned what top tech companies are looking for. Instead of bouncing around the internet to find preparation tips, example questions, and concept definitions, you can simply use this guide. Consider it your ultimate hub for system design interview prep.
To begin, here’s a quick overview of our step-by-step guide:
- Learn how a system design interview works
- Sharpen your skills
- Practice with example questions
- Do mock interviews
What should you expect in system design interviews, and where will you encounter them? Let’s start with the basics.
1.1 What to expect in a system design interview
System design interviews are typically 45-60 minutes long, beginning with a very broad prompt, like "design Twitter.” Then you'll be expected to generate a high-level design, showing the different system components that will be required, how they're connected, and any trade-offs in the approach you've taken.
The frequency of these interviews will depend on what role you’re applying for. As a rule of thumb, the more senior the position, the more system design interviews you’ll have.
If you’re applying for junior positions, your interviews will be more focused on coding, and you’ll usually have a maximum of 2 system design interviews. You may not have any. If you're applying for a more senior software engineer role, or for a software development manager position, then you should expect system design interviews to be much more heavily emphasized.
In addition to software engineer interviews, system design questions are also used for TPM interviews, and potentially in recruitment for other technical roles as well.
If you already have a system design interview scheduled at a specific company, consult the relevant link below to learn more about the company's process and to see their previous questions. This is not a comprehensive list of all companies that use system design interviews, but it does cover some of the biggest companies in the industry.
- Facebook software engineer interview guide
- Facebook technical program manager interview guide
- Google software engineer interview guide
- Google technical program manager interview guide
- Amazon software development engineer interview guide
- Amazon software development manager interview guide
- Amazon technical program manager interview guide
- Microsoft software engineer interview guide
- LinkedIn software engineer interview guide
- Airbnb software engineer interview guide
With open-ended questions such as “ how would you design Twitter's trending topics?” or “design TikTok,” you’ll need to draw on a broad range of knowledge across different concepts. With so much to talk about, you’ll also need some kind of method to help you structure your thought process.
Let’s get into it. Or, if you’d prefer, you can skip straight to the example questions and start practicing.
2.1 The concepts you need to know
To be able to speak intelligently about system design, you’ll need to acquire a knowledge base of related concepts. Of course, this doesn’t mean that you need to know every detail related to sharding, load balancing, queues, etc.
However, you will need to understand the high-level function of typical system components. You'll also want to know how these components relate to each other, and any relevant industry standards or major tradeoffs.
To help you get the foundational knowledge you need, we've put together a series of 9 system design concept guides.
Here's a the full list:
- Network protocols and proxies, which make it possible for any networked computers to talk to each other, no matter where they are or what hardware or software they’re running.
- Databases, integral components of the world’s biggest technology systems.
- Latency, throughput, and availability, three common metrics for measuring system performance.
- Load balancing, the process of distributing tasks over a set of computing nodes to improve the performance and reliability of the system.
- Leader election algorithms, which describe how a cluster of nodes without a leader can communicate with each other to choose exactly one of themselves to become the leader.
- Caching, a technique that stores copies of frequently used application data in a layer of smaller, faster memory in order to compute costs and to improve data retrieval times and throughput.
- Sharding, the horizontal scaling of a database system that is accomplished by breaking the database up into smaller “shards,” which are separate database servers that all contain a subset of the overall dataset.
- Polling, SSE, and WebSockets, techniques for streaming high volumes of data to or from a server.
With those concepts in mind, let’s work out an approach that you can apply to any system design problem.
2.2 Method and approach
There are a variety of ways to solve system design interviews, but at the end of the day, you need a method that will consistently:
- Show your interviewer that you have the knowledge they need
- Break the problem down into manageable steps
With that in mind, one of our favorite approaches is summarized in the following video from Amazon:
The approach shown in the video above can be boiled down into 3 main steps:
- Ask clarifying questions: make sure you clearly understand the goals and requirements of the system.
- Design high-level, then drill down: quickly clarify the requirements and draft a high-level design for the system within the first 20 minutes. Then spend most of the remaining time drilling down into more detailed aspects of the system.
- Bring it all together: take a few minutes to summarize your solution and highlight important bottlenecks or improvement opportunities.
If you’d like extra analysis on this method for system design questions, take a look here.
2.3 Extra tips
Now that you have a method and concepts to work with, we’d like to give you a few more helpful tips via the video from Google below. It reiterates a few points and offers some additional suggestions from Googlers on how to succeed in system design interviews:
Here is a brief summary of the video:
- Communication. Make sure you ask clarifying questions, gather requirements, and communicate out loud in a structured way.
- Designing to scale. Get to a first design in less than 20mins, and then dive into how to make it scalable, reliable, and efficient enough so that it can be used at "planet scale."
- Concrete and quantitative solutions. Be familiar with common design patterns (e.g. sharding data) and be ready to estimate the cost generated by the system you designed (e.g. read from disk / memory).
- Trade-offs and compromises. Proactively call out the trade-offs and compromises you've made in your design. Iterate the design if necessary.
Now that you've learned a method for approaching system design questions, it’s time to take a look at several example questions and their solutions to better understand how to put these ideas into action.
Big tech companies must cater to a constantly growing number of users. Their teams therefore need to be able to design systems that are highly scalable.
So these interviews ask you to deal with distributed systems on a very large scale. Think availability, scalability, partition tolerance, reliability, storage, databases, core systems, etc. The questions will be very open-ended and feel more like a discussion. You'll therefore want to show that you can both be creative and structured at the same time.
Below are the most common system design questions asked in interview reports on Glassdoor, along with the best free example solutions we've been able to find online. As they’ve been reported by real candidates, these questions are representative of the types of system design questions you'd be asked at leading tech companies, like Facebook, Google, Amazon, etc.
The more practice you can get with system design questions like these, the better prepared and the more comfortable you'll be for your interviews.
Example system design questions - with solutions
- Design TikTok (Solution)
- Design Twitter (Solution)
- Design Instagram (Solution)
- Design WhatsApp (Solution)
- Design Uber (Solution)
- Design a parking lot (Solution)
Example system design interview questions
- How would you design a distributed Botnet?
- How would you design a system that can handle millions of card transactions per hour?
- How would you design Twitter's trending topics?
- How would you design a system that counts the number of clicks on YouTube videos?
- Design a global system to upgrade software on a fleet of machines
- How would you design Amazon.com so it can handle 10x more traffic than today?
- How would you design an API for a tic tac toe game?
Learning system design concepts and the specific interview process for your favorite company will go a long way in helping you prepare. But this information is not enough to land you a job offer.
To succeed in your system design interviews, you're also going to need to practice under realistic interview conditions so that you'll be ready to perform when it counts.
The easiest way to start practicing under simulated interview conditions is to practice interview questions out loud or with peers.
4.1 Practice by yourself
A great way to practice all of these different types of questions is to interview yourself out loud. This may sound strange, but it will significantly improve the way you communicate your answers during an interview.
Use a piece of paper and a pen to simulate a whiteboard session, or, of course, use a whiteboard if you have one. There are also online whiteboarding tools like Excalidraw, Visual Paradigm, or Sketchboard.me, which are particularly useful to practice for virtual interviews.
Play the role of both the candidate and the interviewer, asking questions and answering them, just like two people would in an interview. Trust us, it works.
4.2 Practice with peers
After you've started to get the hang of some program manager interview questions by practicing by yourself, then a great next step is to do mock interviews with friends or peers.
This can be especially helpful if your friend has experience with system design interviews, or is at least familiar with the process. You can also find peers to practice with on our free peer-to-peer mock interview platform.
3.3 Practice with ex-interviewers
Practicing with peers can be a great help, and it's usually free. But at some point, you'll start noticing that the feedback you are getting from peers isn't helping you that much anymore. Once you reach that stage, we recommend practicing with ex-interviewers from top tech companies.
If you know someone who has experience running interviews at Facebook, Google, or another big tech company, then that's fantastic. But for most of us, it's tough to find the right connections to make this happen. And it might also be difficult to practice multiple hours with that person unless you know them really well.
Here's the good news. We've already made the connections for you. We’ve created a coaching service where you can practice system design interviews 1-on-1 with ex-interviewers from leading tech companies. Learn more and start scheduling sessions today.
Any questions about system design interviews?
If you have any questions about system design interviews, do not hesitate to ask them in the comments below. All questions are good questions, so go ahead!