Dear HR,
Your software development interviews are broken.
I have been on both sides of the table 100s of times and anecdotally I never saw any correlation between a good interview performance with the job performance. The data structure and algorithm problems asked in the interviews have nothing to do with the actual skills needed for the job.
A typical job interview format
It consists of a puzzle-like problem which can be solved by applying a known algorithm. In my own interviews, I have been asked problems that needed complex graph traversals, an AVL tree implementation, and so on. I was expected to write a working code within 40 mins on a whiteboard in a high-pressure interview environment. In my whole career spanning over 10 years, I am yet to see a problem where I had to implement these algorithms from scratch. And even if I do get an opportunity to implement them in future, I will refer to resources and spend a lot of time studying it before writing a single line of code.
More than selection, interviews are designed for exclusion
These interviews pose a hard barrier for people who haven't spent days honing data structure skills. For a recent CS graduate, these problems are similar to a typical assignment so may be asking them is justified. But for a senior engineer, an interview preparation means redoing the college data structure and algorithm syllabus. It is a waste of time for the engineers as well as the company because they could have rather utilized the time in learning the technologies prominently used by the company.
We developers have been saying this for a long time
This problem has been discussed by fellow developers in the industry extensively. A well known open source contributer Sahat shared his experience here. The author of "Homebrew" aptly remarked the problem in his tweet
If such interviews are rejecting people like Max Howell, who has a reputation for building highly valuable software products, then I guess it is an unfortunate loss to the industry as a whole.
May be, you already know that its not being done right
I have a feeling that you already know that the current interview process is not correct. And to be fair, you haven't been incentivized enough to fix this hard problem. The current interview process solves a lot of your hiring problems for the company - can maintain a standard pool of interview questions, make hire/no-hire decision within 45 mins, interview process can be scaled as the company grows et al.
But trust me, we can fix this.. together
I understand we can't fix the system overnight but we can definitely start moving in the right direction. After all, you do not want to miss out on next future star developer to work for your company and the candidate also doesn't want to miss a chance to make an impact while working with you.
Here are few of my recommendations which will make this process a bit fair and improve a candidate's interview experience with your company:
1. Use real problems
Use the problems which are closer to what a software engineer would do in day to day job. Instead of asking to construct binary search tree from a post order traversal, problem can be more realistic. For example, ask them to implement a minute feature within an existing code base. In former scenario, you judge the candidate's fluency in tree data structure where as in the latter, you will be able to get a glimpse of candidate's way of working in real time. Like,
- How do they clarify the requirements for a problem?
- How do they name their variables?
- Do they put any comments in the code?
- Does they write unit tests?
- Do they refactor code properly?
- Do they take feedback while working along with others?
2. Let us chose the interview format
Some people are not comfortable with the whiteboard interviews and some of them ace whiteboard interviews. Let us pick the environment where we can focus on what matters and deliver the best.
3. Provide a detailed communication about interview process beforehand
We hate walking into the dark guessing what the interview might be like. Please convey in advance what are we can expect during the interview process.
4. Ask interviewers to work with us in solving the problem
In real life, teams solve problems, not individuals. Ask interviewers to treat us like a team member and work along with us in solving the problem. Let it be a two way communication where interviewers will get to know how well we can work in a team environment. This also provides a glimpse to the candidate about the company culture.
And lastly, this is not your criticism. You and I are in this together and it our responsibility to fix the problem of our industry. Hope this article nudges you in the right direction and someday we can zero-in on the perfect solution to this problem.
Thanks, A Software Engineer
Update: You can listen my podcast where I discuss this issue at length and provide a perspective solution too:
Avneesh Sharma has been coding from the age of 12. He has worked with many startups and big companies in the past. Currently he is working as Software Development Engineer at Amazon. Views are personal and not related to the current and previous organizations. Get in touch with him on twitter.