Good software is a proof of design
Before Darwin described the process that allows natural things to develop complexity
over long periods of time through various kinds of selection, there was another,
religious, theory called 'argument by design', or 'proof by design'. This basically
said that some natural things are so complex and incredible to behold there is no
way they could have just appeared by themselves, randomly or otherwise: they had
to have been invented by an 'intelligent designer'.
There was no other evidence advanced to support this theory. To understand why it
seemed so self-evidently true, you have to put yourself in the position of someone
who already believed in an omnipotent creator that created everything as we see
it in one go; someone who did not have the benefits of Darwin's discoveries at hand.
To a person with that outlook, living prior to the great period of archeological
and astronomical discoveries when we discovered that the earth was a lot older than
a few thousand years and was not the centre of the universe, it seemed a persuasive
argument.
Given the amount of evidence that supports Darwin's theory, and that nobody has
advanced a better, evidence-based theory to displace it, it would seem perverse
to still believe in the 'argument by design' theory unless, however, you apply it
to computer software and other human artifacts, in which case it is self-evidently
true. They were obviously designed and made by someone: we know that because we
have a record of it and we can mostly remember when they did not exist. No supernatural
explanation is required.
The issue then becomes the quality and quantity of design. It used to be hard to
convince clients that working on design was actually part of developing the software.
Most clients want to see quick results, especially if you have not worked for them
before and haven't built up trust. If you've already put in your first invoice but
have no system to show them, they start to get nervous. These days, clients will
often accept that a good design document which actually describes their needs is
worth having, so as a developer you buy yourself some time before starting coding.
But ten years ago (when I decided to name my future company 'Proof By Design') it
was not so easy.
The optimum amount of design depends on the complexity and requirements of the application.
It could be one A4 page of developer's notes for a small application or a full set
of RUP documentation for a large project involving lots of developers. One thing
is sure: in software development, design pays off. Un- or poorly-designed software
is less likely to meet the needs of its users and more likely to contain bugs and
exhibit other unwanted side-effects.
But because no designer is that intelligent or infallible, even good software
that meets its users' needs will contain bugs. It's a fact of life, which is too
complex to be otherwise. In fact, I would be more inclined to believe in the argument
by design theory when applied to natural things, if the proponents said, 'We know
this was made by an intelligent designer in our own image because it contains cock-ups'.
Or as W B Yeats, put it:
But Love has pitched his mansion in
The place of excrement
Now, surely no intelligent designer would have done that, would she?