Rather than an opinion, this is a question. What is the purpose of the Software Craftsmanship movement?
I heard the start of Bob Martin’s speech at Agile2008 in Toronto. I walked out because I wasn’t comfortable with the language. I missed the speech that launched the Software Craftsmanship movement.
Since then, there have been conferences and code retreats, and even a manifesto. I know some of what the software craftsmanship community do. I’m just not sure why? I’m not sure what problem it is trying to solve.
From reading the manifesto it seems the purpose of the software craftsmanship movement is to help the top X% of developers get better. This is not a bad goal, I am a member of the Agile community for the same reason. (The few members of the movement I have discussed this with deny that this is the purpose.) If so, all is good and fine but it does not really help improve the software development industry.
As a project manager I’ve never had a problem with the top X%. They care about the job they do and want to get better at it. The problem for me has always been the bottom Y% who do not care and oppose learning new things. I would prefer a movement that pitched its level much lower and made it possible to address the problem at the bottom rather than elevate those at the top.
So what is the purpose of the software craftsmanship movement? Can anyone help me with this one because at the moment I don’t get it.
November 7th, 2011 at 5:29 pm
It depends which software crasftman you ask. It has no single purpose.
November 7th, 2011 at 5:39 pm
It was an entertaining speech, but it didn’t launch the Software Craftmanship movement. McBreen’s book was published in 2001 and the Pragmatic Programmer in 1999.
November 7th, 2011 at 5:53 pm
Hi Chris, what makes you think the objective is to help the top X% developers get better ? BTW: I also was at Agile2008 and missed that speach but not for the same reasons.
November 7th, 2011 at 5:59 pm
The purpose is clearly to gain moral superiority, to draw a dividing line between us on the one hand and them on another. It may lead to books or expensive consulting services to help you solve a problem that you don’t have. It may lead you to enter into mutually a sycophantic relationship that is to do with easing guilt but not making anything.
The movement may care about well-crafted software, but they clearly care more about submission to group-think and the cult of personality; they want to steadily add value but prefer to do so with the blessing of their peers.
You are right to worry about people forming groups like this. Groups of people took TDD and XP and created mechanical TDD and XP. Groups of people took the idea that people are more important the processes and managed to switch it that around so that the iteration is now the central point of focus and not *just* the temporal structure it should be.
I think, more than anything, movements like this encourages faith which costs us our skepticism. Without skepticism there is no design, no craft, and so the whole thing is self-defeating.
Happy to watch the craft community, however, and admit that I got it wrong when I see the evidence that we are becoming better programmers. My feeling is that if you need someone to tell you to improve, or another person to tell you to be courageous, you will never do or be either. We stand alone in this game – time we faced that fact.
November 7th, 2011 at 8:29 pm
Matts, I’m curious about “the bottom Y% who do not care and oppose learning new things.”
I’ve never found anyone who really didn’t care or who opposed learning new things. It’s just that they often didn’t care about the things I cared about and didn’t want to learn the new things I wanted them to learn. I’m not sure that labeling these people as “lower” is likely to engage them in wanting to learn how better to create software.
How would you suggest pitching software craftsmanship to these people?
November 8th, 2011 at 9:35 am
You are right, they did want to learn, but not the things I needed them to learn. Unfortunately, an extensive knowledge of cricket or fashion are not much use to an IT project. 🙂 I envy you for never encountering these types of people. That said, I did learn a lot about motivation and introducing new skills from them.
Before I pitch software craftsmanship to anyone I would like to know why it is important. Hence the post.
November 8th, 2011 at 12:56 pm
Don’t get me wrong. I’ve encountered many who didn’t want to learn the things /I/ thought important to learn. I’ve seen many who wanted to learn things like:
– How to avoid being named scapegoat for a doomed project, &
– How to curry favor with the manager while avoiding hard work.
It seems that many businesses have processes in place that value these skills over the skills of creating reliable software.
I do not speak for “the software craftsmanship community,” but I personally am glad to see a community that values the creation of reliable software and promotes practices that lead to that goal. My own interest is to help all who are interested get better, and to pique the interest of those on the fence.
Again, how would you propose to address the “bottom Y%”? If they show no interest in improving, would you “force” them? Even the “middle 60%” can be difficult to engage when they’re under time pressure to deliver.
November 22nd, 2011 at 1:44 pm
A question in return. Are you asking what purpose it serves the developers or what purpose it might serve you? Or some other purpose?
December 15th, 2011 at 12:54 pm
For me, software craftmanship is a means to an end. That end is code that I can more easily maintain and deploy. I’m not suggesting theirs not an ulterior motive as you suggest, simply that this is not what I get out of the community.
I have long felt uncomfortable at the word ‘elegance’ when used to describe code and much prefer Bob Martin’s ‘clean’. The difference I feel is a swaying back to function over form with the word ‘clean’ whereas ‘elegant’ suggests form over function.
February 7th, 2012 at 1:30 pm
Coming in late to this one.
To me, Craftmanship is about being the best I can be,striving for excellence. It’s nothing to do with improving the top X%.
But your article begs one important question – if the bottom Y% are so troublesome then why are you employing them?
November 23rd, 2012 at 9:17 pm
I too am coming in late to this conversation. But just having started my journey, I stumbled upon this post and wanted to humbly respond…
I noted in my research that an important aspect of Craftsmanship is “Perpetual Learning”. In his book “Software Craftsmanship”, McBreen suggests that all those who begin the journey to software craftsmanship also make a commitment to become perpetual learners. He recommends a series of steps specifically tailored to get those who are better now involved in mentoring those who are willing to get better in the future. This process eventually works to improve the software development community as a whole (which directly addresses the problem you were having about the Craftsmanship movement in general).
While there is a distinction between software that should be “crafted” and software that should be “engineered,” the general idea is that the majority of software can be well-crafted and should be well-crafted. The movement helps to define both what is well-crafted software, and what does it mean to be a software craftsman.
Additionally, “It is as much about attitude as it is about competence, even though competence is a prerequisite.”
I think that this “attitude” could be all about “Perpetual Learning” — learning about how to create, deliver, and maintain excellent software applications for our clients.