System design interview preparation is a big challenge. The questions are complex, open-ended, and unlike any other interview round.
So, what do you do to prepare and practice? 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 like Google, Meta, and Amazon 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 preparation.
To begin, here’s a quick overview of our step-by-step guide:
- Learn how a system design interview works
- Learn the key concepts
- Learn a method
- Improve your interview technique
- Practice with example questions
- Do mock interviews
Practice system design interviews 1-to-1 with an ex-interviewer
1. Learn how a system design interview works
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.
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.
- Meta software engineer interview guide
- Meta engineering manager interview guide
- Meta technical program manager interview guide
- Google software engineer interview guide
- Google engineering manager 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
- Uber engineering manager interview guide
Right, let's look at the fundamental concepts you'll need to understand ahead of your interview.
If you’d prefer, you can skip straight to the example questions and start practicing.
2. Learn the key concepts
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.
- Queues and pub-sub, mechanisms that allow a system to process messages asynchronously, avoiding bottlenecks and help the system to operate more efficiently.
To build on the concepts outlined above, and more, the Byte Byte Go YouTube channel has lots of brilliantly-made and very concise videos worth checking out.
3. Learn a method
With so much to talk about, you’ll also need some kind of method to help you structure your thought process.
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.
Click here for a deeper dive into this system design answer method: we'll show you how it works step-by-step and walk you through an example answer. Plus, find out what separates a great answer from an okay answer.
4. Improve your interview technique
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.
4.1 Five big tips for system design communication
Getting your communication right is a major part of cracking system design interviews. There's a bit more to it than simply "talk through your thinking", and so here we've laid out our five biggest tips for system design communication.
#1 Be honest
If you're junior or mid-level, you might reach some places in your design where you're dealing with things you don't know much about. Be transparent with the interviewer about this (they'll be able to tell anyway!) but try and make a decision anyway. Say something like "I don't know that much about X, but I think I would do Y here, correct me if I'm wrong".
#2 Collaborate with “active” interviewers
Most system design interviewers are “active”. They want the interview to flow like a conversation. and will gladly engage with your questions and suggestions as you talk through your thinking. You’ll obviously need to be making the decisions, but they may give you hints to steer you down the right path. Try and make it feel like you’re leading a collaboration.
#3 Adapt to “passive” interviewers
That said, some interviewers are more “passive” and will engage with your questions and thoughts much less. Don’t panic and think this means you’re doing badly, it’s just their style. Still check in with them at key junctions throughout your design, but be ready to do it on your own.
#4 Display confidence
Especially with “active” interviewers, it can be tempting to run every decision past them to check it’s the right one. This suggests a lack of experience. Talk them through your thinking, but you should only directly ask them for confirmation at certain points - such as after you’ve listed the requirements and after your high level design.
#5Talk through trade offs
You’ll have to make lots of trade offs as you create your design. But as you choose A instead of B, make sure to tell the interviewer why you’re doing so, or they might think you just made an arbitrary choice. Your reasoning for the trade-offs is as important as the design itself.
#6 Show enthusiasm
People who show that they enjoy their work are a much more attractive hire. Even if you’re not naturally very expressive, try to act as if you’re solving a really fun challenge. In your mock interviews make sure to practice smiling, looking the interviewer in the eye and giving out positive energy.
#7 Use hand-waiving
Not literally (although gesticulating can help you convey enthusiasm). Hand-waiving is when you mention something without properly explaining it. Due to time restrictions, you may have to do quite a lot of hand-waiving to keep the interview on track. That's fine, just be sure to call it out. As in "I'm going to add an X in there to do Y, and we can come back to that later if there's time but I'm going to hand-waive over that for now".
Check out this mock system design interview for a great demonstration on how to communicate in your interview, particularly on tips #1, #6 and #7:
As a former engineering manager at Google, Mark has a lot of experience but it's his communication skills rather than his technical expertise that make him a strong hire candidate here.
For more tips on system design interview technique, take a look at our article: 19 system design interview tips from FAANG ex-interviewers.
Now that you've learned how to improve your interview technique, it’s time to put it into practice. Take a look at several example questions and their solutions to better understand how to put these ideas into action.
5. Practice with example questions
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. For even more questions, take a look at this list of system design interview questions.
Example system design questions - with solutions
- Design TikTok (Solution)
- Design Twitter (Solution)
- Design Instagram (Solution)
- Design a messaging app like Telegram (Solution)
- Design Uber (Solution)
- Design a parking lot (Solution)
- Design Spotify (Solution)
- Design a Distributed Message Queue (Solution)
- Design a payment system (Solution)
- Design a system to identify top 1K items (Solution)
- Design a distributed cache (Solution)
6. Do mock interviews
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.
6.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.
6.2 Practice with peers
Once you've done some individual practice, we would also strongly recommend that you practice solving system design questions with someone else interviewing you.
If you have friends or peers who can do mock interviews with you, that's an option worth trying. It’s free, but be warned, you may come up against the following problems:
- It’s hard to know if the feedback you get is accurate
- They’re unlikely to have insider knowledge of interviews at your target company
- On peer platforms, people often waste your time by not showing up
For those reasons, many candidates skip peer mock interviews and go straight to mock interviews with an expert.
6.3 Practice with experienced system design interviewers
In our experience, practicing real interviews with experts who can give you company-specific feedback makes a huge difference.
Find a system design interview coach so you can:
- Test yourself under real interview conditions
- Get accurate feedback from a real expert
- Build your confidence
- Get company-specific insights
- Save time by focusing your preparation
Landing a job at a big tech company often results in a $50,000 per year or more increase in total compensation. In our experience, three or four coaching sessions worth ~$500 make a significant difference in your ability to land the job. That’s an ROI of 100x!