Why You Want To Be A Craftsman Instead Of
A Cowboy

There has been a bit of a code war going on or at least a some what heated debate on code quality and programming principles.

I’m not going to rehash everything but I will sum up the two sides and throw my opinion into the ring. Why does my opinion matter? I’m not so sure that it does but you can be the judge of that. What I do think is different about my opinion than the opinions that I have heard/read so far is that I can’t place myself in either camp. I am not a coding cowboy that just cares that “it works” and I am not a bureaucratic standards Nazi either. I’ll talk a bit more about why I am ducking for cover in no man’s land in this battle of opinions.

The Coding Cowboys Say

Jeff Atwood and Joel Spolsky sure hit a sore spot when they suggested that learning programming principles just wasn’t worth it and just getting it done was more important.

Jeff likened principles and guidelines to the Ferengi and their 285 Rules of Acquisition saying that every situation in programming cannot be governed by a set of rules and there isn’t a one size fits all pattern to solve everything.

Joel refers to the SOLID principles as “extremely bureaucratic programming that came from the mind of somebody that has not written a lot of code.”

The Craftsmen Say

Jeff and Joel’s comments sparked a lot of rebuttals from the ALT.Net community. It is understandable since those comments attack the very foundation of TDD and DDD. I am not going to bore you with a list of everyone that chimed in but I want to highlight a post that I think sums up this position in a clear and nice way.

Justin Etheredge made a great post is response to the criticisms. I have been reading Justin’s blog for a while and I like the way he views software. He likens software development to carpentry and woodworking, both are a learned craft. You don’t get good a carpentry by throwing things together and ignoring building codes. Patterns and principles are like building codes.

My View On The Whole Thing

I was a bit surprised at first to hear Jeff and Joel’s comments because they are some smart guys that have produced some successful software. I highly doubt, regardless of how it came across, they intended to imply that you should ignore all guidelines and just string together your code. Unfortunately, the comments of their posts make it all too clear that this is exactly the way a lot of programmers took it. What’s worse is bad programmers will use this as a defense for their resistance to improving their skills.

Like I said, currently I am somewhere in no man’s land. For too long I had the mindset that would take Jeff and Joel’s comments and use them as an excuse to ignore patterns and principles. From the beginning of my education in software development, no importance was placed on “good design.” My college training only focuses on teaching the syntax and considering that “knowing” the language.

After a few years of living in denial, I had to accept that their was far more for me to learn and I began my journey out of the cowboy coding camp and started striving to develop software in a TDD manner. I still have a lot to learn but facts cannot be ignored. Since making an effort to improve my craft I have seen a significant drop in the amount of bugs found in new software I am producing and the bugs that are found are smaller and much similar to solve. So that is my take on the whole thing and I hope that this at least peaks someone’s interest to dig a little deeper in regard to becoming a craftsmen and taking pride in the code they produce.

kick it on DotNetKicks.com Shout it

11 comments on this post

steven says:
Feb 27, 2009 - 11:02:50

jeff and joel are washed up, oh wait, they were never actually decent to begin with. let them fade out

Anonymous says:
Mar 1, 2009 - 12:03:03

Umm, what about the “I just want to earn some money” option? Why is it always assumed that people want to become proficient at all this stuff? Technology is just a tool, and not everyone is in love with it – some just thing it’s a good way to make money.

Justin says:
Mar 1, 2009 - 02:03:13

Anon, that is a fair question. I have 2 questions for you.

If the application proves hard to maintain down the road or other programmers see the code and it is messy or it is buggy do you think the client will hire you again?

When the client comes to you with bugs and new features wouldn’t you rather it take less time and be easier to fix things or add new functionality?

You need to consider things like support and your reputation beyond making a quick buck.

Anonymous says:
Mar 2, 2009 - 01:03:41

Justin, you are right, but look at India: they produce unmaintainable code and still I don’t see their IT sector crumbling to dust or anything. In fact, the economic model of ‘bad code, cheaply’ works just as well, and keeps company owners in the green.

As to your question: will the client hire again? Smart managers will hire elsewhere, but dumb managers – yes, they sure will hire again, and again, some will hire bad coders up to the point they are fired by their superiors. You have to remember that some customers (e.g., large monopolies) aren’t really affected by badly written code because their customers do not really have a choice.

As to your second question, would I rather I bill fewer hours or more hours? Ugh, let me think, which is the more viable option for my business (indeed, any business)? Billing more hours of course!

As for support and reputation, well, looking at the levels of support from 3rd party component makers for example, you basically get e-mail support which comes directly from whatever country the work got outsourced to (eastern Europe, typically). I probably don’t need to tell you what quality of support this is, because you can pretty much guess it. And – guess what – we keep on buying this stuff! Year after year. Explain that.

Justin says:
Mar 2, 2009 - 02:03:09

Anon, everything you say is true and that, to me, is a sad state for our industry.

The company I work at charges premium rates for development and for our software and customers pay a significant monthly support contract. We have no shortage of customers even though they could probably hire someone from India. We have a reputation for great suppport, 24/7 in-house help desk with phone, email, and remote support and for software that just works.

As for billable hours, I am not in that boat. I am paided an hourly salary. We have a hard time keeping up with our work demands so their is no shortage of billable hours.

Compare it to a used car salesman who is trying to sell a used car to customers that are trying to pinch every penny. The car is going to need work constantly but to those customers money is what matters.

Then you have a Mercedes dealership where customers buy based on quality and how the sales team treats them. For these customers money is not that big of an issue.

Personally, I would rather have customer #2.

We regularly turn away customers that want something thrown together really cheap. It is just not how we do things.

Mar 2, 2009 - 10:03:41

Justin, if there were more people that treated software development this way we wouldn’t have these problems. Too many people just want to make the quick buck. In the process, they validate the customers who want something thrown together quickly. There are far too many devs and far too many clients that operate in this fashion. It is something that definitely needs to change.

Anonymous says:
Mar 3, 2009 - 10:03:07

It is indeed a sad state of affairs, and sometimes I feel that IT has become ‘a paradise lost’ because the people in charge of it all are often clueless about what ‘quality’ is. The thing is, big outsourcers have given so much momentum to this idea of ‘code, cheaply’ that the notion of a well-funded IT firm is becoming an exception rather than the rule.

bill says:
May 8, 2009 - 07:05:59

Good post. I have a lot of thoughts on this topic, so much so, that my blog is basically about this. I tend to lean on the cowboy side a little more, because I am a pragmatist. Not to say we want crazy unstructured code, but functioning code wins in my book any day. I often debate the 2, as the battle between ideal and practical. ideally you want a good blend. i have a recent post here about ideal vs pratcical http://www.effectivedevelopment.net/2009/04/find-right-blend-ideal-practical-web-development/

Dec 27, 2011 - 03:12:39

You’ve gone to a lot of effort to do your research. If more writers would take the time and make the effort to state their point of view readers would learn more from their content.

Dec 27, 2011 - 11:12:31

I really appreciate interesting articles like yours. This is very good content. Your points are represented with original writing and your content is well-written. Information like this is good to have for readers. Thank you.

{ Feb 27, 2009 - 11:02:10 } Lets Hear It For The Craftsman