Last night I went to a debate on Software Craftsmanship at SPA2010. The general consensus seemed to be that Software Craftsmanship is bad, but software craftsmanship is good. Notice the capital letters.
I want to pick up a point Ade made. He said: “I don’t believe that good software comes from a process or an environment. It comes from the skill of individual developers”. He went on to say that once you accept this, the question of how to grow your skills is impossible to ignore. This is the core of craftsmanship to him.
Personally I would rephrase his statement: “Good software comes when individuals working on it take responsibility for doing a good job. They take responsibility for quality, and for growing their skills”. In my mind software craftsmanship is about individual developers taking responsibility. I don’t think this applies just to code quality – but to all aspects of “delivering great software”
The word responsibility is used a lot. Let me define it. It means recognising “This particular problem is only going to be fixed if I personally make it happen”. It does not mean a manager saying “you are now responsible for this area”. You, as an individual, have to take responsibility, it doesn’t count if it is assigned to you.
Now we can come back to Ade’s point about whether or not this comes from a process or environment. I suspect he is talking about Agile (with or without a capital letter) which is often held up as a solution to all development problems
The Agile approach can best be summed up by a quote by David Heinemeier Hansson. “Most average people will be awesome if you create an awesome environment”. He isn’t specially describing Agile, but his comment resonates with the Agile ideas. However his idea is hard to turn into specific action. I’m not surprised that Ade doesn’t want to trust the growth of his personal skills to such a vague environment or process.
However I do not think they are that different.
In my mind, individual responsibility is one of the two cores of Agile (the other being iteration). Just look at a successful daily stand up. Every team member steps up and takes responsibility for a story or an action. “I am going to complete this story. I may not know what is required for this, but I will learn it and do it”. Contrast to the alternative approach of a manager telling the team “David will do this story. Tim you work on that”. The former is an example of craftsmen taking responsibility. The latter is an example of mortgage driven developers coming to work, and “getting through the day”.
It’s impossible to force anyone to start taking responsibility, and encouraging them to do so is hard. Most agile conferences talk about it in one form or another, often with little or no success. If software craftsmanship (with or without capital letters) results in more developers accepting responsibility for the quality of the work they do, then it can only be a good thing.