Are Features The Enemy?

Mark Minasi is mad as hell, and he's not going to take it any more. In his online book The Software Conspiracy, he examines in great detail the paradox I struggled with yesterday-- new features are used to sell software, but they're also the primary reason that software spoils over time.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/10/are-features-the-enemy.html

I would have to say that Windows Vista is a perfect example of this. They rewrote most of the codebase and ended up with a marginally more useful but multiplicatively slower and more bloated OS.

Hey Now Jeff,
If features are the enemy they may make software spoil. I’ve enjoyed your last two posts.
Coding Horror Fan,
Catto

Feature creep is the only valid argument for a subscription model that I’ve heard so far. $30 for a product version that gets new features every other year, or $5 a year for a product that retains its feature set but becomes more refined and stable.

It would have to be less as you aren’t developing the new features and some people will always avoid upgrading with the existing system… So people that upgrade every time actually get a better deal, and everyone benefits from better software (in theory, but debatable).

The problem is that unless the software has all of the features that you need to do your job, you will have to be constantly jumping between software packages to get you job done, and that means less productivity.

One of the problems with features that are added to software, is that the developers try to make it obvious that there are new features. This means more menus, more tool bars and buttons.

Instead, they need to ask themselves, if a new feature is indeed called for, what can we do to make it as unobtrusive as possible without making it hard to find. Obviously, the actual execution of that is going to be different depending on what kind of functionality is in question.

Of course, that only addresses features that make it into the software. I think that the development process in place should make it difficult to put features into the system. Not impossible, but just structured in a way that makes sure that features are vetted for relevance and other criteria.

That’s why one of my favorite developer programs is pixie. nattyware.com/pixie.html

It’s an 8kb executable that requires no install. It does one thing very well and isn’t bloated with useless features.

I bought a laptop recently that had Vista pre-loaded. This was my first experience with the new Microsoft OS. After running into so many jams designed to protect users from themselves, I’ve systematically disabled feature after feature in order to return to a windows-xp-esque operating system.

While I’m on the subject… who in their right mind needs a useless inbuilt game where you have to design cakes? As I mentioned yesterday in the last post about plugins being utilised to fulfill feature requirements - windows could be the BIGGEST beneficiary of this model.

Please, no ‘switch to linux’ replies… it’s primarily used as a .NET development machine.

The current commercial software model is doomed.
The problem with software is that it doesn’t get old and break down, so the only reason to buy new software is if it’s better at doing a task than previous software.

Eventually a piece of software will reach a point where it has all the features and is stable enough that it is optimal for it’s task. At this point it is impossible to sell a user a new version because there is no reason to upgrade. So companies start making up new useless features so they can continue to sell the existing code base.

Microsoft is having this trouble currently. Windows 95 was buggy so people upgraded to window 98. Windows 98 was less buggy but still buggy, so people upgraded to XP. XP is very stable, and that’s basically all people want from their operating system so Microsoft is having a hard time selling Vista. They have buddle a whole lot of extra stuff that isn’t related to being an operating system: webbrowser, media player, anti-malware detection, games, 3d wiz bang interfaces.

I don’t think this is simply a problem with the commercial software model. OSS, FreeWare and ShareWare are just as guilty of packing more and more features into an app until it becomes bloated, slow and complex. In fact that’s one of the biggest problems with the Linux distros: they come with many versions of the same kind of app (browsers, editors, mail programs, etc.)

I think we - the developers - are mostly at fault. We like to add new cool features more than we like to fix bugs or remove older unnecessary features.

Bill Gates is lying or at least his minions are not following what he preaches… If you check out the comments from some MS tech support guys in this thread in reaction to users of Visual Studio 2005 complaining about various bugs in the software…

http://www.microsoftweblog.com/2005/11/05/problems-with-visual-studio-2005/

… some of them actually suggest (towards the latter part of the thread) installing and using Visual Studio 2008 as it fixes bugs, delivers much improved performance, etc., compared to VS 2005. They don’t seem to realize that VS 2008 is still in Beta and will probably have bugs of its own when released.

How can developers produce bug free code if they are not given the time to master the tools they use? IMO, development tools should be given enough time to mature before being superseded yet again by a new version every 2 to 3 years.

I can understand why new features are continuously added. If companies didn’t add new features then their income would stop once their original product version saturated the market. I’m wondering if the only solution to the problem that can potentially keep everyone happy is something along the plug-in model. Develop the core features of a product along with a very robust and extensive plug-in model. Then you can develop all those “super cool” new features as plug-ins which customers can pick and choose “a la carte” style.

Also, I think a great analogy to the software problem you are describing is that of cable tv services. My cable company may advertise “over 200 channels!” (and they sure as hell charge me for all of them) but I probably watch less than 20 and probably only 5 of those get watched regularly. Unfortunately there’s no way for me to pick and pay for the channels I want. I think the first cable company to offer the ability to pick and choose channels and pay accordingly is going to steal some serious market share in areas where customers are lucky enough to have multiple cable companies to pick from.

One of the problems with features that are added to software, is that the developers try to make it obvious that there are new features. This means more menus, more tool bars and buttons.

But isn’t this unwanted feature visibility a direct consequence of the commercial model? You can’t sell features that your salespeople can’t demonstrate, that potential customers can’t see.

I completely agree.

In fact, I’m having a problem right now convincing the PHB to let us spend some time working out some of the horrible usability problems in one of our applications, rather than adding some extremely complicated new features that few people will use.

The biggest objection we’re facing is that changing the user interface will mean our current userbase will have to learn new habits. It’s a situation to which I’m not entirely insensitive, but the alternative to fixing up the glaring problems is to continue adding bells and whistles and hope nobody notices.

I guess it’s is a pretty common problem, and probably explains why a lot of commercial software appears to completely fail to fix obvious interface problems while constantly piling on sexy new features…

I don’t know if you’ve read 37Signals’ “Getting Real” … These guys are doing it right in that aspect, they keep their webapps as simple as possible, the feature list is reduced, but the experience is great. Your posts reminded me of a chapter in the book where they talk about adding new features and asking themselves “Is it absolutely necessary to add X feature?”

  • PS. My english isn’t perfect, sorry

The WinAmp upgrade was actually useful for me. I had a problem with the media library window disappearing after watching a video. I could only fix this by either switching to the classic skin (which leaves a TON of open space between the main window, playlist, etc. and the media library) or by reinstalling. I have had no problems whatsoever from the Bento skin, and the arrangement is a bit more suited to my needs, so in this case more features = doubleplusgood.

@Jeff “Sometimes, I wonder if the current commercial software model is doomed. The neverending feature treadmill it puts us on almost always results in extinction. Either the application eventually becomes so bloated and ineffective that smaller, nimbler competitors replace it, or the application slowly implodes under its own weight. In either case, nothing is truly fixed; the cycle starts anew.”

I think XP is in some ways proof to the contrary. For all of its bugs and services packs and patches over the years, it is still my primary development platform. I believe it was released just about 6 years ago, and it has reigned for a long time. Vista’s arrival came with really little fanfare and while I love my iMac and OSX, my bread and butter is developing on XP. It has been a fairly solid OS (at least for me) and definitely doesn’t suffer from a bloated feature list.

However, MS Office has repeatedly been upgraded over the years and, quite honestly, I can do just fine with Office 97. Heck, notepad is often sufficient for quick text documents.

Where I do like lots of features is in my development environment. I really like Visual Studio and it has a lot of nice features. The Refactoring options are really useful and provide me with functions I never thought I’d need, and now cannot live without.

Totally agree with Paint Shop Pro - it got slower and slower as the version number went up. I just started using Paint.Net on the PC and it is really pretty good.

In my opinion only those features which have been requested by a majority of the users have to be considered. In the case of Winamp - I have been waiting for a long time for inbuilt support for Album Art. Although the other features seem superficial, you have to remember that they do offer a Lite version of Winamp with minimal features. A good example of allowing the user base to dictate which features to add next is the a href=“http://www.s60.com/business/productinfo/wishlist/displayWishList.do” Symbian 60 Wishlist/a.

Users have that short list of features they want. The problem is that no two users have the same list. So to satisfy everyone (because everyone believes that their list is the list), you get bloat.

The solution IMO is to go the plug-in route - make the core software do the barest bones necessary (WinAmp needs to play music), and then extend via plug-ins. Want album art? Then add that part. Don’t want MP3 surround sound? Then skip it.

If it’s built well enough, you can still have all the bullet points without the bloat.

(BTW, album art is pretty cool, on the iTunePod at least - it’s turning my pile of music back into the CDs I remember them being)

“the market seems to work properly when faced with buggy software”

Oh, REALLY!

“Sometimes, I wonder if the current commercial software model is doomed.”

DUH! Is that obvious, already?

Paulo: I read the “Getting Real” book myself, two days ago. Should be a must-have for any developer, and especially for any manager in the field.

That’s why I have always loved the Unix philosophy of little tools to do specific tasks