Wednesday, 12 January 2011

Software developer - craftsman or tradesman?

In response to Dan North's recent blog post ....

As someone who has just had some construction work done on his house I can provide many examples of how the principles that 'craftsmen' apply are similar to those we *should* be applying as software 'craftsmen'. For starters, I think the term 'craftsman' is a bit ambiguous here, I had some mighty fine builders working for me who were highly skilled at carpentry, plumbing, electrical work and all other aspects of building ... would I call them or would they call themselves craftsmen? .. "Naw, I'm a builder mate, innit!"

What I valued most about their approach was that they seemed to apply the same values I apply to enterprise software. If we go beyond the immediate use & functionality of the products we build, I am massively concerned about the ongoing maintenance costs.

I dont want a plumber who will provide me with an aesthetically pleasing pipe arrangement for my boiler, but I do want an expert plumber who knows where the pipes should go to reduce the future maintenance cost for me if something goes wrong. I dont want to rip up my expensive flooring and get it re-layed in 5 years time if one of those pipes springs a leak! I also dont want the pipes exposed in a position where they could be damaged easily or are an eysore. I rely on my expert plumber to advise me what is the best(and most cost effective) solution based on his experience.

Expert software developers and expert tradesmen alike exhibit this awareness of the cost of maintenance. There's a term for those who don't ... cowboys!! These are the ones who build it and run. It might work now, but when something goes wrong further down the line, is it going to cost a lot of time and money to fix. Too often I see software devs acting like cowboys, usually they are not around when things go wrong to eat their own dogs dinner!

I think the term 'craftsman' is always going to cause debate here, is a craftsman somehow better? is there no such thing as a bad craftsman? No sane software developer should aspire to writing beautiful, ornate, uber-elegant code (what a waste!), we should however aspire to be experts in our field and for that I think we would be much better advised to look for similarities in the work of an expert tradesman than in the work of a 'craftsman'