While talking about system design, and specifically system design interviews in other companies, with a mentee, I started thinking about why these are so awful for everyone.
Most system design interviews focus on the wrong aspects of system design.
I've prepared for these interviews many times, unfortunately mostly in not very confortable instances. I know that hen you are in need for a job, interviews can be an extremely stresful situation—demonstrating what you can or can't do.
I think system design interviews are fundamentally wrong because they take no consideration on evolutionary design.
They are a snapshot of a decision made under pressure, with very little context, and without considering the most important part of design: correcting over time.
This type of interviews should be conducted only by senior/staff engineers who can identify strengths on how the candidate thinks about the problem—taking small, incremental steps towards a solution. Many companies have brown bag questions and design interviews are conducted by unexperienced engineers who are not prepared to collaborate in an incremental design process. If you ever find yourself in a situation like this, don't feel bad about it. The interviewing process you're going through is awful and that company is probably not seeing your potential.
Another common scenario is a take-home test. Either short or long (which is dreadful equally dreadful), it's impossible for a candidate to have a successful 1-man iterative process to get somewhere nearly good. it requires the candidate to be very clear about the incremental process used, and the interviewer to be prepared to evaluate the candidate asynchronously. Evaluators have to read a bunch of commits (hopefully) and make sense of the task breakdown the candidate chose to get to that point. There's no point in considering a solution that aligns with what you expected as good if you don't see the thinking process—like evaluating Calculus with a multiple choice test: it's not evaluatory at all. Follow up conversations try to cover this, but they are time after the decisions are taken, and unless the candidate is extremely organised in some sort of decision log, it's impossible to bring their design experience to life again.
My recommendation is: if you're learning and preparing for design interviews, focus on developing incremental design skills. You aim for the perfect solution—it takes time and iteration even to understand what the perfect means. If you're an evaluator who finds that system design interviews are the filtering step in your interviewing process, it's probably because your process sucks. Take the time to reconsider how you're evaluating candidates and what sort of signals you want to identify. Evaluate humans and their processes, not snapshots.
