“Want me to adopt your solution? Let’s clarify first which are the new problems it brings on” -a conscious customer
The very presence of a solution to a problem brings on new kind of problems, ad infinitum. That is another way to say that there always will be room for improvement. That is why, when offering a contribution as a solution to a problem, there is need for a higher level of integrity like the one described as scientific integrity by Richard P. Feynman1, one that let the buyer beware or Caveat emptor2.
Problems sometimes are known by kind of a nickname with the word hell in it. For example, Microsoft Windows’s COM components used to be global for the local computer just because there is a single Microsoft Windows Registry by operating system installation. The problems associated with centralized and globally accessible information, in this case, took the nickname “DLL Hell”. Of course, the Component Object Model was the heaven —the solution— for certain kind of problems and we adopters were glad to pay the costs (consciously or not) of the correlated new problems it brought with itself, up to some —subjectively defined— point. The information needed to determine where that point is for any given subject is what proponents of the solution must provide in order to aspire for a behavior with scientific integrity.
Do you see the relationship between science and engineering? Do you see why software development is not a full-fledged branch of engineering discipline hitherto (by far)? By the way, maybe you are not conscious of this yet but, you don’t really want software development be a branch of engineering discipline in its entirety (more on this later).
Another example3 of heaven/hell dualism —what can now be called “Framework Hell”— is that of maximized flexibility or extensibility in object-oriented frameworks and over-designed helper4 libraries (delivered as unsupported, or hopefully supported, source code) lacking the properties of Application Programming Interfaces.
First, the general theme with those is the intention to provide a single design decision to be suitable for all unforeseeable singularities down the road in the evolution of an application’s design. They try to do that by means of over-generalized and premature abstractions introduced “for the needs of the future” that ultimately become more hindrance than help when disruptive singularities are discovered on the way to materialize the original intent of such frameworks or “helper” libraries.
Second, designers seem to be unaware of economical properties of software designs. They do not realize that each new line of code must be kept accurate and supported for the rest of the design’s lifecycle. So, the cost of a given application that makes use of a source code library increases in relation to the size and complexity of such a “helper” library. Those costs can be mapped to the costs of warehouse or inventory of goods in the manufacturing industry. Sadly enough, often the supposedly benefits for such a warehouse of flexibilities never are delivered because the “just in the case” needs never came.
When introducing the concept of scientific integrity there are, of course5, comments pleading to “the real world”; it is curious how, what is Kansas for somebody, could be Oz for somebody else, and vice versa6. For those with the spirit of continuous learning in general and software design in particular, please consider serious works on design activity, like what Donald A. Schön has published7; along with a seasoned advice by longtime consultant Peter Block8:
“Better to define our task as a process of discovery and dialogue more than as an act of diagnosis and prescription”
1 The Pleasure of Finding Things Out: The Best Short Works of Richard P. Feynman by Richard P. Feynman
2 Caveat emptor concept graciously referred to the author by colleague Jorge Eduardo Barsallo Caballero
3 The Legacy and Liability of Object Technology The Dark Side of OO by Dave Thomas
4 “Everyone may be trying to help, but good intentions are no substitute for competence” -Dan Starr
5 “Unanimity of opinion may be fitting for a church, for the frightened or greedy victims of some (ancient or modern) myth, or for the weak and willing followers of some tyrant. Variety of opinion is necessary for objective knowledge” -Paul K. Feyerabend
6 “There are people who prefer to anchor themselves in the comfort of a limited level of knowledge. They consider themselves practical and 'real-world'-ish” -Andrei Alexandrescu
7 Reflective Practitioner: How Professionals Think in Action by Donald A. Schön
8 Flawless Consulting: A Guide to Getting Your Expertise Used by Peter Block