Dan North has provided tremendous benefit to our profession and in the brief conversations I have had with him has proven to be an affable guy. I was a bit taken aback when I read his recent post: Programming is not a Craft. Dan’s sentiments are not unique. I have heard similar opinions from other prominent developers I respect.
I read in Dan’s post (and in some of the comments) a visceral reaction to gold plating things not determined "important" by the customer. I get that. I also see a need to temper this with the simple fact that the client doesn’t always know what is best for them. Let’s just get that out in the open. My doctor knows what is better for my physical body than I do and I am willing to pay for that. Will I always take the advice I am paying for? Well, probably not. And I’m sure that leaves my doctor shaking her head in dismay.
I learned that integrity is "doing the right thing even when no one is looking", and I see the Software Craftsmanship discussion as striving for integrity in the systems we create.
One mark of a true professional might be a willingness to balance client need with implementaion elegance resulting in software that meets the need of the client AND is something worthy of pride when shown to another developer. If the only reason we are writing code is to provide the minimum a client wants to pay for, then how compelling is my work, really? Can I be proud of my professional body of work if I am simply marching to orders? I say no.
Where I part ways with Dan is in his analogy of the plumber. Granted, I simply want my pipes to work, but I am willing to pay for a plumber that takes pride in his work. I trust that plumber will simply do a better job as he strives to make his work appreciated by the next plumber that sees it. Can I quantify this into dollars? Not really. Perhaps in the extra time required to lay in a perfectly soldered joint as opposed to a sloppy one. Am I willing to pay more for this type of person to do the work? No question: Yes.
The bottom line for me is that we would all like to take pride in our work. No one I’ve ever met gets up in the morning thinking, “Today I will make a piece of crap”, and keeps at the job with any pleasure. We want to enjoy our work and be proud of it. Is that so bad? The very real software craftsmanship discussion simply gives us a vehicle for discussion in the pride we may take in our work for its own sake.
The risk to the craftsmanship community is to avoid getting carried away with dogma. Every time I hear Bob Martin assert to a 500 person room that if they aren’t writing unit tests they are "not professionals" or somehow unworthy of being in the room with him, I cringe. That’s a perfect way to draw fire and alienate people who might otherwise join you in your cause. It also happens to be a perfect way to stand out as a charismatic speaker who gets lots of attention, but I digress…
Do I write tests? Yes.
Am I ashamed when I don’t? Not really. Some jobs still call for duct tape.
Professionalism is knowing the appropriateness of a tool for a job and in always striving for integrity in our work.
And, Dan, I admire and appreciate your contribution to our craft .