Over recent times there’s been a slowly growing number of people interested in software craftsmanship and just recently those people published a manifesto to explain their ideals(http://manifesto.softwarecraftsmanship.org/). The manifesto is based on the agile manifesto (http://agilemanifesto.org/) and simply takes the values of the agile manifesto and adds riders to them.
I’ve been mulling this whole craftsmanship thing over in my head for a little while now to try and figure out why it is that I’m not that keen on it. I know that might surprise some of you, and considering my involvement in both the Sydney and Oz Alt.Net communities, you probably have reason to be surprised. After all,many people would consider that software craftsmanship movement and alt.net are both seeking the same thing; namely an improvement in the level of quality and the way software development is done, because quite frankly, how most development is done these days is laughably poor.
After some thinking, I’ve decided that what bothers me isn’t the manifesto per se, but rather the “craftsmanship” aspect of it. To me, craftsmanship implies an attitude and approach to development that is more about art and polish and finish and ego and even guilds that goes beyond functionality and quality alone. It also creates mental connections for me of higher cost products that take longer to produce and come out in much lower volumes than regularly produced products.
Let me make a potentially bad analogy. Consider furniture. I can go out today and buy a chair from a craftsman that was lovingly made, hand carved, manually upholstered, had the craftsman’s style all over it and so forth and I would have bought a functional chair that looked great, assuming I liked the style of it. However I would also pay a premium for it knowing that there would be few other chairs like it. Alternatively, I could go out buy a chair from IKEA or some other retailer that would also be a functional chair with a great finished quality and a nice look, but it would also be 100 times cheaper than the other chair, and maybe even more comfortable to sit on.
So I ask myself this, does craftsmanship really matter? I think so – but only to a limited number of customers. On the flip side, a desire for quality is common to all customers. No one wants to buy a chair that has uneven legs or makes you wonder if it will fall apart when you sit on it. IKEA sell thousands of chairs each year because they make a quality product very efficiently and can therefore sell it at a competitive price and still make a profit. Craftsmen can only sell limited numbers of chairs each year because all that crafting takes time.
Unfortunately for those who would like to put on the rose coloured glasses, feel warm and fuzzy about their profession and believe that our industry can absorb the cost of developers lovingly polishing their code, the reality is that software is a commodity item. Businesses focus on ROI (Return on Investment) and as such will purchase from the people that can give them the best quality software at the cheapest price and can do so consistently. It’s possible that a few customers may choose the craftsmanship route, they will be few and far between limiting the number of people who can take a crafting approach to code to a few niche players. The rest of us will be out in the cold hard commoditised world wondering why our beautifully crafted code isn’t winning us any business and why those guys over there who write functional and maintainable code, but definitely not the best crafted code ever are raking in the big bucks.