System design interviews can be tricky because the discussions are always open-ended. Instead of getting overwhelmed, here is a structured approach that you can use to put your best foot forward and crack it with ease.
- understand the problem statement: 3 to 4 minutes
Instead of jumping into designing the system from the word go, spend the first few minutes understanding the problem statement, and asking clarifying questions to understand the context, constraints, and expectations.
- design a day-0 solution: 5 to 7 minutes
Now take 5-7 minutes to design a simple, naive, unoptimized day-0 solution. It is okay if this design is not scalable, available, or fault-tolerant With this the interviewer
- will have a fair bit of idea about your approach,
- can tell you if you are on the right track or not
- or if you should be focussing on a specific component more
- improve your design: 15 minutes
Now for each component in your system, assume it in different scenarios - large number of requests, system crash, network failures, etc. and see how your system behaves. Rearchitect it to handle the failure cases gracefully, and add new components if required.
- ask the interviewer for any follow-up questions: 8 minutes
Allow the interviewer to ask you follow-up questions about your system and you provide him/her with justifications for your design and trade-offs you took. This segment is important because it just turned your interview into a discussion.
- go into finer details: 8 minutes
Depending on the conversation and expectations, touch upon the finer implementation details like handling concurrency, streaming responses, transient failures, etc. This is where you showcase that you know what you are talking about.
This is how I always spend 40-45 minutes during the System Design interviews I appear in. Hope this helps you crack your next one.