It is important that you understand that I strongly believe in opinionated software. I view this as a logical extension of the UNIX philosophy. The best software I’ve used has been produced by someone having strong vision and a confidence to so “no” to distracting features. Software agnosticism—trying to be all things to all users—is the long slide to gone.
But, don’t mistake my belief in opinionated software to mean that I like the opinions of all opinionated software.
For example, Git is very opinionated software, but I don’t care much for it. Git was created to solve a specific problem, and consequently Git values strong support for non-linear development, distributed development, efficient handling of large projects, and fast merging of patches from email. As it turns out, my source code management needs have almost zero overlap with those features so Git is not a good fit for my development workflow. I recognize that those features are important to many projects, but they aren’t for me. Git can be exception at what it does because it doesn’t compromise to try to meet my needs, too.
And here’s the best part: I don’t have to use Git. If it’s opinions don’t mesh with mine, we can agree to disagree and I can choose a tool better suited for my needs. Some commentators seem to miss this point. Opinionated software doesn’t preach “one true way”, it says “my way or the highway”—if my software doesn’t work for you, you’re free to find another solution that does work for you. (In the open source forums, this sentiment is echoed as “if you don’t like it, then fork it or build your own”.)