It’s been noted before by many people that programming should be thought of as craftwork, not manufacturing. The economics of programming is such that the cost for each incremental unit is 0, so it makes sense to view development as a source of revenue generation and not a cost to be contained.
The most visible manifestation of that seems to be the Google style perks that seem to be de rigeur now among web 2.0 companies. Basically, the equation boils down to more perks means happier programmers and happier programmers mean the most number of feature points per hour.
But if programming is artisanship, then I think creature comforts are merely the most rudimentary of what we could be doing and it’s instructive to look at true artisanship in other field. In particular, when we look at examples of the truly haute in couture or cuisine, one of the things which is most striking is that they revel in their stunning inefficiency and that this is what makes them special. There is no attempt to streamline or rationalize or redesign for efficiency purposes. If a suit jacket can be made even incrementally better by individually hand stitching each seam so that the stripes are aligned, then this will be done as a matter of course. Sure, you could get a suit for half the price with a barely indistinguishable drop in quality but this doesn’t matter because what artisans are striving for is not efficiency but quality.
So what does this mean for programmers and programming shops? What would happen if we abandoned efficiency as the primary goal of the organisation? What stunningly inefficient paradigms could we embrace?
The first that comes to mind is pair programming. Maybe pair programming works, maybe it doesn’t, I don’t know. I’ve not seen that many people talk about it outside of the hardcore evangelical XP community and it’s easy to see why. No matter how you manage to slice and dice it, two developers working on a single machine are just not going to be able to produce as much code as both of them working independantly and XPers trying to sell you that it does start stretching for increasingly absurd arguments. To any organisation, the idea of pair programming sounds like an extraordinary extravagance which would be impossible to justify under any budget.
Another thing which seems curiously missing is the concept of a “stage” or sabbatical or any other form of dedicated educational experience. In haute cuisine, chefs will stage at each other’s restaurants all the time to pick up new skills or gain different perspectives on food. Why is it that no company offers a 6 month, paid time off so that their employee can go work at Google or Facebook or any other place doing interesting things? What would happen if people were regularly allowed to drop out for a few months at a time to do pure research?
Even in the most enlightened companies right now, programming is still viewed as a fundamentally productive activity (in the sense that the goal of it is to produce things). It’s a very tough sell to propose anything which doesn’t demonstrate an increase in function points/hour/dollar. But if we truly believe programming to be an artisanship activity, then we should consider optimising for something else, optimising for quality so that even the most extravagently inefficient touches are celebrated because they make the product better. Could this work economically as a model for commercial programming? I honestly don’t know yet…