The Idea Dude


Monday, December 12, 2011

What do politicians and programmers have in common?

Not all politicians are evil, I do believe some really mean well. They look at the current government and all its limitations and shortcomings and are inspired to do better. They stand on their soap box and tell people they will reduce taxes, create jobs, offer free healthcare. All good stuff. Some even have a plan of how to do it, finding excess and surplus and build efficiencies.

The reality is once they are in office, all the aspirations are met with a wall of complexity built by many governments that have gone before. They are faced with rules, lack of infrastructure, fear, regulations and practicalities. Often they leave office several years later having met very little of their campaign promises. As tax payers we'd like to think they were incompetent, but how can that be when many of our leaders were respected and successful lawyers, businessmen, accountants before they were politicians. They were killed by the unpredictability that comes with complexity.

Programming is pretty much the same. Having been on both sides of the fence, programming and managing, there is very little I haven't seen. Yes, there is posturing, pet projects, politics even in software. The hardest thing to accept that in software, everything takes about 6x longer than anyone anticipates (that's 2 x pi for the geek-minded). Anyone, whether a manager or a programmer looking at a problem from the outside will say the infamous 5 word phrase, "How hard can it be?". We don't understand why putting a button on a screen may take a day. Alas it's the iceberg effect.

In software, 90% of the complexity is never seen by anyone except those toil into the night. That one little button could in fact pack a whole of functionality, making the implementer change the order of the workflow, create new database tables, dependencies and even unanticipated side-effects (we sometimes call bugs). Like a new car, software degrades from the day it is shipped. New specifications, customer demands, changes in scope, changes in the market make us do unspeakable things to an otherwise perfect and beautiful system until weeks, months and years later we look back and say, "What on earth was he thinking?"

The answer is of course, the programmer was only thinking as far as he could see and chances are if he saw any further, he would have built a behemoth that would never have shipped on time. Even as a seasoned software developer, I have on occasion looked over the shoulder of my peers and muttered underneath my breath, "How hard can this be?" only to realize a week later that while the feature is simple, the system complexity made the implementation speed totally unpredictable.