Here are some quick tips that have served me well in past system design interviews.
The interview would start with an open ended question – by the end of the interview, you should have covered:
- The exact feature-set at least for the minimum viable product/feature.
- The API design – what are the required APIs if any and their specifics (inputs, outputs etc)
- The high level design of the app to cover the agreed upon feature set.
- UI Architectural choice – what works best for this particular problem? MVC, MVVM or something else?
- Low level design or a walkthrough of the most critical user flow of the app – this should include how the data flows through the app from the network to persistence (if the app persists data locally) to the UI.
- Details on how would you build the UI – so that it is performant and easy to maintain/modify.
- Details on how you would unit/scenario test the app (so that you can catch regressions before they ship into production) and specifics on what the oncall team should track to support the product.
- Pointers on what could be improved/changed in the design when the scale/team size increases.
Chances are you might not cover all of it, but I think 1 to 5 are non-negotiable if you are applying for senior/staff roles.
Some general tips:
- Be decisive. This means -> make architectural choices/design decisions for the product being designed – do not rely on the interviewer to make those decision.
- Call out assumptions. As you define the system, call out any assumptions that you have in your mind. Do not assume the interviewer understands your reasoning.
- Be upfront about the reasoning behind your choices. As you make decisions (tip #1), explain why you made that choice and what other options were considered. Don’t wait for the interviewer to ask ‘why you chose this path instead of that’?
- Lead the interview. Act like the senior engineer you are interviewing for:
- List out all the topics you want to cover right at the beginning.
- Time yourself and pace the interview so that all topics are covered
- Be flexible with your approach – be aware of the direction the interviewer is nudging you in. The interviewer may be throwing a hint when they feel you are going down the wrong path or if the design has a specific issue that you have’t caught yet. Remember it isn’t purely technical interview – the interviewer is also trying to figure out if they would want to work with you in the future – everyone loves to work with a team player.
In a future post, I will go through a concrete example – a real question – to explain these guidelines in a bit more detail.