Reading Predictably Irrational by Dan Ariely, I came across this passage:
“One of my friends spent three months selecting a digital camera from two nearly identical models. When he finally made his selection, I asked him how many photo opportunities he had missed, how much of his valuable time he had spent making the selection, and how much he would have paid to have digital pictures of his family and friends documenting the last three months. More than the price of the camera, he said. Has something like this ever happened to you?”
Yes, it has. Not so much in the context of buying a digital camera, but very often in the process of choosing an implementation strategy for particular problem. I get caught up in examining all the possible ways of doing something, and spend hours making notes and lists and diagrams weighing the pros and cons of each. Meanwhile, the problem remains unsolved and I don’t get any closer to solving it. I am not paying attention to what Professor Ariely labels the consequences of not deciding. In point of fact, almost any approach that I consider could be made to work, and none of them is going to be a silver bullet that makes everything else easy. This also leads to a lot of anxiety. What if I choose wrong? How much time will I have wasted?
This is where having a strong interest in new and developing technologies is a liability more than an asset. I start thinking about how I could use the latest cool thing that I just read about on the blog. On the one hand, I’m not one of those programmers who limits himself to a single tool, e.g. Java, and tries to fit everything into that model. On the other hand, my obsession with finding the right tool for the job often leads me in some very unproductive directions. Limitations, in other words, can be useful.
I expect this was less of a problem 5 or 10 years ago. There just weren’t as many options. If you were storing data, you are almost certainly going to use a relational database. If you were building a web app, you were very likely using an embedded scripting language, PHP/JSP/ASP. But today we have half a dozen languages, a dozen or more frameworks, several non-relational database models, and hundreds of different deployment configurations. The truth is, none of these are going to make or break a project. It’s kind of an arbitrary choice, you just pick one and then you figure out how to make it work. Almost any project ends up being cobbled together from different sources. It’s all very postmodern.