I’ve given and taken a few “code challenges” over the years, and I have
found myself growing increasingly resentful towards the practice.
Here’s my thinking:
First: Time Commitment. Ideally the exercise covers a decent surface
area; for instance a full stack role should be tested on backend and
frontend development. A small demo project that has a candidate build
something that tests these core competences could easily take 6 hours.
So just by having this kind of challenge as part of your hiring process,
you are cutting out candidates who do not have this much spare time on
their hands.
Second: Providing useful metrics. I took a programming challenge once
that focused on dates, which has the terrible quality that the more
you know about dates the worse you would do. Should these date
functions support the missing days (which varies by country) when the
world transitioned from the Julian to Gregorian calendar? Should it
account for leap seconds (which even our “perfect” Unix time system
struggles with)? And is this really a core competency that you want
to measure?
Third: Unit testing vs Integration testing. Testing a candidate’s
coding ability doesn’t really measure whether they will be a good
employee, because it puts them in isolation, it doesn’t provide any
measure of how they would behave in a real-world work environment.
So what to do instead? I think that code exercises should be
discussed. I want to hire someone that can problem solve, or someone
that can work well with other people to problem solve. If they are
super bright and knowledgeable I think that will be fairly obvious. And
if they are egomaniacal “My-way-or-you’re-just-wrong” kind of brogrammer
then hopefully that emerges, too.
And since you are spending your own precious time for the interview, you
are at least respecting your candidates' time committment, and you will
be incentivized to minimize the amount of time wasted.
Posted on April 30, 2020