Four months ago my car (a 1998 model) started giving me too many problems, so I decided it was time to sell it before it broke down completely (I sold it for pocket money, but it was more expensive just maintaining it). At the moment we were just before the Holidays here in Israel, which are 4 weeks of in and out vacations, so my wife and I decided to try and manage ourselves with only one car. And with 4 children to move around, and two full time working parents, this was a challenge. But time passed and we managed… kind of. Life was harder, we had to program in advance more things, but we were saving good money. But after a while the coordination effort became so heavy that we decided we should have a second car. But what should we buy? There are, of course, many options: buy a new small car, buy a used car from someone else, buy a used car from a reseller.
I was attacked by a typical case of Analysis Paralisys. Buying a new car is said to be a bad decision, because cars depreciate most in their first years. But on the other hand, a used car is more risky as you have no idea who was the previous owner, how he maintained it, etc. So I started my analysis.
I made a list of all the cars in my price range, went to all of the sellers and compared their features, talked to owners of these kinds of cars, thought which one to buy… and then a friend of mine (who is not a software developer) went and bough a used car from a reseller. It was a bigger and nicer car than the ones in my list, but used (3 years) with more than 60K kilometers on it. Maybe I should also check this option.. So I went to the car resellers, added them to the list, added more options. The search started to affect my daily thinking. The question was always in the back of my head, I was always asking people for their opinion. Typical case of Analysis Paralysis. And finally, last week I bough a car. The feeling was so good!
When making an important decision, we want to make the best decision possible. But the “best” decision is not an absolute thing. Take for example the problem above: you want to buy a car. a car has a number of properties from which you can create a function and give each car a final grade. You can build a table showing all options, their value, etc. You get the idea. The good things with cars is that the range of options is limited. If you have a budget (and most of us have) this table is not very long. But even here there are many options and as time goes by new cars come into the picture, and also used cars are made available. So in theory, this table is almost infinite. This is where I remember what my dad used to tell me: “There is no perfect decision. You make the best decision with the information you have”. So I took some steps to get out of my paralysis and make a decision:
- Set a budget for the price. Without a budget, there are simply too many options.
- Defined what are the minimum requirements. This also closes the possible options to choose from.
- Put a deadline to make the decision. This is probably the most important thing I did, since even after 1 and 2, the search can go on and on.
The story above happens all the time in software development. What framework/library should I choose from (and if you are using JavaScript, there are millions of options)? Should I make this an abstract class, and interface, or a singleton? Should I separate this behaviour in a new class? The number of decisions we have to take every day is huge, and if we sit down and analyse every one of them we would never get anywhere. But there are cases where you do want to make a deeper analysis, and analysis paralysis may strike you. In cases like this, I follow something similar to the above:
- Define the minimum requirements: what do you want the framework/library to do? How do you want the code to look after your changes? What behaviour should the software have after you finish? What is the performance you want to achieve?
- Put a deadline to the analysis: you can do performance analysis and improvements infinitely. You can also test a library for weeks/months. But you must make a decision.
And hopefully you will not be trapped in the analysis paralysis trap.