Skip to content

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:

  1. Understand the problem and establish design scope
  2. Propose high-level design and get buy-in
  3. Design deep dive
  4. 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:

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:

YouTube Channels/Playlists: