Jeff at Coding Horror has a great topic this week: Why does software spoil?:
In the software industry, the release of newer, better versions is part of the natural order. It’s a relentless march towards perfection that started with the first personal computers, and continues today. We expect software to get larger and more sophisticated over time, to track with the hardware improvements that Moore’s law has provided us for so many years. Rapid evolution is a good thing, and it’s one reason the computer industry is so exciting to work in. If you don’t like the way things are today, just wait five years; everything will be different.
Jeff goes on to talk about software that really grows and gets bloated over time, using PaintShopPro as an example. The point is valid that for a lot of software, the early (older) versions worked just fine and many users would be just fine without upgrades. (In fact, many people resist upgrades and actively pursue older versions from dedicated internet sites.)
In his list of applications (and the referenced PC World article), I was surprised that Yahoo! Messenger wasn’t listed. Each time we released a significant upgrade, there was always feedback (usually quite vocal) about how the client had become bigger, slower to download, and more sluggish.
Whether you’re trying to gain new customers and market share, or just trying to keep the ones you have, almost all commercial software suffers from the feature creep syndrome. What I’d like to know is: if you’re a developer in that position, can you ever remove features? Could you create a “feature in, feature out” mindset where for every new thing that was added, something old was taken out?
Of course if you don’t have a solid understanding of which features your current customers are using, this could be a risky move. The old joke applies: “If you want to find out who’s using a feature, just remove it — they’ll let you know!” I suppose if you have done a good job instrumenting your software, you’d know which features are least popular.
I’m particularly interested in this because one the new mantras for software is to “Build Less” (37Signals). That’s great when you’re starting out, but is there a way to return to that philosophy after your software is old and bloated?