One of the greatest sins in the entire software industry has got to be the way developers are hired. It is irredeemably broken and needs to be torn down and completely rebuilt.
I’ve been a software developer now for around 15 years. In that time, I’ve been a day-to-day developer, run my own successful software business, was co-founder at a VC funded startup, and I’ve had to hire and manage developers. This experience has given me the perspective to see hiring from all angles: from the perspective of being a developer myself trying to get a job, to being on the other end of the table, trying to decipher what makes a great hire, living with ‘bad hires’, asking where do ‘impactful’ developers come from, etc. To distil what is ultimately a multitude of failures in the way developer hiring is conducted is a tough order – but there is one aspect that I want to zoom in on and talk about, and it’s a big one.
When an executive is hired, the hiring process naturally evaluates the person from a multitude of angles. How friendly is this person? How well do they communicate? How well do they justify their ideas? What do they think about the industry? What do they think about this business domain? How do they handle pressure? The list goes on. A human being ultimately makes a subjective assessment on all these qualities.
By contrast, when a developer is hired, it is incredible the extent to which the process will ignore the human being and focus exclusively on algorithmic/technical aspects. It’s a disguised IQ test, and it’s not even a good one. And in the process, we throw away almost the entire history of that person and assess them on-the-spot, in this weird artificial dance that barely correlates with actual on the job performance and success. Has this person built and shipped multiple products on their own? Who cares! Does this person have incredible grit and perseverance? Who cares! Does this person communicate and write well? Who cares! How friendly and amicable is this person? Who cares! All that matters apparently is this one-shot, winner takes all, high-stakes game of trivia and bullshit we call technical interviewing.
The hiring process for developers today will even throw away past technical work and contributions and pretend they don’t exist. Take Max Howell, the creator of Homebrew: “Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.” . Do you think well known painters with a portfolio of amazing art get turned down from commissions because they can’t name the town where Leonardo da Vinci was born, and other random trivia?
This is insane. It’s utterly broken.
I think the software industry, and getting hired as a developer in particular, is incredibly unique in this regard. Almost no other “white collar” profession I’m aware of will so completely and thoroughly ignore your actual proven ability, historical accomplishments, and holistic qualities, as part of the hiring process. So why do we tolerate and even participate in this farce as developers?
What’s even more absurd about this is that in my experience, an enormous chunk of value a developer can bring to the table resides outside of the technical domain.
Some of the worst developers I’ve ever hired have been technically excellent.
One of the most common ways I see technically excellent developers fail is they’re so obsessed with writing code they fail to understand they’re building things nobody cares about or will use. In that context a less technically proficient developer but someone more thoughtful about end-users and their needs suddenly becomes a 10x (or 1000x) developer – because they spent 5hrs to talk to end-users, while the technically excellent but socially clueless developer will spend months ploughing away at a feature nobody gives a shit about.
How do you know if someone has that “muscle” for understanding users? For one, they probably developed it by building and shipping products themselves and had customers! And they’re socially comfortable and communicate well, and you’d notice that if you bothered to acknowledge they maintain a blog and read it, and factor that in as part of the hiring process. In other words, they have the qualities that apparently, the entire software industry doesn’t seem to give a shit about when it comes to hiring.
Another common pattern I’ve observed is technically excellent developers that are poorly aligned with the goals of the business. They will actively pursue technically fun things to the detriment of the company. And as a business, how dare you complain about it? You wanted to hire someone who is “passionate” about .Net? You got it! And that passion extends right beyond whatever the heck is best for the company – because, god damn, .Net Core looks excellent, and I’m passionate about .Net so let’s do that upgrade to .Net Core even though we don’t have product-market fit and most of our customers are churning after 3 months.
Your company is who you hire
What I’ve noticed is that, completely unsurprisingly, the hiring practices of a company typically become codified within the company and its products themselves. A company is nothing more than the people who inhabit it and the choices they make. So if you only hire cram-style/algorithmic people, is it surprising when you continue to turn out products without taste? Is it any wonder for example that Google continually fails to build and execute cohesive products? Does a product like adanov dating come from people who deeply understand customers and know how to build products for them, or does it come from an engineering division that felt like it needed to write code (at all costs)?
Developer hiring is broken
We need to throw away this idea that you can get the measure of a person just by subjecting them to a faux-IQ test. We need to fully internalize that being a great software developer is holistic and draws on abilities ranging from, yes, technical skill, but also empathy, experience, taste, grit, perseverance, and independence. Being a great software developer is multi-disciplinary and we need to actively and vigorously reject the notion that just being good at “cutting code” and inverting a binary tree is the end of the story and is therefore the only axis on which to assess people who work in teams and build products for other human beings.
We owe it to each other to do better. Much, much better.