Inspired by this article about the working conditions of an Electronic Arts employee, here is my list of things a company can provide to get more work out of a computer programmer:
- An office with a door
- ...and no phone
- A culture of asynchronous communication
- A fast workstation
- ...and two monitors. You wouldn't believe how much difference a second monitor makes
- ...and their operating system of choice
- Good development tools.
- A fast Internet connection1
- Snacks and drinks they don't need to leave the office for
- A good-natured working environment
- Flexible working hours
- Tasks appropriate to their ability
- ... and if at all possible, that they find interesting
- Investment (emotional or financial) in the end-product
The list could be much longer, but it boils down to:
- Give them the tools to do their job efficiently
- Remove potential interruptions or distractions
- Make sure they're motivated
Mandatory overtime isn't on this list, believe it or not. Not just because it sucks (which it does), but because it's counter-productive.
Programmers who have good working conditions and a personal investment in the end result will often volunteer overtime at crunch periods, or just when they have a particularly thorny problem to overcome and don't want to go home until it's done. Also, there will always be the occasional deadline which leaves everyone putting in a tough couple of weeks to push the project over the line on time.
If, however, you find you're working weekends before every deadline, or in the case of the EA employee, for the lifetime of the project, there's something seriously wrong. The project is being mismanaged, and the programmers are being whipped harder to compensate.
Even too much voluntary overtime should be viewed with caution, because people who work too long get tired. Speaking for myself (although there are various reports suggesting this applies generally), the more overtime I work, the less I find myself able to concentrate or apply myself to the task at hand. I'm fine for short bursts of extra work, but over prolonged periods the extra hours I'm working are overcome by the productivity I lose while I'm working them.
Mandatory overtime is even worse, because it will eat through any developer enthusiasm you may have fostered until you are left with a team of programmers who just want to go home. A programmer who wants to go home will cut corners, ignore bugs, write spaghetti code, find devious ways to pass work on to other members of the team, anything so that they can declare their part of the program finished and go somewhere that isn't the office.
1 Some would put the Internet under the "distractions and interruptions" column. It can be. However in this world of postmodern programming, it's vital that a coder has fast access to Google, online documentation, library downloads and so on.