Time to Rethink the Programmer Hiring Process
If you've ever worked at an organization with a large team of programmers, chances are that you've come across both the passionate and the dispassionate ones.
Programmers are not all created equal. Well, ok, maybe we are created equal -- we are just men and women. But through training and study, some excel while others flounder in mediocrity. And if there's one thing we should have learned from The Mythical Man Month, it's that fewer great programmers are more valuable than more average programmers.
It is my personal opinion that organizations should want to take advantage of that, and hire fewer great programmers. The pie-in-the-sky theory is that the organization ends up paying each individual more -- in recognition of their talent -- but a lower combined total for the fewer great programmers than the combined total of more average programmers, all while accomplishing the same work at a higher quality. Not many organizations realize the amount of Technical Debt that they are taking on by hiring dispassionate programmers. But in order to hire great programmers, you have to be able to tell them apart from the average programmers. With the assumption that everyone wants to hire great programmers, let's take a moment to explore how exactly you can identify them.
I think the mark of a programmer with the potential for greatness is passion. Not accomplishment, or involvement, or even any relative level of knowledge. Accomplishment can be obtained. Involvement can be generated. Knowledge can be learned. But passion comes from within. Either you have discovered it in yourself, or you haven't. The funny thing is that accomplishment, involvement, and knowledge tend to happen naturally and organically when passion is present.
You can lead a horse to water, but you can't make him drink.
There are different reasons that the horse may not drink.
Some horses only drink coffee, or Mountain Dew, or peppermint tea. Your offer of water simply doesn't interest him. Likewise, some programmers are passionate about other things, like Cryptography, Compression, or Compiler algorithms; and your offer of free training in CAD is just not interesting to them. It's not that she doesn't have the passion, her passion is for something else, and there's nothing wrong with that.
Some horses just aren't thirsty. You can stand by the water all day and he will just stand there doing horse stuff. Likewise, some programmers don't have the thirst. The passionate programmer seeks out opportunities to learn or try something new. The dispassionate programmer is happy to rest on her laurels. Why should she learn something new when she's getting "satisfactory" marks on her yearly reviews? Her bills are paid, her children are fed, and she gets to spend her weekends doing that thing she really loves to do.
The thirsty horse will not only drink the water you lead him to; but he will remember the trail, follow it back later by himself, sometimes bring friends, and eventually exhaust the water supply. He'll take it upon himself to find other watering holes. A passionate programmer will pore over presentations, books, blogs, articles, and magazines; apply what she learns and build on it, and in some cases she will even make a hobby out of what started as an occupation. Eventually, she may even turn her passion into an opportunity to teach: presenting, and writing for books, blogs, articles, and magazines.
And she will do all of these things not because they are her job, or because they bring her tremendous amounts of success; but because she enjoys doing them.
How do you find passionate programmers? One way is to look to Open Source software. These are programmers that enjoy what they do so much that after they are done getting paid for it from 9-5, they go home and do more for free. If that isn't passion, I don't know what is.
Need someone to come in and overhaul your intranet? Start looking at the developers of Open Source content management systems. Need a great architect to whip your team into shape? Start looking at framework developers. These people have the skills you're looking for and the passion you need. Who cares if they'll need to learn a new programming language? That's the type of thing they do over the weekend -- for fun -- remember?
However, not all passionate programmers develop open source software. Some people just don't want to put themselves out there in the public eye; but that doesn't mean they aren't hiding in the shadows, sharpening their saws. Open Source contributions are one indicator for passion, but anything she does on her own time that makes her a better programmer (not limited to programming) is also a good indicator. That includes things like reading blogs, trade magazines, and books, and attending conferences or user group meetings. If she has made a hobby out of her job, then it's clear that she's passionate about that job.
Not everyone wants great programmers.
I prefaced all of that by saying that we were assuming that everyone wants great (passionate) programmers. But we know this not to be the truth. Not all organizations believe they can afford great programmers (in which case, see paragraph 3), and still others just don't believe that programmers are close enough to their bottom line to worry about it. And if there are dispassionate programmers, then it stands to reason that there are dispassionate managers, too.
I imagine that dispassionate managers are threatened by passionate people, because passionate people change things. And passionate programmers can be particularly unruly. In these cases, there may just be a culture of dispassion. That's an unfortunate situation to be stuck in if you're passionate, and if I ever find myself stuck there I'll start looking for another job.
But she didn't apply!
What I'm proposing here is flipping the hiring process on its head. When you post a job on your company website or Monster.com, or run an add in the paper, the only people that will see it are those who are in need of work or who are looking for something better. If you're lucky, every now and then coincidence will deliver a rockstar to you via these channels, but more often than not there's a reason that people are out of work or stuck in crappy jobs.
There are a lot of people out there that would be willing to take a great opportunity if it came up and smacked them in the face, but instead your opportunity is sitting on a street corner with a dirty cardboard sign that reads, "Will food for work."
I would encourage you to seek out the rockstar that you want on your team. You never know, she might just say yes, and might even be willing to relocate to come work for you. Telecommuting is also an option, but that's a rant for another day.
I am not a hiring manager.
I realize that one of the biggest problems with this article is that there are very few hiring managers likely to see it; so I'm preaching to the choir in some ways. Short of sending it to your hiring manager, here are some ideas that can at least help you apply the idea of seeking out passionate people in your situation.
My organization is fairly large, and the interview process is quite thorough. With a few exceptions you have to interview with almost everyone you would be working with, and we usually do two rounds of in-person interviews per candidate, after phone-screening, unless it's clear that you aren't what we're looking for. Since that means I get to participate in interviews for potential coworkers and give my input to the hiring manager, I will be using that opportunity to try and find out if the person is passionate, or just doing the bare minimum; in addition to my normal questions about technical ability and personality. If you are passionate and open minded, then you can learn any language and best practices necessary to do the job.
If you're not already involved in interviewing people that you would have to work with every day, ask if you can get involved. Show an interest in selecting the best candidate, and then work hard to find the right one. As I mentioned before, you can find passionate programmers by asking them about their interest (or lack of interest) in user groups, conferences, blogs, magazines, and so on. Even if they don't contribute to open source projects, they could be passionate and flying under the radar. Sometimes you have to prod a little bit to find these things out.
Don't be afraid to say no! Think of hiring someone like buying a house. If you're going to be homeless in a week, then it's more important to get something lined up --any crappy motel room will do-- and then worry about finding the right place when you have time to do your homework. But if you aren't in dire need of someone to fill a chair and do work that is a fifth of the quality of a great programmer, then take your time. If all of the applicants suck, say so. Just be prepared to back up your claims. You wouldn't buy a house in a hurry, go through all of the settlement costs, and then realize that the roof leaks and the basement smells like dead fish... would you?
You probably can't offer anyone a job, but you can find someone that you'd love to work with and convince them to apply. That's about as close as you can get; and something I've done on a few occasions. It doesn't always work out, but I've been happy with the results so far.
Do you have any other ideas for how to affect positive change in the hiring process? I'd love to hear them.
Posted in Meta | 7 Responses
Which is not to say having Passionate Programmers is a bad thing. But how do organizations get things in these cases? Is there not room for both the elite and the workaday in the same organization?
I would add that passion is neccessary but attitude is an important aspect of a candidate that also needs to be determined. A single primadona can negatively impact a well functioning team.
Being open to different ideas is also important. I learned a long time ago that when I disgree with someone it's better to ask them to explain why I might be wrong. I will argue my point while taking every opportunity to try to understand why they think I'm wrong. The end result is that one of us learns something and we build a better working relationship in the process. The downside is in sometimes second guessing yourself and wasting time on tangents. Sometimes the team lead has to make a command decision.
And that's my final thought. People have to be willing to follow the lead even if they disagree. Once your opinion is heard, evaluated and dismissed you have to do your best for the team without holding on to your objections. Sometime you're right and often that will come out. Important time to be humble!! No one like hearing - I told you so!
Actually, I would guess that most developer positions are in this category. Hiring managers look at more than just passion when managing a diverse staff. They have to maintain a set of skills on-board with enough capability to accomplish the assigned work. You don't haul freight in a Ferrari. You don't assign legacy maintenance to a rock star developer.
Passion can also ebb and flow over a career while people are living their lives. The problem I see in industry is a lack of high quality geek managers that understand how to manage the rock stars so that the passion can be guided to useful work as well as manage the average Joes who are good at their work, but don't spend every evening doing open source editing. It is much easier to manage people who plod along doing their job. The tough part is for the manager to motivate those people to have passion about the work.
Terry, I think that a passionate person can find something to be enthused by in any project; as long as they have free reign to Do It The Right Way (TM). Nothing is more mind numbing than piling Technical Debt on top of Technical Debt, knowing that you're doing it, and having no opportunity to do otherwise. It's not the outcome of the project that I'm always passionate about. For me it can equally be about how I made it work (technology) or just using a technique I've never had the opportunity to use before.
Something else I forgot to mention in the original article is the idea that passionate programmers want to work with other passionate programmers. That might be obvious, but it is pretty true; and sometimes just getting the opportunity to work with someone else as enthusiastic as you is enough to get you through a boring project -- at least you know there's someone you can complain to that feels your pain.
Dennis, good points, of course. Getting an explanation for why someone disagrees with you is a great way to diffuse what could potentially be a friction-ripe situation, as long as both parties can remain mostly calm. :)
Roger, you certainly have a point in that dispassionate programmers will always exist. (Unless we hunt them down and exterminate them! Who's with me?!) And if you don't face interesting technology problems, you're probably better suited finding people who are passionate about the process that the software is supporting. At least then they would be invested in the project and more likely to try and do it well.
I can't bring myself to agree that not every project needs to be done well, however. Even legacy maintenance needs to be done correctly; and opportunities for improvement are there waiting to be found. What about process improvements that save companies thousands or millions of dollars per year by making relatively simple changes? If they weren't recognized by someone who was passionate about the technology or the process, then that money would continue to be wasted.
Also, your "Do It The Right Way(TM)" is just silly as there are often hundreds of correct ways to do something and sometimes a good programmer has to do things that another good programmer has decided is "Do It The Right Way(TM)" and by your logic a system could easily end up in a state of constant flux and rewrite.
Passion is good, but apply your reasoning to other fields. Is passion something you want in a doctor or lawyer or do you want excellence in their study? Conflating passion/dispassion with skill and the ability to do an excellent job is a logical flaw you may want to refactor with some smell tests.
I get it, your heart is in the right place, but this article is an over simplification with some interlaced chest thumping and it reeks of a desperate attempt to get a job writing about programming vs get a job actually engineering software and solid systems.
Also, your dismissal of the "Do It The Right Way" bit just shows that you're not thinking through the argument. Just because I phrased it singularly doesn't mean I think there is only 1 way to accomplish something; but as a developer, I'm sure you've seen some code at times that puts a pit in your stomach from thinking about how much work will be required to fix it. So yes, there are many good ways to write software, and as long as you use one of them, you're "Doing It The Right Way." And regarding ending up in a state of constant flux and rewrite, you're correct that it could happen, but a great programmer will recognize that and try to (a) plan ahead as much as is reasonable and possible, and (b) try to live with their decisions, as much as is reasonable and possible.
Technical debt is a very real thing. If you make design choices that have a negative impact, even unintentionally, and you choose to do nothing about them because you don't want to constantly be in a state of flux, then you will be forever paying interest on that debt. Refactoring is making a payment on the principle. Rewrites are paying the loan off, or maybe consolidating at a lower interest rate, if I can stretch the metaphor a little bit. If paying interest on technical debt is your idea of an engaging, challenging, enjoyable job, be my guest; but in that case I wouldn't want to work for you.
Sometimes (but not always), a rewrite is necessary. I can't remember the last time I finished a project and DIDN'T think to myself, "Wow, I learned so much in the process of doing this that I would do it completely differently if I had it to do over again!" Of course, we never do seem to have the time to do it over again, so the idea is that you pay it forward. Learn from your first project and apply those lessons on your next one; and apply lessons learned there on the next, and so on. Heck, another one of the concepts from The Mythical Man Month tells us to "Build one to throw away first." Isn't that telling enough?
Endurance is probably the most important asset of a cross-country runner, but not for a doctor, or lawyer, or programmer. You can't just -- as you suggest -- apply the criteria of one profession to another as a test of whether or not that criteria are a good measure. But that said, let's assume your test were valid. Do I want a doctor who is just collecting a paycheck, or would I prefer the doctor who is so fascinated by her craft that she goes home to pore over medical journals, takes time out of her busy schedule to learn the latest and greatest techniques and attend conferences. Do what you like, but I'll take the passionate person; because in my opinion, passion drives people to excellence. That's why I like a doctor's office with waiting room furniture from this decade, over a doctor with furniture from the 70's. It shows she STILL cares. Passion = potential.
Passion alone is not enough, so you did get that right. I won't hire someone who writes code in a Word document. There is a minimum skill level that goes along with these sorts of things, but as that applies to any skilled-labor job so I guess I let it fly under the radar as far as the article went. But rest assured, I'm not suggesting that you should hire stupid passionate people. However, a genius without passion is not much more useful than an average person without passion.
Think what you like about my motivations, but the fact of the matter is that I have a job (that I love) working with a fair number of both passionate and dispassionate programmers. And while talking to some of the other passionate developers, ideas started to formulate in my mind. All I did was articulate them here. And for the record, I wouldn't mind a little side action getting paid to write ABOUT software, but I have every intention to make my career writing software. You should note that I'm not running a single ad here. Obviously I'm in it for the money!