I think it was in the book Made to Stick where they proposed the idea that given too many choices we tend to make poor decisions. And “too many” can be as few as three. As a software developer that has to constantly make tiny, little or major decisions I tend to agree with that idea.
In the recent years the number of available languages, libraries and frameworks increased rapidly in such a way that we might get overwhelmed by the choices before we even get started.
One might go so far as to suggest that too much knowledge is harmful. If I only knew C and Python I have to choose between the two. The decision would be easy depending on what I wanted to build. To build a driver for a piece of hardware C would be the choice. If I had to create a web application Python would be more appropriate. But what if I knew C, C++, Python, Ruby, Java and C#? Python and Ruby are too similar, same with Java and C#. In fact they are so similar that making a decision by carefully evaluating pros and cons seems impossible. Instead its made by personal preference and gut instinct and what your team mates know.
Having made the first major decision, we get overwhelmed by another hundred smaller decisions.
Five command line parsers, seven XML parsers, four different ORM, three GUI frameworks and so forth. At the end of the day we’ve spent hours of evaluating different options. If given only one or two choices we might have finished our little application already.
Don’t get me wrong. I am not saying that having a choice is something bad. What I am saying is that there is a limit on how many choices are good. And that there have to be major differences for the options to be worthwhile (C vs Python instead of Python vs Ruby).
Ever looked at the Linux Distribution Timeline? It certainly makes sense to have a choice between rolling release and a standard release distribution. Or a bare distribution which includes no software vs. a fully pre-configured distribution. But having a hundred different distributions is mind-bogglingly crazy and without reason.
As software developers we probably have to start to resist the urge to build our own stuff. Instead we have to improve existing solutions. Oddly enough, this whole issue seems to more relevant to products that are freely available (and probably cars). Elsewhere the market seems to be a limiting factor.