fusiongrokker

Entries Tagged as Meta

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.

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 July 16 2010

New theme

I was getting really, really tired of all of the problems with my last theme (tiny comment box, really didn't like the font, or the colors, or… well… anything, any more!); so over the last few weeks I've been working with Mark Aplet on this new theme. It's finally done enough to publish, so I've decided to go ahead and put it up so that I can see all of the kinks live, which will help me work them out. So if you see anything awry, it will probably get fixed soon. Thanks for your patience!

In the meantime, what do you think of the new design?

Posted in Meta | 5 Responses May 05 2010

Check-in for 2009 and Goals for 2010

In January of 2009 I wrote down some goals for the year, so I figure it's appropriate to look back and see what I accomplished from that list and where I fell short; and then set some new goals for this year.

  1. Learn Transfer and CF9 Hibernate
    Status? Fail!
    Admittedly, this was a pretty ambitious goal. And while I didn't manage to learn both, I have learned the basics of CF9's new baked-in Hibernate functionality. That's a start. I won't say the lesson here is to be less ambitious, but perhaps a little more realistic?
  2. Finish Grub 1.0
    Status? Fail miserably!
    Alas, time got the best of me. While I haven't finished it, I am still working on it. I've renewed my interest by switching to using Git for version control for the project, which makes working on the train much easier. Now if only I could make all of those books, movies, and TV shows that consume my time on the train less interesting…
  3. Start Refactoring Grub
    Status? Success!
    Indeed, I have started refactoring. In addition to moving over to Git for version control, I've been rewriting the model behind Grub to use CF9's Hibernate ORM. Luckily, continued work on this goal will go hand in hand with continued work on Goal #1 above.
  4. Get started with Flex
    Status? Great Success!
    As a matter of fact, as of last week, a Flex application that I wrote from the ground up is running in production. I have another on the back burner while finishing up the first project, and it seems like I'm really getting the hang of Flex. I look forward to more projects that utilize it.

So yes, I failed. In some cases, spectacularly! Luckily, it's our failures that we learn the most from, not our successes. I can only hope to continue failing so spectacularly, because when I take stock of the last year I feel as though I've learned an incredible amount.

Goals for 2010:

  1. Get more better at ORM
    Having a basic understanding shows me the power behind this beast. Now it's time to turn it up to 11 and see how I can increase my productivity.
  2. Ship Grub
    Whatever the version number, the version control system, or the architecture of the model… just make it work, get it online, and make it public. Don't stress over the design so much, you can fix that in the next iteration. SHIP IT! SHIP SHIP SHIP SHIP!
  3. Continue to grow Philly CFUG back to a large regular attendance
    I don't have any grandiose plans for how to accomplish this, I'm just going to try hard to plan compelling content, communicate well, and hope that if I build it, they will come.
  4. Get very comfortable with Git
    The more I work with and learn about Git, the more I like it over Subversion. I don't want to say that it's a hammer capable of driving screws, but at this point I don't see a compelling reason to continue to use SVN, except when you are sharing a repository with other developers who don't know (or want to learn) Git. If nothing else, the GUI's and tools available for SVN are far more mature and compelling than those available for Git, but that will change over time.

Posted in Meta | 1 Response February 01 2010

Happy Birthday FusionGrokker.com!

I officially moved my blog to this domain today in 2008. Prior to its life on this domain, I was writing this blog as a sub-folder on the domain I use for my family blog, since April of 2007.

So happy 1st birthday, FusionGrokker.com! It's been a fun year. Here's to another.

Posted in Meta | 1 Response July 23 2009