As IT practitioners, we all want to produce solutions adapted to the needs of our clients. And usually we want our solutions to be fully adapted to a bit more than what we understand of the needs of our clients. We want to cover more in case we have missed something. We want to prepare for the future. This is why we make such long analysis, produce documents with complex business rules and go through long and tedious review and validation processes. This is also why we work hard at designing generic, elegant, general solutions. In the interest of the future. And that’s the right way to do, isn’t it?
No, Sir, it is not. As Auguste Detoeuf was saying in the 30’s in “Propos d’O.L. Barenton, confiseur”:
Contrairement à une opinion répandue, on fait quelquefois trop grand. Il faut faire juste, mais en ménageant tout pour agrandir le moment venu.
On se borne l’avenir en faisant trop large, aussi bien qu’en faisant trop étroit.
Or, translated in English:
Contrary to widespread belief, we sometimes build too large. We must build just right, while keeping open to enlarge when the time comes.
You can restrict the future by making too large, as well as too narrow.
In fact, when we we build “too large”, we develop mechanisms and answers for questions which have not been asked. When they arise, our solutions have to evolve because the answers we believe were right are not anymore. When other questions are asked, the complexity we have unnecessarily added is an obstacle to providing new, unanticipated answers. Thus by trying to be over-adapted, we prevent our solutions to be adaptable, which is really what our clients needs – really.
We should instead apply Gall’s law:
A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: A complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a working simple system.
Our job in IT is to build complex systems. We should build a complex system by first building a simple system, satisfying simple needs. Then we can augment and satisfy more sophisticated requirements, while making sure that:
- the system is still working;
- the system is still adaptable.
These two points are difficult, and require effort every day, but only then you will be able to help your clients – and keep being able to do so.
This is the paradox: by being adaptable, we can succeed at always being adapted (although it is not guaranteed, and we can still fail). By aiming at being fully adapted today, we are guaranteed to fail at being adaptable, and thus to fail at being adapted tomorrow.