I finally watched Al Gore's documentary An Inconvenient Truth. Apart from the remarkable case put forward about the state of our planet, there was one tiny bit which caught my attention. Al Gore mentions two formulae in his presentation.
- Old Habits + Old Technology = Predictable Outcomes
- Old Habits + New Technology = Drastically Altered Consequences
Note: I may have got the wording a bit wrong but the essence is the same.
On the same weekend I was reading Jimmy Nilsson's book Applying Domain Driven Design and Patterns (which is an excellent read, by the way). In the opening part of the book Jimmy describes what he has tried previously in his attempts to achieve good object oriented designs. By his own admission, he was not very successful. I'll put my neck on the line and say that the problem was a case of formula 2 (but it's not the first time I've been wrong :-))
I see formula 2 playing out often. A new technology emerges and we want to push the boundaries but our mindset is still a step behind. We use old habits with something new, miss the target, and sometimes create a mess of consequences which was never expected. I am certainly not innocent in this, either. To make matters worse, we sometimes use the "drastically altered consequences" to prematurely judge the new technology. The problem is not necessarily the technology, it is more likely that we used the new technology with a perspective of old habits. (Aside: Maybe formula 2 is also one reason for misuse of technologies.)
On the hand, I think formula 1 is the reason that we have legacy code and tried and tested technologies. The comfort and safety of old habits working with old technology makes a lot of sense. I still come across high quality Visual Basic 6 or Delphi applications written by highly productive teams that are not just in maintenance, but are actively being developed with new enhancements, etc.
In order to make a difference, we need to change our thinking which forces us to consciously alter our habits. It is only when we shift perspectives and behaviors will we be able to grasp a new technology or technique and make progress with minimal side-effects. The next time I am up against something new, I need to make a conscious effort to drop preconceptions and habits and make some adjustments.
There are some classic cases of formula 2 that I come across in many projects and teams. Here's my top two.
- Relational/Set Oriented Thinking + Object Oriented Language = High Maintenance Consequences
- Stateful Client + Stateless HTTP = Low Scalability Consequences
What else have you come across?