Software Craftsmanship

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.

By |May 19th, 2010|Technical|6 Comments

Why is it so hard to learn?

This is about learning, and learning is hard. Doesn’t matter if its learning  skill, a theory, or anything else what we can bundle into the category of learning

I am learning to be  a latin dancer. I would love to get to the point where I am as good as these guys.

Take posture for example. One of my early teachers taught me about posture, how to keep the shoulders back, which muscles in the back to use for this. This technical way of looking at things works well for me. After I received this information I was able to stand much straighter, for about a week, then it vanished. I was able to use the information, but not make the change permanent.

Sometime later, when doing an intro session as a new gym, the instructor told me to think of opening out my shoulders, so that when my hands were by my side the faced forward. Doing this caused the same muscles in the back to work. I was inspired, realised it was a different way of thinking of the same information, was once again able to hold my shoulders as I wanted. Again just for about a week.

Next my partner tried drawing me a diagram, of how my back looked in comparison to how other guys backs’ looked. This motivated me once again on the final solution. This brought back both previous pieces of information, and again worked – just for a while.

Last week I once again had a lesson with the same teacher from the first paragraph. She explained the same information as before. Along with some other information, which she also gave me in the first time, but that didn’t make sense at the time. However, now it did make sense. Once again I feel I can make progress with holding my posture as I want it.

History says that I won’t manage to hold the improvement this time. But I think otherwise. There is something different. The “other information that didn’t make sense first time round” – and now does. In all the time that had passed I was learning lots of other things. Sometimes consciously, sometimes unconsciously. These built a conceptual framework allowing me to put using back muscles into context (which in this case means generating smoother stepping action and a few other things).

This is why learning is hard. Because the benefits of individual steps are not always clear. All the improvement does it make you ready to accept the next piece of learning, the one that has visible results. When you are making improvements you don’t know, its hard to maintain motivation of self discipline.

By |May 2nd, 2010|Personal|0 Comments