In the third post in my series on software craftsmanship I’m having at look at Bob Martin’s call to arms to software craftsmen to not write crap.
Why is there a software craftsmanship movement? What motivated it? What drives it now? One thing; and one thing only.
We are tired of writing crap.
Fifth Value for the Agile Manifesto
In 2008 "Uncle" Bob Martin proposed a fifth value for the Agile Manifesto, namely "Craftsmanship over Crap" (InfoQ: Craftsmanship – the Fifth Agile Manifesto Value?). He later changed his proposal to "Craftsmanship over Execution". Bob explained this by saying "Most software development teams execute, but they don’t take care. We value execution, but we value craftsmanship more". I like that.
By the way, this is more about changing the emphasis on craftsmanship rather than adding something completely new to the Agile Manifesto. One of the Principles behind the Agile Manifesto already references technical excellence so Bob’s suggestion is really just promoting excellence from a principle to a first class value. The specific principal says:
Continuous attention to technical excellence
and good design enhances agility
But if it isn’t Crap, what is it?
If you find the admonishment to not write crap a little terse, then Bob Martin: Software Craftsmanship – What it’s all about offers further advice:
What we will do from now on:
We will meet our schedules by knowing that the only way to go fast is to go well.
We will delight our customers by writing the best code we can.
We will honor our employers by creating the best designs we can.
We will honor our team by testing everything that can be tested.
We will be humble enough to write those tests first.
We will practice so that we become better at our craft.
Developers in a Bubble
Some commentators on software craftsmanship see a risk that the focus on the craft will encourage people to ignore the organisational context in which the work is done.
At worst, it’s another reason for developers to convince themselves it’s not just OK to ignore the context of the work they do, but actually admirable to do so. I know there are many people working in software who understand that their users, customers and organisations are a critical part of their environment. I know there are many who put their skills and abilities at the service of their customers, users, and companies, and make efforts to understand, participate in and influence the wider lives of their organisations. But I fear we are in the minority.
I worry that a burgeoning SC movement is in a sense a local optimisation that will distract us from the more systemic issues around software and product development, businesses, customers and markets.
Uncle Bob responded to this by saying
While I agree that movements that turn inward tend to become irrelevant or even damaging I also know that all movements form splinters that turn inward. Certainly we see such splinters from the patterns and agile communities. But we also see that both communities have significant subgroups who have not fallen prey to this danger and who continue to contribute to our profession. I see no reason why the Software Craftsmanship movement should be any different. Indeed since Software Craftsmanship is expressly tied to customer partnership, I suspect the risk that major portions of the movement will turn inward is quite low.
What I make of it all
Not writing crap: yup, good call.
Of course some people are happy to buy crap, just look at the stuff for sale in Dollar or Pound stores. So a definition of quality based on the doing the best we can might be inappropriate at times.
That leaves me, like Dave Harvey and others, harbouring concerns that individuals in the software craftsmanship movement will put their craft ahead of customer requirements rather than use their craft for customer service.
In subsequent posts I’ll look at other definitions of software craftsmanship.