The Book of Fallacies
Whereas the design side of software engineering has made significant advances since the arrival of Object Oriented approaches, thanks mainly to the Gang of Four and others proponents of design patterns, it’s difficult to see much progress on the other (and opening) side of the engineering process, namely requirements and analysis. Such imbalance creates a bottleneck that significantly hampers potential benefits, and our understanding of requirements should be reassessed in order to align external and internal systems descriptions; in other words, to put under a single modeling roof business objects and processes on one hand, their system counterparts on the other hand.
Given that disproving convictions is typically easier than establishing alternative ones, it may be necessary to deal first with some fallacies that all too often clog the path to a sound assessment of system requirements. While some are no more than misunderstandings caused by ambiguous terms, others are deeply rooted in misconceptions sometimes entrenched behind walled dogmas.
Hence, to begin with a tabula rasa, some kind of negative theology is required.
Fallacy #1: Facts are not what they look like
Facts are not given but observed, which necessarily entails some observer, set on task if not with vested interests, and some apparatus, natural or made on purpose. And if they are to be recorded, even “pure” facts observed through the naked eyes of innocent children will have to be translated into some symbolic representation.
Fallacy #2: Truth (or Objectivity) in Models
The mother of all fallacies is to think that models can describe some real-world truth. Even after Karl Popper has put such a fallacy to rest in sciences more than half a century ago, quite a few persist, looking for science in requirements or putting their hope in abstraction. Those stances cannot hold water because models reflect business and organizational concerns expressed at a given time for specific contexts. Negative theology provides an antidote: if a model cannot be proven as true, at least it should be possible to check that it cannot be falsified.
Fallacy #3: Requirements “Engineering”
Requirements are not meant to be “engineered”, otherwise there would be no difference between the system to be engineered and its requirements. Such delusion is especially dangerous as it blurs the respective responsibilities of business and system analysts and induces the latter to second-guess the former.
Fallacy #4: Object Oriented Requirements
Object Oriented approaches are meant to deal with the design of system components, not with business organization. While it may be useful to adapt object semantics and apply them to system analysis, there is no reason to assume that business contexts and concerns should be expressed along those lines: hope is no substitute for methodology.
Fallacy #5: Requirements in “natural” language
Except for plain applications (calling for trivial solutions), significant business domains rely on specific and often very formal languages which must be used for supporting system requirements. That may be illustrated with examples from avionics to finance, not to mention law.
Fallacy #6: “Conceptual” Requirements
Whatever the meaning of the adjective “conceptual”, it doesn’t fit to business. Hence, trying to bring requirements to some conceptual level is a one way ticket to misunderstandings. Business concerns are very concrete indeed, rooted in “here” and “now”, and so must be the requirements of supporting systems. Abstract (aka conceptual) descriptions will be introduced at a later stage in order to consolidate the different business concerns meant to be supported at system level.
Fallacy #7: Model is Code
If models were substitutes for code, or vice versa, that would make software engineering (and engineers) redundant. Surprisingly, the illusion that the information contained in models is the same as the one contained in programs (and vice versa) has benefited from the Model Driven Engineering paradigm whose rationale goes the opposite way, namely toward a layered perspective. A detailed rebuttal of the “model is code” fallacy can be found in Vincent Hanniet’s blog.
The same fallacy is also behind the confusion between modeling and programming languages. That distinction is not arbitrary or based on languages peculiarities, but it fulfills a well-defined purpose: programming languages target applications, modeling languages target systems.
Fallacy #8: “Pie-in-the-sky” Meta-models
As any model, a meta-model is meant to map a concern with a context. But while models are concerned with the representation of business contexts, the purpose of meta-models is the processing of other models. Missing this distinction usually triggers a “flight for abstraction” and begets models void of any anchor to business relevancy. That may happen, for example, when looking for a meta-model unifying prescriptive and descriptive models; having very different aims, they belong to different realms and can never be joined by abstraction, but only by design.
Fallacy #9: Problem/Solution Spaces
System engineering cannot be reduced to a simplistic dichotomy of problem and solution as it must solve three very different problems:
- Business ones, e.g how to assess insurance premiums or compute missile trajectory.
- Functional ones, how the system under consideration should help solving business problems.
- Operational ones, i.e how the system may achieve targeted functionalities for different users, within distributed locations, under economic constraints on performances and resources.