Some speaker at ApacheCon thru up a list like this. I wanted to get it into my frameworks category.
A good working environment for a 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 connection
- 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
This appears to be the original source: The floggings will continue until morale improves.
This is a great list as far as it goes.
But, there are some serious things wrong with this list. From the labor point of view it is is far too selfish in nature. From the manager point of view it’s reflects the what I’ve sometimes referred to as the dwarf model of labor management - “Lock them in a room with a pile of straw and wait for the gold to appear.” Organizations are more subtle creatures than that!
I’d certainly add things like effective organization, collaboration, and leadership. The no phone thing seems a bit over the top and probably redundant with the culture of asynchronous communication. Also lacking is anything about assuring the collective work is in fact collective. In fact I suspect that all the failure modes enumerated in Implementation Games could hide out in an organization that managed to do everything the list above.