Why Code Challenges are Bad Practice for Hiring Senior Developers
Like many kids growing up in Canada I went through the Royal Conservatory of Music (Grade 10 piano, if you're curious).
The Royal Conservatory is a physical place in Toronto where you can study music or perform. However, it is also a standardized curriculum and certified teachers available coast to coast in virtually any large centre or small town. They hold regular examinations across the country where you can go and be graded in order to advance to the next level in your musical education.
Technical Exercises are a Learning Tool #
Each examination has a technical component and a performance component. Let's talk about the technical portion. For your grade, you need to show mastery of certain exercises with your instrument. On the piano this was scales, formulas, arpeggios, etc … I can't remember all of them. And as you progress the exercises become more complex and you are expected to learn them in more keys until at the highest exam you can be asked to play any exercise in any key.
After 14 years of serious piano lessons and RC examinations I could play any technical exercise in any key. However, more than 14 years after my last RC examination I can't even remember what the technical exercises names are. Can I still learn a piece of music and play it at a performance level? Absolutely!
Technical Exercises are not a Professional Practice Tool #
I'm willing to bet that out of all the kids that went through the program and then became professional musicians very few can still do all those technical exercises if you pulled one out of a hat and expected them to do it perfectly. Sure I draw on parts of them in each piece of music I learn but it is only a portion of a single exercise and I refresh my memory as needed.
Fast forward to this week when I was working on a Hackerrank problem for fun. I had to pull out my old text book for data structures and algorithms in order to code up a merge sort from scratch.
I felt inadequate, sent a tweet, and then a light bulb turned on in my head.
![Tweet saying I could write a merge sort out of my head when I was fresh out of university. But not that I have over 10 years experience I need a textbook.Therefore, any company that uses this as a hiring code challenge should expect a junior dev to solve it.](/img/why-code-challenges-are-bad-practice-for-hiring-senior-developers/MergeSort_Tweet-1-1024x827.png)
It's just like all those hours I spent practicing technical exercises for my Royal Conservatory examinations. Sure they're important at the time. We all studied these algorithms in undergraduate computer science classes. But as you gain a lot of professional experience you learn how and when to apply them then you refresh your memory as needed. I knew exactly what merge sort was for and I knew exactly where to find the reference algorithm. I just didn't have the details in my head at that moment.
Some will argue that any senior professional developer should be able to code up a merge sort out of their head at any time. It is so foundational. I don't believe that. Does it make you a better professional musician if you can play all scales perfectly at any time? Absolutely not! In fact I'd argue that you're wasting precious practice time. And I don't hold it against any developer who does a quick refresh when it comes time to apply a particular algorithm to a software development problem.
Technical Exercises Should Not be used Exclusively for Hiring Decisions #
How silly would it be if you asked a professional musician with a history of outstanding performances to sit down at an audition and play a scale? It's insulting. Then dismiss them before they even perform because they didn't do the scale perfectly.
The thought makes me sick to my stomach. But in 2019 it happens every day to senior developers applying for jobs.
Companies are using 3rd party code challenges as a filter to reduce the number of applicants. Many quality senior devs are screened out because they don't regularly practice that type of problem solving. Then the companies that are hiring senior devs complain that they can't find any "good" ones.
To be clear I'm not talking about working through a problem together with an applicant. Especially not talking about any discussion when all the people are in the same room. I'm referring to the situation when developer submits application to company. Company HR sends them a link to timed hackerrank problem on a 3rd party website. Developer does problem session and the result is sent back to Company HR. Then Company HR makes a go or no go decision based on 3rd party code challenge result. Basing hiring criteria on this result is a poor practice in my opinion.
How to Evaluate Technical Ability of a Senior Developer #
From my experience the best way to get a feel for where another developer is at is through pair programming. Spend 1-2 hours together screensharing. Work in your environment with your tools on your project. Then switch and work in their environment on their tools with something they're building. You'll soon have a gauge where they're at by the questions they're asking.