January 15, 2011

...Learn TDD with Codemanship

Enough With The Software Holy Wars!

Religions are funny things.

It turns out the Christians, Jews and Muslims are all worshipping the same god. Where they disagree is on the detail of what that god has for breakfast and what his policy on beards and public holidays is.

We can point and laugh, of course. But we can be just as bad.

You see, it also turns out that "software craftsmen", "software engineers" and "Agile Software Developers" all worship the same god, too. We just disagree on the finer details of precisely how our god expects us to achieve the exact same results we all seem to agree we should be striving for.

There is no disagreement that our mutual god's primary commandment is that Thou Shalt Not Write Software Thy Customer Didn't Want.

Nor do we disagree that we will need to iterate to converge on the most useful, usable software.

We're also in agreement that testing should happen as early as possible and as often as possible if we're to avoid wasting the bulk of our time fixing bugs that slipped through the net.

Indeed, in every important respect, we agree on everything. (Well, anyone whose opinion matters agrees, anyway.)

Where we disagree is on whether we should call them "use cases" or "user stories", and on whether we should write our tests first or write them after the code, or whether we should put aside time to deliberately practice these skills or whether we should join an accredited professional body and get certified on them. And so on.

The underlying beliefs, the foundations of what we do and why we do it, have remained unchanged for decades. The Old Testament of software development is a shared religious text among anyone who does it well.

In case you need reminding, here are the Ten Commandments Of Software Development:

  • Thou Shalt Not Write Software Thy Customer Didn't Want
  • Thou Shalt Iterate Thy Solutions, Indefinitely If Necessary
  • Thou Shalt Test Early & Often
  • Thou Shalt Manage Versions and Configurations Of Thy Software, Even When Working Alone
  • Thou Shalt Not Jump Straight Into Writing Code If Thou Hast Not Put A Bit Of Thought Into The Design
  • Thou Shalt Not Write Code That Is Hard To Change
  • Thou Shalt Not Integrate Or Release Untested Code
  • Thou Shalt Not Create User Interfaces That Are Hard To Use
  • Thou Shalt Treat Functional & Non-Functional Requirements Equally
  • Thou Shalt Automate Oft-Repeated Tasks & Share Oft-Repeated Code

Whether we call ourselves "craftsmen", or "engineers", or "artisans", or simply "software developers" or even "computer programmers", we all have to hark back, by necessity, to the basic foundations of writing software professionally.

Each of our commandments implies a discpline, with it's own skillset, it's own practices, it's own standards and it's own body of knowledge. We may disagree on the detail of exactly how to follow each commandment, but fundamentally, underneath it all, we're all worshipping the same god.

So, enough with the Holy Wars! Let's get on and get better at delivering working software that will satisfy, maybe even delight, our customers.

Posted 6 years, 7 months ago on January 15, 2011