Monthly Archives: May 2014

The High Value of Optionality

chess

When I was a kid, I absolutely couldn’t beat a computer opponent in chess matches.  I moved my pieces rather randomly, eventually I would make a mistake, the computer would take advantage, and eventually I would lose.  Several years ago, it was mentioned to me that the value of a piece on the chessboard is only as great as the number of spaces it has access to in the next move(s).  After hearing this simple advice and applying it, I discovered that I could easily beat the easier settings on the computer.  What had previously been an infallible opponent became a foolish adversary.  The computer’s conservative choices made my victory inevitable.  I was very impressed.

Many years ago, I read one of Isaac Asimov’s Foundation novels.  At the end of the story, the main character was faced with an impossibly complex decision that would determine the fate of the galaxy and the human race.  How could he make the right choice?  It turned out that one of the choices was reversible and one wasn’t.  The choice was obvious: he decided on the choice that was reversible!  I had a true epiphany.  When in life you are faced with difficult choices, chose the one that offers the most possible action in the future.

Nassim Taleb discussed this in his book: Antifragile.  He brought up the example of an ancient Greek man who purchased a reservation of all the olive presses in town.  It turned out that there was a bumper crop of olives that year.  Rather than attributing this man’s success, as Aristotle did, to his prediction of the weather, Taleb attributes it to his use of optionality.  In this case he paid money but in the cases of the chess match and the galaxy altering decision, no money was involved.  Taleb emphasizes the importance of looking for ways to increase your optionality in life as a method of gaining success in life.

Recently I saw a TED video that, in my interpretation, that the definition of intelligence is ability to increase optionality and freedom of action.

In software development, writing maintainable code is of paramount importance.  In addition to making sure that code is understandable, code must be easy to change.  Unfortunately, most developers (as human beings) guess incorrectly about what is going to happen in the future.  Their very efforts to prepare for the future make the code worse.  Inevitably, what actually happens differs from their expectations.  Ironically, I believe that in software development the way to maximize optionality is writing the best code possible for the problem at hand and not preparing in advance for a future that might not come.

 Premature optimization is the root of all evil – Donald Knuth

Promises and Estimates

oath

As I mentioned before, managers often use estimate negotiation to extract promises as a method of motivating their employees and giving them a personal stake in the results.  I came across an excellent article about the psychology and social impact of promises:  Why you should always under-promise and over-deliver.

In my experience, when estimating the duration of a project, you should do the following so that you will overestimate 50% of the time and underestimate 50% of the time:

  • Start with a reasonable estimate of how long you think it will take by breaking down the work into small components and estimating them individually
  • Add a generous contingency buffer to cover all the unexpected things that will come up (say 20% to 30%)
  • Quadruple it!