Here’s a recent exchange I had in the comments of yet another post about the challenges of hiring software developers on Hacker News:
Matt_Mickiewicz:
...a lot of companies that are selling pants online are searching for PhD-level engineering talent to run their shopping cart.
Me:
I've noticed this, too, and been baffled by it. My working explanation is that people tend to hire clones of themselves. If the people making the hiring decisions in that online pants company have PhDs, they'll believe they need PhDs to work on that shopping cart.
danielweber:
> people tend to hire clones of themselves
Winner winner, chicken dinner.
Ask a company that is hiring "is X important?", where X is one of {open-source coding, algorithm design, Ivy league degree, master's degree, MIT degree, Facebook alum, Google alum, presence in Silicon Valley, under 25 years old, over 25 years old, has a github, has a blog}, and you will get a "yes" for each X that the founder has.
This ended up being my highest rated comment on HN, so I thought it’d be worth expanding on with a blog post.
Hiring Is Hard
Hiring software developers is complicated and damn hard. Just hang around Hacker News, Twitter, or your favorite software blog aggregator and you’ll see people endlessly debating the best way to hire good software developers. It’s clear that as an industry, we’re not even close to reaching a consensus, much less even general best practices that most people agree on.
It’s not surprising then that the software industry generally sucks at making high-quality matches between organizations and potential hires. I won’t pretend that I have answers, but I just want to highlight one aspect of hiring that can be particularly baffling, especially if you’re a young software developer early in your career and trying to figure out where you fit in.
No One Thinks They Suck
In light of the bewildering difficulty of vetting software developers, an interviewer/evaluator often turns to the one exemplar of excellent software development he knows better than any: himself.
People tend to unconsciously assume, “If I hire someone like me, then I know they’ll be good, because I’m good.”
Psychologist Dr. Robert Cialdini explains in his classic book, Influence:
We like people who are similar to us. This fact seems to hold true whether the similarity is in the area of opinions, personality traits, background, or life-style.
Car salesmen, for example, are trained to look for evidence of [backgrounds and interests] while examining the customer's trade-in. If there is camping gear in the trunk, the salesman might mention, later on, how he loves to get away from the city whenever he can; if there are golf balls on the back seat, he might remark that he hopes the rain will hold off until he can play the eighteen holes he has scheduled for later in the day; if he notices that the car was purchased out of state, he might ask where the customer is from and report--with surprise--that he (or his wife) was born there, too.
Now, Cialdini was talking about a car salesman trying to move merchandise. But in a hiring situation, the candidate’s future work is the merchandise. The more that the candidate seems like the interviewer, the more likely the interviewer will want to hire that candidate.
That’s not to say that candidates do or should manufacture their interests and backstories. But if the interviewer puts a lot of effort into blogging, and the candidate has an active blog…or the interviewer has a side project in Haskell, and the candidate mentions that Haskell is their favorite programming language…or they both like to tinker with Linux in their free time…you get the idea.
I am not immune from this bias. I’ve found myself warming up to interviewees when I discovered they used ReSharper (one of my favorite development tools), were interested in the same bleeding-edge JavaScript framework I was, or something as utterly irrelevant as we both loved indie music. None of those things are direct evidence that they would make good software if they were to join my team.
There can also be a bias toward people who took the same path that you did to get where you are. If I earned a Computer Science degree before starting my career, and you didn’t…or software is my first career, and you transitioned to it from a different career…or I’ve worked for tech companies, and you’ve worked in a technical role for non-tech companies…again, you get the idea.
I’m not trying to point fingers here—we all have our biases and blind spots. I just want to make the point that objectively vetting software developers is hard as hell and many interviewers are not very good at teasing out the stuff that matters: will this person deliver high-quality software if they were to join my team? It’s super easy to fall back on: are they like me?
“Cultural Fit”
There’s a general catch-all term for the non-objective criteria by which companies decide go or no-go on candidates: “cultural fit”.
There are explicit laws against rejecting a candidate because they're not the same race as you, or the same sex, or the same religion. But some people will freely reject you for reasons that don’t necessarily seem relevant to the daily work they do, like they have a degree from a name-brand college and you don't, or because they attend hackathons and you don't, or they've memorized the merge sort algorithm and you haven't. People will sometimes jump to conclusions about your ability as a developer based on lifestyle choices you've made, what you do in your free time, or your preference for one programming language over another.
It can be frustrating that some teams get very micro-focused on the smallest aspects of software development, while being far from getting the most basic things right. There are about a million and one ways to effectively deliver software. At the end of the day, does it really matter if one team writes specs and the other writes unit tests? One hand-writes their SQL queries and another uses an ORM? One uses Gulp and another uses Grunt?
It’s Not You, It’s Me
Again, my aim with this post is not to condemn the way that people make hiring decisions, but just to help explain what can be the somewhat baffling way that groups of people choose who will join them.
Just be aware that simply being good at what you'd assume are the objective aspects of your job as a software developer (delivering high-quality software on time) are not always enough to land a job with a specific group of people. Much like dating, you can't take "rejection" personally. Just because you didn't fit one person (or one organization's) image, doesn't mean anything about your general worth. Sometimes it takes just finding a group of people whose preferences align with your own.
When new companies appear on your radar (and you’re open to a career move), you can save a lot of time and shut down unproductive avenues by paying close attention to the “cultural” aspects. If a culture clash is coming, it’s better to find out sooner rather than later, as those opportunities won’t work out in the long term.