CollapseAbstractionSpace
October 21st, 2006So I have spent the last two months ruminating on what makes the style of software development that I have come to expect work to well.
The ostensible reason is that I’ve been on a client site exploring what TDD and BDD mean for an organisation that has no exposure to either of the concepts.
Fantastically that has meant a deep introspection of my personal coding style. I would probably catorgarise my natural style of software development as HackUntilItWorks.

Why use T.D.D?
1. It is making the best abstraction at the best time. (CollapseAbstractionSpace)
Engineers think about designing software because that it what makes us want to be engineers. We like thinking about the best way to solve a problem and it make us Happy when we solve it. The only thing that makes an engineer happier than when he solves a problem is when they solve it in a more elegant manner.
But given a set of solutions to a problem, we will decide on the wrong solution.
For example: for a design F, there are a number of solutions that satisfy F -> S(n) where S is the set of possible solutions (n). This holds for a given solution space such as a low coupling/high cohesion space. Given that we accept that within the space we are describing the tenets of the original GRASP patterns.
The reason is that no given solution is correct but some solutions are more correct than others.
Developers believe intuitively that if they think hard enough, then the idea they have; the abstraction they make is the correct one.
In the terms given above, Developers think that F -> S(n) becomes F -> S(0).