1) How to Attract Great Programmers
This is actually getting pretty tough. The outsourcing trend of the late 90's and early 00's caused a major drop in enrollment in College Computer Science programs in the US. Unfortunately the technology industry did not stop growing, and the reality that innovation, quality and productivity are easier to achieve with onshore resources started to become manifest. So there are now too few Great Programmers here in the US, and there is an immense geographic disparity, with the majority of them being located on the West and East Coasts. That being said how can you attract Great Programmers.
Recognize the following realities:
- Great Programmers want to work on great ideas.
- Great Programmers want to work with new technologies.
- Great Programmers want to work for great people.
- Great Programmers want to work with Great Programmers.
- Great Programmers want to work in an awesome environment.
- Great Programmers want to feel immensely valued.
- Great Programmers want to learn.
Seriously folks if your work environment is from a Dilbert cartoon don't expect to hire Great Programmers, or at least don't show them around your offices until they have been hired. By the way throwing a few comfy sofa style chairs in a meeting room or two does not override the mind numbing effects of cubicle hell. Given that programmers spend 90% of their day at their desk, and are not coding if that's not where they are, make their workspace a productive and conducive one. If your idea of new technology is to embrace the web and move away from Desktop apps forget it. If your soda machine isn't free and stocked with Red Bull you don't deserve to hire the best. Can your CTO read code and talk architecture? If not then he's not an attractive coach and mentor to the very best your trying to attract. Bill Gates could more than hold his own right up until the day he left Microsoft, and if you have ever been to a Programming conference you have to realize people like Bill Gates, Scott Guthrie and Joel Spolsky are the equivalent of Rock Stars to programmers.
2) Equip them with whatever they want
Bean counters go crazy over this assertion. Let's take for example the idea that most programmers want at the very least 2 monitors. Bean counter (sorry non-programmer) mentality goes something like this. "Programmers type all day, so their work must be just like writing a document in Microsoft Word. I can do that effectively with one monitor, so why can't they. Hmmm, they must want the other Monitor for Facebook, or Twitter, or Farmville, or MLB TV." Wrong, I won't go into all the technical details of why this is wrong, other than to say if a programmer wants six 24" LCD's buy them. In fact give them a Hardware (and Software) budget and let them buy whatever they want. I even heard that Hubspot gives new hires a BestBuy gift card and sends them out to get whatever they want. It will reap rewards you can't even begin to imagine, one day one of your programmers will just walk in with an iPad version of your app, ready to go. Oh and if you want to play bean counter assume an extra monitor costing $300 yields a mere 1% extra productivity and calculate the ROI, but let me assure the productivity gain is much more than 1%.
3) Eliminate Distractions
Programming is hard (no really, it is). It requires extended periods of concentration. It takes time to get into the intense state of concentration required, but mere seconds to be disturbed from it. But most offices I see are ripe for continual disruption. There is a reason the Agile/SCRUM meeting should be held at the start of the day, so the rest of the day is meeting free. Now there is a big debate here about private offices vs. Team Den's. The legendary Joel Spolsky of Fogcreek makes a big deal of how all their Programmers have private offices (see picture), whereas many proponents of Agile will state that the "Team" should co-habit an office which is isolated from distraction. What I will say is that Dilbert style cubicles on an expansive open floor office are completely and utterly wrong.