Note: This document is work-in-progress. Please don’t publish it on news sites, or otherwise link to it in public without the author’s permission. Private linking is acceptable.
One of the most important trends in the software world recently was towards “openness”: open-source, open-content, open-specifications, etc. Most good programmers you can find will find the open source (also known as “Free Software”) movement very appealing, and share some of its ideals. I don’t propose you should make your software open-source, although, of course, this is often a good business model. However, there are other aspects of openness that you should follow if you want to attract and keep good programmers.
First of all, don’t over protect your code. Make it open-source if possible, give your contractors and consultants (including outsource ones) access to it, and allow your programmers to show parts of it to their online friends to get some advice. You should make as much of it as possible public, under open source licences to allow it to be used more often, increase its quality, and grow a culture around it. From my experience, working on “shrinkwrap” software that is used by end-users in the wild, and open-source software in particular, is the best way to increase the quality of the software as it requires the most discipline to work on and support.
Openness does not end at that. Another important aspect is to allow your programmers to tell their friends and family about what they do. Some defence-related companies seem to think keeping everything confidential is a good idea, but that will cause your employees to feel unnecessarily trapped and unable to get help. So if you want to attract the best programmers, make sure they can tell other people of what they do, and what problems they are facing. (I’m not advocating complete transparency, if it’s not appropriate, but rather not being overly secretive. )
Finally, you should avoid vendor lock-in: use standard or documented protocols and specifications, take Joel Spolsky’s advice of letting your users go back, and make sure your users have control of their data and can access it, back it up and convert it to different format.
A good example for this is the photo-sharing site Flickr, which has published full APIs for its service, and even allowed these APIs to be used by competing site.