Some insights on the software development craft, from a philosophical viewpoint.
Ludwig von Mises — probably the greatest economist of the 20th century — describes in his book "Human Action", an extremely useful method, employed by economic science: the method of imaginary constructions. According to Mises, "an imaginary construction is a conceptual image of a sequence of events logically evolved from the elements of action employed in its formation. It is a product of deduction, ultimately derived from the fundamental category of action, the act of preferring and setting aside. In designing such an imaginary construction the economist is not concerned with the question of whether or not it depicts the conditions of reality which he wants to analyze."
Before we go about understanding this seemingly obscure definition, we should first understand what the term action means in this context, since this is the essential fact underlying every economic phenomenon. Human action is purposeful behavior, whose end is always the relief from a felt uneasiness. Acting man, through a rational effort, attempts to substitute a more satisfactory state of affairs for a less satisfactory one.
With the concept of action in mind it is easier to grasp the concept of imaginary constructions, using examples. Let's consider the state of rest. It refers to a hypothetical market in which no exchange will be performed at all, either because every uneasiness has been removed or because it is no longer possible to remove them.
Two special cases are distinguished: the plain state of rest, a momentary state attained when buyers and sellers do not agree on the prices or when the conditions are not favorable for trade; and the final state of rest, in which the market activities come to an irreversible halt, no action being performed any longer. The prices of products in this final state are called final prices. The plain state of rest is real and is reached again and again (possibly everyday) in every market, but in the next instant the conditions change and the market starts "working" again. The final state of rest, on the other hand, is only hypothetical.
The evenly rotating economy — another imaginary construction — is a "fictitious system in which the market prices of all goods and services coincide with the final prices." This construction is different from the final state of rest in that buyers and sellers are in perpetual activity, but the economic data do not change. Everything stays constant, from market prices to population figures. In this hypothetical world, any medium of exchange would be of no use, since there is no uncertainty about the future. Supply would equal demand and every human dissatisfaction would be automatically removed. There would not be preferring nor setting aside, i.e., there would be no action.
Several other constructions like these are employed by economics. But it is important to remember that imaginary constructions are useful only as a limiting concept. Every one of those concepts lacks some feature of the real economy. This difference allows us to compare the real world with the imaginary world to better understand the nature of the missing feature. For instance, the evenly rotating economy is very useful for the economist trying to understand the nature of money.
Therefore, it is a serious mistake to deal with these constructions as if they were real. Take an example given by Mises himself: "the socialist scheme is logically compatible with the unrealizable imaginary constructions of an evenly rotating economy and of a stationary economy". But the socialist scheme is not compatible with the real world of human action. Indeed, all the socialist projects for a new society are based on a gross economic fallacy. No socialist government in history was (and never will be) able to succeed.
The waterfallish processes are the software development counterparts of these economic fallacies. As in economics, we might make a mental experiment and produce an imaginary construction of a software development environment with some desired characteristics. I am not saying that this method is actually suitable to software development. Anyway, the logical consequences derived from this approach are of great importance to the present discussion.
Following the procedure adopted by economics, we need to choose the features of the real world that are missing in this imaginary world. For example, we could create a world in which there would be no uncertainties about the requirements, so that they could be completely, correctly and unambiguously gathered before writing a single line of code. The requirements, moreover, would stay constant over time (as well as the business circumstances that usually cause requirements changes). Additionally, in that imaginary world, every software activity (requirements, design, test etc) could be performed in isolation, at the point of being executed by different people at different times. In other words, the inherent coupling between all the activities would not exist.
By making some additional abstractions like these from the real world, we could arrive at an imaginary construction that would be logically compatible with every flavor of waterfallish process. But this logical compatibility is meaningful as long as it is treated as a mental tool for the understanding of some aspect of software development. Unfortunately, the champions of heavyweight processes often forget that this is just an imaginary construct and starts treating it as real. As a consequence, developers are told to follow a set of rules that comply only with an imaginary and unrealizable world. So, it is easy to see that their appeal to the logical consistency of their rules is deceiving. Logical consistency means nothing if detached from reality. This is the reason why all such processes fail miserably. In a sense, they are not much different from socialist regimes.
Labels: economics, fallacies, understanding