A constant, in all the years that I have been working as a programmer, are planning errors. I am not referring only to the time estimates, but also to the designs that we make prior to programming. Once a state, class or collaboration diagram was designed to analyze how to solve a certain problem, when implementing said design we found that it was incomplete, or even wrong. We find details and cases not analyzed, which of course force you to change the design.
This not only happens in computing, it happens in any human discipline. We are so narcissistic that we come to believe that we have designed everything prior to its construction. We do not realize that we cannot foresee what we do not know, nor even calculate its risk. Marshal Helmuth Carl Bernard von Moltke coined the phrase: “No Plan, however good it may be, resists its first contact with the enemy, with reality”. It is a constant in any area that plans fail. Public works plans anywhere in the world are notorious for never meeting budget.
The great Antonio Escohotado warned us of the original reason for these failures: “The difference between simple and complicated is that simple belongs to the world of imagination, complicated belongs to the world of reality: they are different worlds.” Our mind is very limited: it is practically impossible to understand all aspects of the real world. We do not realize it, probably because of our own mental limitation.
However, it would be wrong to conclude that plans are not necessary. According to Dwight Eisenhower: “Plans are useless, but planning is everything”. The initial plans offer us a point of support on which to start the task. Without them we wouldn’t even know where to start. But we must always be attentive to the unexpected, because it can change everything.