Journal



Recent Entries

Alternate dimensions
If you’re a typical designer working in the software world, the majority of products you’ll create will have strictly two dimensional interfaces — length & width only, pixels on the screen. As interfaces have evolved over the years many have gained a very simple kind of "depth": lighting effects, drop... (Continue)
An Insurgency of Quality
Dave Hussman, one of the leaders of the post-agile movement, recently hosted a one-day conference on the topic of “Redesigning Agility”, and invited me to give a plenary talk. The focus of the conference and my talk were how to integrate agile development with interaction design. I was very... (Continue)
Making pagination meaningful
Working with long lists of information over a network, like web email, can be problematic. Very long lists can have a huge performance hit on your servers, leaving the user tapping her fingers waiting on slow page loads, especially on “very thin” clients like mobile devices. To limit the server... (Continue)

Uncle Bob, craftsmen and the Agile Manifesto

by Alan Cooper on September 15, 2008

Bob Martin’s rousing keynote speech at the Agile08 conference in Toronto entitled “Quintessence” proposed a small but significant addition to the Agile Manifesto, a seminal document in the programming world. Uncle Bob, as he is affectionately called, proposed adding the assertion that we value “Craftsmanship over crap” to the manifesto. The idea is excellent, and the wording bold, but it isn’t quite a complete sentiment, and Uncle Bob addressed this issue in his blog.

Bob Martin at Agile 2008

Shortly after delivering his speech, Uncle Bob stated in his blog,

The problem with my proposal is that it is not a balanced value statement. In the other four statements we value the second item. We just value the first item more. But in my proposed addition, we simply don’t value crap at all.

He goes on to propose rewording it as “Craftsmanship over Execution,” but admits that it still doesn’t capture his meaning precisely. He then asks the blogosphere for help. My response follows.

First, I’d like to wholeheartedly endorse both Uncle Bob’s emphasis on craftsmanship and his assertion that there’s a subtle missing piece in the Agile Manifesto. As he says, “Craftsmanship over crap” is effective histrionics but may not be sufficiently clear for a constitutional amendment, so to speak.

Creating quality code is a primary force behind all agile programming, so equating “craftsmanship” with “quality code” seems redundant. What’s more, it still doesn’t really scratch the itch here. I believe that what Uncle Bob means by “crap” has more to do with the end result of what we create than it does with the code itself.

As we have all learned the hard way, if we simply give our customers what they ask for, it will suck, even if the code is clean. As I see it, the strongest, most revolutionary, and most compelling aspect of agile is its emphasis on creating a quality product, rather than just quality code. A quality product is one that pleases customers and users, while a quality program is one that merely implements functionality.

The craftsman understands that his primary, overarching goal is to create a very happy, very satisfied user. He also knows that pleasing users is extremely satisfying for the craftsman as well. It is his responsibility as a craftsman to assure that the customer gets what will make him happy and not just what he asks for. After all, being the user of complex software doesn’t imply possession of any skills or aptitude for designing that software any more than it implies skills for coding it.

To the widespread frustration and disappointment of software users, they are more often than not given feature-packed software that, while it may be composed of clean code, is ill-behaved, hard to use and understand, and it doesn’t satisfy them. Such code may be created by skilled programmers, but not by responsible craftsmen. Such code is crap.

So I would propose that the fifth statement added to the Agile Manifesto should read like this: “Responsible craftsmanship over features and functions.” While there is value in the latter, we value the former more.

Part of the well-tempered agile programmer’s craft is knowing that his end goal is generating a fierce customer loyalty to his product by imbuing it with good and appropriate behavior, without compromising the more esoteric needs of his own technical specialty. A product becomes desirable because it behaves well, while its functionality is merely a hygienic necessity. That is, its presence conveys little added value, while its absence is damaging.

Craftsmen, almost by definition, don’t stop at the minimum requirements, but strive ever to excel, to super-please, and to create highly desirable, human-scale objects. Yes, they take pride in the perfection of their hand-cut, blind dovetail joints that the user will never even see, but they know that their beautiful joinery is only a means to a bigger end.

Filed under: Agile, Design & engineering


Comments

On Sep 19, 2008, Declan Whelan said:

I agree with your point that agility helps teams focus on delivering software that, in the words of Kathy Sierra, "helps our customer's kick-ass".

But I think what Uncle Bob is getting is the exact inverse of what you are claiming. Agile teams can, and do, deliver software that kick's ass ... even with crap code. The existing agile manifesto already covers that.

The problem is that crap code is unsustainable and that is what Uncle Bob is getting at.

We need to focus more on writing simple, clean code, not as an end unto itself, but as an enabler for delivering software that helps us deliver kick-ass software over and over again.

 

Post a comment


Name

Email Address

Comments (Feel free to use basic HTML tags for style)

We're trying to advance the conversation, and we trust that you will, too. We'd rather not moderate, but we will remove any comments that are blatantly inflammatory or inappropriate. Let it fly, but keep it clean. Thanks.

To help filter spam, please enter the letter u here