I think "optimal number of features" is too simplified.
Many features don't require any user interaction or even knowledge, like passive error checks, and are easy to implement.
Some features can replace other features or even other entire systems, which would otherwise be much more work without the integration.
If I'm selling something on eBay, they do everything from communications to returns to payments to shipping calculations to keeping track of what I've bought and sold.
I sure wouldn't want to use some kind of modular thing where those were all separate parts.
Minimum effort spent on stuff nobody wants to do, minimum chance of mistakes, and minimum chance for getting into a state where you have to go back and redo earlier work is a more direct measure than just trying to avoid complexity.
That last one seems to be one of the usual very common points that make systems harder to use for people who aren't used to how software in general works, because it requires making the user define things as small pieces that the computer stacks up for you, rather than the real world process of stacking up stuff you wouldn't even think of as separate steps.
> And an increasing number of features inevitably begin to bog down what a company can do going forward
This is a common misconception.
It may happen to be true, but it does not have to be true.
What prevents rapid delivery is constraints, and naive, stupid or incompetent implementation (or requirements) for features that add more constraints.
Adding features in a way that aligns with existing constraints, or breaks existing constraints doesn’t have to be slow; just careful.
What kills software is “nothing can ever change once it’s in production”; ie. once a feature is live, it becomes a hard constraint that can never be altered or removed or changed because of user expectations.
It’s not the number of features; it’s the immobility and panic caused by the prospect of anything ever changing, which prevents you changing anything, except very very slowly.
The other issue with having so many features is that some of these features may become harder to discover, especially if users have to sift through congested user interfaces.
Joel Spolsky was in the business of selling versions of his software. A lot of businesses nowadays are selling subscriptions to saas software, and the sales dynamic is very different.
It's true that any app that lives long enough reaches an "optimum" version and then goes downhill from there. For Microsoft Word, for instance, the optimum, or "Elvis" version was "v5.1 for Mac".
I wonder if it is related to when the most competent team — often the one that created the product — leaves and is replaced by other people that can't maintain the same level of quality.
Aside the fact that more features means more time spent supporting them- is it actually true that too many features degrade the product because it becomes too complicated? I disagree.
A good interface organisation can hide the most complex features from most users. The lack of a feature might force users to use a different product; but if the software is confusing, or bloated, this is a problem with its how it's organised and the quality of its code, not with the number of features per se.
In my experience/opinion, most software companies don't spend the time/effort to properly integrate new features in a cohesive way that makes them "intuitively" discoverable while avoiding complicating what was already there. The product becomes degraded because no one spends the amount of effort needed to cleanly integrate a new feature which changes the model of how a person interacts with the software. Instead it's usually just tacked on, shoved in somewhere that it kinda fits. New button, menu item, toolbar tool, whatever. More stuff.
I disagree that more features require more maintenance. Not my experience at all. I maintaining very large scale C++ software and work 99% of my time on new features. Solid auto tests ensure that old features doesn't break.
i've come to believe Fopt and F2 are only different numbers when you're underinvested in design, or that you have positioned your incentive structure in opposition to HCI first principles
Well that all depends on how well the features are integrated.
Often times a new feature is similar from the API perspective to pre-existing ones.
If that's the case either integration is simple, or you need to refactor the underlying API (which means that when you eventually get around to implementing the feature it (and similar future features) will integrate cleanly).
yup - and because the number feature interactions is exponential with the number of features, things get much, much worse as the number of interacting features increases.
[+] [-] eternityforest|2 years ago|reply
Many features don't require any user interaction or even knowledge, like passive error checks, and are easy to implement.
Some features can replace other features or even other entire systems, which would otherwise be much more work without the integration.
If I'm selling something on eBay, they do everything from communications to returns to payments to shipping calculations to keeping track of what I've bought and sold.
I sure wouldn't want to use some kind of modular thing where those were all separate parts.
Minimum effort spent on stuff nobody wants to do, minimum chance of mistakes, and minimum chance for getting into a state where you have to go back and redo earlier work is a more direct measure than just trying to avoid complexity.
That last one seems to be one of the usual very common points that make systems harder to use for people who aren't used to how software in general works, because it requires making the user define things as small pieces that the computer stacks up for you, rather than the real world process of stacking up stuff you wouldn't even think of as separate steps.
[+] [-] wokwokwok|2 years ago|reply
This is a common misconception.
It may happen to be true, but it does not have to be true.
What prevents rapid delivery is constraints, and naive, stupid or incompetent implementation (or requirements) for features that add more constraints.
Adding features in a way that aligns with existing constraints, or breaks existing constraints doesn’t have to be slow; just careful.
What kills software is “nothing can ever change once it’s in production”; ie. once a feature is live, it becomes a hard constraint that can never be altered or removed or changed because of user expectations.
It’s not the number of features; it’s the immobility and panic caused by the prospect of anything ever changing, which prevents you changing anything, except very very slowly.
[+] [-] photon_collider|2 years ago|reply
[+] [-] sasham|2 years ago|reply
[+] [-] SoftTalker|2 years ago|reply
That's hard for a business to turn down.
[+] [-] eloisant|2 years ago|reply
[+] [-] eschneider|2 years ago|reply
[+] [-] giovannibonetti|2 years ago|reply
[+] [-] JeffSnazz|2 years ago|reply
[+] [-] bmacho|2 years ago|reply
[+] [-] eikenberry|2 years ago|reply
[+] [-] jareklupinski|2 years ago|reply
[+] [-] nicbou|2 years ago|reply
[+] [-] hoothin|2 years ago|reply
[+] [-] throw310822|2 years ago|reply
A good interface organisation can hide the most complex features from most users. The lack of a feature might force users to use a different product; but if the software is confusing, or bloated, this is a problem with its how it's organised and the quality of its code, not with the number of features per se.
[+] [-] amatecha|2 years ago|reply
[+] [-] bsdpufferfish|2 years ago|reply
[+] [-] x86x87|2 years ago|reply
[+] [-] deterministic|2 years ago|reply
[+] [-] ianand|2 years ago|reply
[+] [-] m463|2 years ago|reply
[+] [-] mvdtnz|2 years ago|reply
[+] [-] replygirl|2 years ago|reply
[+] [-] 11235813213455|2 years ago|reply
[+] [-] yarg|2 years ago|reply
Often times a new feature is similar from the API perspective to pre-existing ones.
If that's the case either integration is simple, or you need to refactor the underlying API (which means that when you eventually get around to implementing the feature it (and similar future features) will integrate cleanly).
[+] [-] drpixie|2 years ago|reply