I am not sure if anyone is truly happy with the tech interview process, we can probably all agree. I whish I had an ideal solution, but I can share my preferred approach from both an interviewer and candidate perspective.
The covid era forced the concept of remote work to many positions. I am a big fan of the remote model for several reasons. Not only do I believe that long commutes are a waiste of valuable time, operating a car for several hours a day to commute to and from work cannot be good for the environment. This is great because the talent present on a team is based on the inviduals and not restricted by geographic boundaries. A shift towards this model has increased the candidates applying for these types of positions, and AI is making things dramatically worse as the process of applying can be streamlined, and positions are recieving hundreds if not thousands of applications, regardless of qualifications.
The process is bad enough that I have observed AI tools that attempt to coach the candidate during an interview. Not sure what the value is here as the expectation is that you are interviewing the actual candidate, not a bot. This goes for all of these tools that write content for emails of messages for you, it really shifts values away from actual skills.
I never fully understood the focus on deep algorithm based questions. I firmly believe when a candidate with an CS degree applies for a position it is safe to assume that they had a course on data structures. Not sure what the value resides in drilling an individual on a topic that was already covered in a class, and in reality for a lot of positions you probably won't be working with data structures on a daily basis.
Problem solving puzzles are frustrating. There seems to be a lot of emphasis on these types of questions, in fact an entire industry has been built around them. This is another area where an individual can simply practice the questions, and as a result their performance will improve. There are books, lectures, and paid consoltants that can help you improve your performance. In order to succeed at these types of questions, it typically means that you have to learn to identify the type of question, and then the
I do believe there is some value in spending a little time here. I would be looking for a general understanding of this topic, and the ability to identify space vs time complexity.
System design type questions really threw me off the first several times I engaged with them. I found myself designing a commerce solution for Wallmart or architecting a vending machine. The positions never really involved actually designing a vending machine, and I was not applying for a job for an consumer facing website responsible for processing millions of orders ona black Friday.
I did nothing short of bomb my first few system design sessions. I am not knocking them because of my poor performance, however what I find curious is that there are videos (and paid training) online to teach you how to answer these types of questions. So basically if you practice, then you can master this format. So this leads me to believe that if I am using this format, and the candidate performs well according the the criteria, the individual just knows how to play the game.
It is not possible to know every API call for the all of various technologies I work with. I have witness first hand interviewers ask questions for which they would have not know the answer if they had not looked in up themselves.
I once had an interview where I was asked if I knew what ThreadLocal in Java was. This is not something you use on a daily basis. I did know the answer, however when I asked the interviewer to provide a use case for working directly with that API, it became immediately became apparent that the question was the result of a google search, and interviewer as asking questions in areas that they really had no expertise in.
Yes, I prefer take home assignments (I said it). This provides the opportunity to apply real world skills, in a similar manner that you would be performing them in the real world. I struggle with online IDEs, that is not how I develop. Yes, this does require a significant amount of effort on the candidates part, however it provides a real world scenario.
A potential bonus here is that it requires the candidate to actually invest effort, rather than automate the application process with a bot.
Providing an application that has a bug or optimization opportunities is a good excersize in my opinion. This may be performed offline or (even better) interactively. This demonstrates the candidates real world troubleshooting skills, as jumping into code bases and making changes are day to day tasks.
For one particular interview, I was tasked with helping to debug an actual production application interactively with the interviewer. The problem at hand was real, and took around 3 hours to complete. The company did compensate me for my time, and because of the length of the interview we both were able to udnerstand each others working style.
I am especially fond of situation questions. Hard skills are obviously an important element in a tech interview, however learning about the candidates soft skills are important. Can they communicate? Do they ask questions for clarity? How would they handle a given scenario such as clarifying requirements, or communicating status of a task.