In defense of feature-lacking software
Posted by Jason Baker on May 24, 2009
Let it be known from this point forward that if I produce a piece of software, and the only complaint against that piece of software is that it lacks functionality, I will consider that complaint a badge of honor. I’m going to give some examples to help demonstrate why this is.
Please bear in mind that the examples in this post are personal opinion. You are welcome to disagree with me. In fact, I don’t necessarily agree with myself 100%. There are valid reasons to choose all of the products I mention.
- Google Chrome vs Firefox: I have yet to see a review of Chrome 2.0 that wasn’t titled something like “Google Chrome 2: lightning fast, but lacking features.” In that same light, anytime Chrome is brought up on reddit/Hacker News/Ars Technica, there is invariably several users whose comment is along the lines of “Boy, that Google Chrome sure is nice. If only it had <insert Firefox addon here>.” Interestingly enough, Firefox’s main selling point against IE was at one time “IE is way more bloated than Firefox.”
- iPod vs Creative Zen: Perhaps this comparison is a bit dated, but there are similar comparisons between the iPhone and various other phones. At any rate, most of us have run into an Apple anti-zealot at one time or another. Most of the time they will advocate a player like the Creative Zen (or maybe the Zune). Their arguments against the iPod usually revolve around what it can’t do compared to what their media player of choice can do. They seem to wonder why so many people find the iPod “easier to use.”
- Python vs Haskell: Again, most of the arguments I see against Python by the Haskell community (and various other functional programming communities) seem focused on features it lacks. Usually, these complaints are about lack of tail-call optimization or compile-time type checking or side-effect prevention. I still don’t understand Haskell.
What I hope you’re starting to pull from this analysis is that all features are tradeoffs. Each and every feature you add to a piece of software is another block of code to maintain. And as any experienced software developer will tell you, features are easy to add. They’re exponentially more difficult to remove.
So what’s the solution to featuritis? Well, if you learn one thing from this blog post, make it this: In technology, simplicity trumps all but necessity. Of course, therein lies another problem: what is simplicity? There’s not really any good answer to that question. However, I would advise going with whatever makes your product simplest to the person that will use it.
At any rate, unless you’re Microsoft or Google, I’d recommend abandoning the idea of an “all singing, all dancing” product. Chances are, it won’t happen.