System Design
Intro
System Design interview questions are quite challenging.
They are open ended questions with the objective to design an architecture for a software system.
The questions are usually very big scoped and vague and there is no certain pattern to follow.
The meaning of this kind of interviews is to evaluate the interviewee on how he/she analyzes a vague problem and how solves the problem step by step
Advices
Don't rush and try to be organized and structured.
Explore the problem and ask questions to clarify the use cases.
Do some quick analysis and if needed try to do some estimation
If you are particularly strong in one area, try to direct the conversation towards that! (e.g.: DB choice)
Try to divide the process into 4 steps:
- Understand the problem and establish design scope
- Propose high-level design and get buy-in
- Design deep dive
- Wrap up
Example Questions
To better understand the problem and gather requirements, we should ask some questions related to the problem we are facing.
Examples
- Which functionality are we designing?
-
Is it an MVP?
-
Who will use the system?
- How will the system be used?
- How many users do we expect to use the system?
-
Where are they located? Globally? Nationally?
-
Do we know how many reads per second?
- How much data is queried per second?
-
How many {data/image/video/resource} are processed per second?
-
Should the design minimize the cost of Development?
- Should the design minimize the cost of Maintenance?
Back of the envelope estimation
Follow up Questions
Once you finished your design, the interviewer could ask some followup questions like:
- what if we want to add
functionality? - What will you improve?
Usually this doesn't mean that we should redesign our application but it's just a way to have more discussions about it, understand how you solve those challenges and your knowledge.
Tip
Generally speaking, you could improve an application by adding things like:
- multi Availability Zones (to improve availability and redundacy)
- monitoring/observability
- CDNs
Topics
Be prepared to talk about things like DB choice, cache, async vs sync processing, REST, Load Balancers, etc Some of the most commong topics are pointed out in the Glossary
Some Common Problems
- Design a URL Shortening service
- Designe Instagram
- Design Twitter
- Design Youtube/Netflix
- Design an API Rate Limiter
- Design a messaging app
Questions
At the end of the interview, you should have time to ask some question on topics you are interested in.
Here's some examples of questions you could ask after a System Design interview:
- It’s the infra/software self-hosted or do you use some cloud provider, or both?
- Do you have “on call”? How does it work?
- How do you handle the sw fragmentation
- Do you need to align with other squads? If yes, how do you do that?
Resources
Reads:
- ByteByteGo Blog
- System Design Interview - An Insider's Guide
- System Design Interview – An Insider's Guide: Volume 2
- Cloudflare Learning Center
- System Design Primer
- Interviewing.io - A Senior Engineer's Guide to the System Design Interview
YouTube Channels/Playlists: