Algorithms & Data Structures are usually a pain for candidates, but so can System Design be.
Let me give you 7 steps that will help you to improve your experience in system design interviews.
🧵👇
Ask questions, and a lot of them!
Try to find out what exactly the interviewer expects from you.
Try to narrow it down as far as possible to the exact scope of the problem.
Even if the question is to (re)design an existing system, ask!
Define all APIs that the system to design will need.
Explain what each API is for as detailed as possible, so the interviewer can jump in and tell you if you got a requirement wrong.
If you got something wrong, no problem, adjust accordingly.
Give estimates to the scale of the system and communicate them clearly.
Once again, if you got a requirement wrong, the interviewer can tell you, and you can adjust.
If not, the interviewer can better understand your design decisions.
Define the data model of the system, and define data flows.
Ask how detailed this step should be, and if your interviewer requires it at all.
If it's required, also explain and maybe visualize how data flows between the components of the system.
Most systems have only a few very important components, that are the core of the system.
Try to identify them and draw boxes for the five most important ones, and visualize their interactions.
Explicitly ask if you should focus on specific components for this step.
If not, choose the three most important ones and visualize/explain how they should work and what they should do in detail.
A good interviewer will guide you.
Every system and every design has its limits.
If there are bottlenecks in your system (and there will always be), state them explicitly.
Give detailed explanations about what affects them, and how you could mitigate them.