From: www.itworld.com
April 7, 2008 —
The late Arthur C. Clark famously once said that any sufficiently advanced technology is indistinguishable from magic.
The term 'magic' is one we ruefully use for IT systems too. Of course we cannot make the system magical but some of the things users ask us to make the machine do automatically? ... Magic. Sorry. Machines don't do magic.
Sit around with a bunch of engineers reading through a set of system requirements documents and sooner or later one of their number will exclaim 'Yeah. Right. And then magic happens!'.
We all have idealized visions of IT systems that are at once totally flexible and totally automated. We want the system to be smart, to know how to do the right thing. Oh, and we want it never to allow users to make mistakes.
Therein lies the problem. To paraphrase Arthur C. Clark: any sufficiently advanced end-user action is indistinguishable from an end-user error.
Let us take a simple example. Imagine a workflow in which three pieces of information are required from the end-user in order to proceed. Let's call them A, B and C and let's imagine that they can be either on or off. That leads to eight combinations. Developers proceed to code for the 8 combinations. That is version 1. Now comes
the flexibility question: 'what if we need another on/off variable, D?' or worse 'what if we want A to have three possible values not two?'. Or even worse 'what if we need to be able to add new variables on the fly?'.
Well, we could try to make the variables completely configurable in terms of what they are called, what values they can take and what logic should be triggered based on the combination of values at any given point. Unfortunately, the only way to cover all possible non-magic configurabilty possibilities would be to allow direct change to the source code. Short of that, the best we can do is make some of these things somewhat open ended. Allow some fields to take arbitrary values. Make some actions scriptable by the end-user. That sort of thing.
Sadly, the result of this is invariably the introduction of the possibility for human error. Locking everything down so that the system is foolproof and fast and correct - and all such good things that appear in most requirements specifications - is fundamentally at odds with having a system that is completely flexible - which also appears in most requirements specifications.
Any system that claims to provide all these at once is - unless I have missed something fundamental - not advanced technology at all. It is pure magic.
ITworld.com