This article was written in collaboration with interview coaches Nupur D. and Tim L. Previously a technical program manager at Google, Nupur has coached more than 300 people over her career and currently works as a TPM for a fintech company in India. Tim is a former Senior Software Development Engineer with AWS, and he has interviewed 500+ software engineering candidates across his career.
If you are targeting a technical position in a company like Facebook, Google, or Amazon, you’ll likely be tasked with a system design question such as “design Twitter” or “design a file transfer system.”
These interviews can be tough to crack if you haven’t learned how to answer system design questions. The good news is that we have helped thousands of candidates prepare for tech interviews, through our tech interview guides and with our 100+ mock interview coaches.
We’ve dug into the source material for our system design, TPM, and engineering manager guides, and we’ve reached out to our coaches to give you advice about what works and what doesn’t.
In this article we summarize the most important tips we have learned in the process. So let's get started!
Let’s start with some tips to help you prepare.
Tip #1: Start early
This might sound obvious, but system design interviews are challenging, so you should start preparing early. Some of the people we work with start studying up to 6 months before their interview. Starting that much in advance may not be necessary for everyone, but the earlier you start, the higher your chances of getting an offer.
Tip #2: Get to know the company
Get acquainted with the company you’ve applied to. In many cases, the system design question you’ll be presented with will be a simulation of a real-life problem they’re facing in the company. If you’re applying to a specific team, study up on their products, the user, etc.
For instance, for software engineers, Facebook will often offer you the choice between a system design interview and a product design interview. At Amazon, their leadership principles will show up at every step of the interview process. Google frequently asks system design questions about Google Home, Voice Assistant, or YouTube.
If you'd like to learn more about a specific company's system design interviews, or their overall interview process, then we'd encourage you to check out our guide for that company below :
- Facebook software engineer interview guide
- Facebook engineering manager interview guide
- Facebook 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
- Microsoft engineering manager interview guide
- LinkedIn software engineer interview guide
- Airbnb software engineer interview guide
Tip #3: Review the concepts
To be able to speak intelligently about system design, you’ll need to understand the high-level function of typical system components. You should 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 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.
Tip #4: Practice with an answer framework
Working with a defined framework will help you approach system design questions systematically, rather than rambling your way through. You need a method that will consistently show your interviewer that you have the right technical knowledge and break the problem down into manageable pieces.
Our favorite approach can be boiled down into four main steps:
1. Ask clarifying questions
Check in on the system’s functional and non-functional requirements, its goals, etc. Call out your assumptions, and take the time to fully understand the question.
2. Design high-level
Specify and calculate key metrics for the system, identify its high-level components or services, and start designing the database.
3. Drill down on your design
Draw an architecture diagram while explaining your steps to the interviewer. Proactively identify bottlenecks in your system, and finalize your design by diving into a specific component after checking in with the interviewer.
4. Bring it all together
Re-examine what you’ve designed and assess whether it meets your initial objectives. Change some components if necessary, and save some questions to ask your interviewer at the end.
For a full breakdown of this framework, as well as an example answer, take a look at our guide on how to answer system design interview questions.
Tip #5: Practice with system design interview questions
Once you’ve reviewed the concepts and learned an answer framework, apply that knowledge to practice questions. Time yourself and attempt to solve the problem by yourself before checking any available solution.
Talk out loud as you practice. Play the role of the interviewer and the candidate, asking and answering questions. This will help you develop your communication skills and your process for breaking down problems.
For a full list of interview questions and solutions, take a look at our cracking the system design interview guide.
Tip #6: Prepare for different types of system design questions
The concepts and framework we’ve mentioned above work well for the most common type of engineering system design question: designing a cloud-based client-serving architecture (e.g. “Design Twitter”). However, this is not the only type of system design question that you may be asked.
You may have to design an embedded system (e.g. an application with a singular purpose, no downtime, focused on one hardware or software component). You may also be asked to provide a non-technical design (e.g. designing a parking garage), or you may be given a non-technical object or system (e.g. a game of chess) that you must analyze and describe as an object-oriented design.
In a TPM interview, you may not be asked to design a system from scratch, but rather to scale up an existing one. You may have to focus on the program management aspect of designing a system, rather than just the technical side. For example, your interviewer could ask how you will bring cross-functional teams together to build the system, rather than what API, database, or other technical component it needs.
[HINT: If you’re a TPM and you’re unsure of which aspects the interviewer is looking for, you can either state how you’ll be approaching the problem, or you can ask if they would prefer to hear about the program management or the technical side.]
These different types of questions will require different approaches to build a solid answer. So when you’re running through practice questions, be sure to include a variety of different types in your preparation.
Tip #7: Make use of your whiteboard
Get used to using a whiteboard or its virtual equivalent to capture design points like requirements and in order to diagram your solution. You won’t know what type of whiteboard or interview environment your interviewer will prefer, but it helps to practice with the format that works best for you, in case you’re given the opportunity to choose your tools. Test out local drawing applications and online whiteboards such as Excalidraw or Whimsical.
Tip #8: Study your favorite apps and products
To give yourself some extra inspiration when it comes to designing systems, make a list of your favorite applications and systems. Break them down into their individual components, and consider what makes them exceptional. Examine the challenges they would have faced in scaling the system and how these challenges have been addressed.
Having a deep understanding of successful architectures will help you understand more deeply the considerations of system design and come up with examples during your interview.
Tip #9: Practice common behavioral interview questions
System design interview sessions will commonly begin with a few behavioral questions before you jump into the technical question. The more concise and clear your answers are to these questions, the more time you save for the system design challenge.
For more help with behavioral questions, take a look at our guide to behavioral interview questions. This article targets Facebook more specifically, but the method and example answer within could apply to any company.
Tip #10: Do mock interviews
The most thorough way to prepare yourself for a system design interview is to simulate the conditions with a peer or interviewer. A great place to start is to practice with friends or family if you can. You can also find peers to practice with on our free peer-to-peer mock interview platform.
If you know someone who has experience running interviews at Facebook, Google, or another big tech company, then that's even better. Otherwise, you can practice system design interviews 1-on-1 with ex-interviewers from leading tech companies using our mock interview coaches.
While doing mock interviews, make sure that you write down the feedback you receive after each round. Use it to create action items for yourself, to know exactly what you should do to improve. Keep documenting the feedback and modifying the action items in your subsequent mock interviews, in order to continuously adapt and perfect your approach.
Now that you know how to approach your preparation, let's focus on a few tips that you should use during your actual system design interview.
Tip #11: Clarify the scope
Spend the first few minutes checking in with your interviewer about the functional and non-functional requirements of what you’re going to design.
The functional requirements are the inputs, outputs, and other behavior that a system is required to perform. They define the system. Non-functional requirements are the attributes that define the quality, usability, and effectiveness of the system. They are not necessarily mandatory for the system to function, but are key to meeting user needs.
Don’t forget to ask about the system’s goals and how they will be measured as well. Be sure that you fully understand the question before moving forward.
Tip #12: Talk through your answer
Hopefully, you will already be in the habit of speaking out loud from your time working through system design practice questions. Remember that your interviewer is not only testing your technical knowledge, but also your problem solving skills and your ability to work in a team.
So treat the interviewer as a collaborator, walking them through the steps you’re taking and clarifying any assumptions you’re making. If you need to concentrate on a tricky part, you can take a minute or two to work in silence, but don’t forget to pause and explain what you’ve done before moving on.
Tip #13: Ask for hints (but not too many)
Most interviewers aren’t interested in watching a candidate flounder for an hour. If you get stuck once or twice, speak out the points making you confused, and allow the interviewer to guide you back to the right track.
Of course, try not to do this more than two or three times, or else the interviewer may conclude that you lack critical thinking or decision making skills.
Tip #14: Listen for subtle hints
On the other hand, you won’t always need to ask for hints if you catch the ones that interviewers are already giving you. If you’re talking through your answer and dialoguing with your interviewer, this will be easier to pick up on.
99% of interviewers have good intentions, and they're trying to help you. Pay attention to what they tell you, and don’t allow yourself to get so stressed that you don't pick up on what the interviewer is saying. Take a breath and listen.
Tip #15: Mind the clock, but don’t forget to breathe
Timing is important, but it shouldn’t be a cause for panic. When you’re working through practice questions, use a watch or another device to help track the minutes. Make sure it’s the same one that you’ll be able to use during the interview itself, so that you’re comfortable with checking the time and adjusting your answer accordingly.
If you’re interviewing virtually, you can set up a timer next to your screen that will count down from 45 or 60 minutes, according to the length of your interview.
Follow the framework we mentioned before: at 20 minutes in, you should have your high-level design. After 40 minutes, you should be refining the architecture and getting ready to take final questions. Acclimate yourself with getting your thoughts out and organizing them in a limited time frame.
On the other hand, it is ok to stop and take a breath when you get stuck. A 30 or 60 second pause to regroup and gather your thoughts may feel like an eternity, but will not significantly eat into your interview time. It is better to have one minute of silence than ten minutes of spinning your wheels.
Tip #16: Find the appropriate level of detail
It is tempting to zero in on one aspect of a design and get stuck in a rabbit hole, which is not always a bad thing. The interviewer may not mind you taking a deep dive on a specific component, if it shows off your skills.
However, you should check with them first. You can say something like, “I’d like to explore this ID generation function further. How does that sound to you?” It’s best to do this after you’ve already laid out a high-level design, to avoid running out of time.
Try to focus on what the interviewer is looking for, to be sure that your deep dive is relevant to the question. If it applies, you can choose a component that you’re familiar with and go in-depth where you have the most knowledge. This will allow you to give more general designs for areas where you're weaker, due to the time limitations of the interview.
Tip #17: Design to scale
Consider how to make your design scalable, reliable and efficient enough so that it can be used at "planet scale.” Companies like Facebook, Amazon, and Google must support millions of users, so interviewers are looking for candidates who are able to build fault-tolerant systems that can handle growing traffic.
Tip #18: Proactively address tradeoffs and bottlenecks
Any decision you make will have a tradeoff. Call them out in real time, and use it as an opportunity to discuss different options with your interviewer and explain why your choice is the best one.
If you don’t bring up tradeoffs or bottlenecks, your interviewer will almost certainly ask about them. It’s better to beat them to it and show that you’ll consider these factors on the job as well.
Tip #19: Don’t give up
After 4+ hours of onsite or virtual interviews, you’ll likely start losing steam. Many candidates will fixate on their worst answers and assume they’ve bombed, giving up on the last interview rounds.
One of our coaches told us he’s looking for a candidate that he can “play ping-pong with,” meaning someone who can react to what he throws at them. Sometimes he’ll send an easy question, and other times he’ll throw in a curveball, but not all of the candidate’s shots have to score. What is most important is having endurance and staying in the game.
So apply yourself all the way to the end of your interviews, even if you’ve made errors. You may have impressed the interviewer in ways that you were not expecting.
Got a system design interview coming up?
System design interviews can be tricky. But if you start preparing in advance, follow a step-by-step approach, and get used to talking through your answer, you stand a much better chance of getting hired at companies like Amazon, Facebook, or Google.
As we mentioned before, doing mock interviews is a hugely beneficial way of preparing for your interviews. That’s why we created our 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.