October 29, 2010

...Learn TDD with Codemanship

Craftsmanship Matters

I have a software application I use regularly and love, despite it's shortcomings. I bought it over a year ago, and spent hundreds of hours using it.

Those little niggles started to grate after a while. It was buggy and would stop responding every few hours. And it was designed in a way that made changing my work very difficult and time-consuming.

So I emailed the company with my suggestions for little improvements that I'd love to see in the next version. Nothing radical, just little tweaks that I felt could make a big difference. They responded quickly and positively, saying that at least two of things I'd asked for were going to be in the next major release, which was due very soon.

That was 10 months ago. There's been no major release. Or even a minor release. And the niggles have become deal-changers for me. I've switched to a new software app that's more stable, more reliable and has none of the downsides and many more upsides, and it costs half as much.

What's interesting is that, had this fabled upgrade been forthcoming, I wouldn't have bothered to look for an alternative in the first place. They lost my custom simply because they didn't deliver those minor tweaks. Indeed, it seems they couldn't deliver those minor tweaks, or any bug fixes, or anything at all.

They have a web site for their user community that has also stayed exactly as it is, missing features and show-stopping bugs included, for many months now, despite continual promises that things were "just about" to improve dramatically.

I don't question their good intentions. But I'm beginning to think maybe the problem is that they just can't get a working release out the door. This is wild speculation, but I'm going to hazard a guess that the code base for their app, and their web site, is in bad shape. The bugginess of it suggests lack of testing, and therefore a low likelihood of test automation. I'm guessing the replacement I now use has been subjected to a good amount of testing, and the relentless stream of updates (to the point where it's becoming sa little annoying, if I'm being honest) suggests that re-testing the whole app - easily a couple of million lines of code - doesn't take the developers very long, so I'm also guessing they automate their tests.

On my travels, visiting teams around and about the countryside, I have yet to see a code base that lacked automated tests but was clean and well-factored. These things seem to go hand-in-hand, and with good reason. You need quick and comprehensive regression test feedback to keep code "liquid", since that requires ongoing refactoring. The frequency of releases with my replacement app, given the apparant age of the product (3-4 years and counting) also suggests that their code must be pretty easy to manipulate. Ergo, it's probably quite clean and well-factored.

I can tell all this from external clues. I'm clever like that. (Or nosey, depending on how you look at it.) These are signs that every business and product owner should be interested in. They don't necessarily care if the code inside is clean or if the tests are automated. That's our business, not theirs. Literally. But everyone should be interested in how frequently we can release updates to our products. And everybody should be interested in how reliable our products are.

No word of a lie, marketing budgets notwithstanding, the makers of this replacement app look set to dominate their market in a few years time. Quite possibly just by word of mouth. For $60, they're selling a product that outperforms rivals selling at $400+. Oh, and it boots up about 5x faster than any such product I've ever seen. And it's never crashed on me, not once. The market leader in this space has a product that I've spent more time staring at the splash screen of than actually doing any work with.

Occasionally, I encounter a bug. But really very rarely. Maybe once every hundred hours of intensive use. And those bugs are probably originating from 3rd-party plug-ins, if I'm being honest.

In summary, then, this app shits all over the one I was using before. You know, the one I fell in love with. The one I would have married, had she not turned out to be so unreliable - so full of promises and so short on delivery.

So whenever I hear people denigrating craftsmanship or downplaying the importance of good developer practices, I just remember these times when I lost my patience with a software product and the makers lost my loyalty.

It matters. It really does.

Posted 7 years, 6 months ago on October 29, 2010