Organic and evolutionary software design – a metaphor

A warning about metaphors

In the hunt for comprehension, we humans tend to use metaphors and abstractions as a natural cognitive mechanism; that is a way the most complex object in the entire universe—the object beneath a human skull—deals with complexity.

The important thing is to be aware of such natural mechanism; otherwise, we can become mentally blind walking in life sure we know something that actually we don’t know. Once understood this, the phrase “the devil is in the details” makes much more sense.

The following reading put across a more articulated message:

The five orders of ignorance
Phillip G. Armour
Communications of the ACM
Volume 43 , Issue 10 (October 2000)
Pages: 17 - 20
https://www.corvusintl.com/CACM002-5OI.htm

Also

https://c2.com/cgi/wiki?OrdersOfIgnorance

In Spanish: ¿A qué grado llega mi ignorancia?

Other common pitfall with metaphors is stretching them too much; we know we have gone too far when we start drawing conclusions for a particular situation based exclusively on the metaphor. For instance, “software development is like construction of buildings by civil engineers; ok then, software development is a full-fledge branch of engineering discipline and the development process can also be divided into white-collar and blue-collar workers groups”.

A metaphor about organic and evolutionary design

A software design process that starts with simple good and illustrative executables often is called prototyping; and those prototypes are not “the system” because they have not production-grade quality and they are dismissed once their experimental purpose is fulfilled. “The system” is not a prototype; “the system” is the whole enchilada, nothing less —as many say so.

There is a place for such technique called prototyping, eXtreme Programmers and professional developer designers practice it very often and they call it “spikes”; which is the same as running experiments and gather experimental information useful for design decisions.

On the other hand, there is a software design process that starts with simple but important executables which are not prototypes but “the system” itself —at a very early stage—and here goes the metaphor:

When we were at the age of 4, most likely we could not go and earn the money to pay the bills, nonetheless we were not “human prototypes” because we were a complete human being doing accordingly the age of 4, doing the most essential and most important things for that age.

So “the system” starts as an embryo, and grows with time; at the early stage of few weeks, it should be doing the most important things accordingly to its age, the most essential and most important things —and not just paperwork without executables.