July 12, 2013

...Learn TDD with Codemanship

PRO TIP: Iterative Design Is A Goal-Seeking Process

One aspect of software development that gets glossed over even by those presumably in the know is this question of how we judge success.

This is kind of important, particularly when we're supposed to be iterating. The vital question ought to be: iterating towards what?

Iterative software development is, in its essence, evolutionary design. Each new version of the software could be "better" or "worse" than the last. If it's better, we move forward with that version, mutating it to the next. if it's worse, we reject it and go back to the drawing board.

Doing evolutionary design effectively requires us to have at least a rough idea of what is "better" and what is "worse", and the only meaningful context for that is a piece of knowledge that eluded even the original signatories of the Agile Manifesto.

Contrary to what we've been told, we should not judge our progress by how much "working software" has been delivered. The purpose of building bridges is not to build bridges, it is to allow us to get to the other side.

Software is a tool, and should be helping us to solve a problem. It's solving the problem that's the goal, and the only meaningful way to judge our progress against that is to test the software in that context.

If the goal of the software is to make it easier to find a hotel room when you're in a strange town, we should use each version of the software to try and find a hotel room in a strange town, and measure that against how we were doing it before. Is it easier? How much easier?

When we lose sight of the real goals of the software we're writing, we all too easily end up with software that's an end in itself. I've lost count of the times I've seen businesses waste millions of pounds failing to solve a problem with software.

Now, this shouldn't be news. I've been telling teams this for nearly two decades, and I learned it from books that were written years before then. Parts of the Agile community may have recently rediscovered the idea - and rebranded it, of course, as they seem to do with every old idea - but the notion that iterative processes should be goal-seeking if we want to converge on a workable solution is pretty fundamental.

Without clear goals, we're doomed to wander endlessly in a sandstorm without a map or a compass.

Posted 2 days, 2 hours ago on July 12, 2013