The biggest problem I see that has plagued software design and the neverending quest for features as a means of recruiting users is...
Large, monolithic do-it-all programs.
Users too often have no choice over what functionality they can acquire or reject. If they want one feature, then in order to acquire it they are often required to accept numerous other features they don't need and maybe don't even want (because it makes the software more complex).
Whether intentional or not, UNIX design addressed this problem by separating functions into small, discrete, and often trivial programs.
But there is still a very strong general idea among developers that to acquire one thing, you must accept everything. It's an interesting psychology. This goes beyond features in programs and applies even more generally to how working materials (code, docs, etc.) are made available. Packaging eveything together is good when you want everything and do not want to have to acquire each part and assemble them yourself. But it can be counterproductive when you want only one or a few parts and not everything.
Examples of this are everywhere.
Frameworks. Combined source trees. Huge tarballs of many disparate programs form various sources packaged as a "system".
It is possible to separate the parts but not always easy. There is often an implied expectation that you will not try to separate them. This type of kitchen sink packaging often makes extra work for anyone wanting to just obtain one part and not the whole enchilada.
One of my favorite examples is multi-GB Microsoft downloads in order to obtain a few commandline utilities of several KB, e.g., WAIK.
I have seen one person attempt to solve this by mounting the ISO over HTTP and then extracting the desired given KB-sized program. This is slightly less than "convenient".
When things are packaged this way, it can make the job of tackling complexity just a wee bit more challenging.
I'd also like to add: way too many people think they're good at UX. I know enough about it to know I'm mediocre at it.
It takes a tremendous amount of experience/skill to get a ux for something that has any amount of complexity to be easy to use.
Same problem with design/creative. Lots of people think they're good at it. Once you learn a little you'll find out that you don't know anything and you're pretty bad.
Large, monolithic do-it-all programs.
Users too often have no choice over what functionality they can acquire or reject. If they want one feature, then in order to acquire it they are often required to accept numerous other features they don't need and maybe don't even want (because it makes the software more complex).
Whether intentional or not, UNIX design addressed this problem by separating functions into small, discrete, and often trivial programs.
But there is still a very strong general idea among developers that to acquire one thing, you must accept everything. It's an interesting psychology. This goes beyond features in programs and applies even more generally to how working materials (code, docs, etc.) are made available. Packaging eveything together is good when you want everything and do not want to have to acquire each part and assemble them yourself. But it can be counterproductive when you want only one or a few parts and not everything.
Examples of this are everywhere.
Frameworks. Combined source trees. Huge tarballs of many disparate programs form various sources packaged as a "system".
It is possible to separate the parts but not always easy. There is often an implied expectation that you will not try to separate them. This type of kitchen sink packaging often makes extra work for anyone wanting to just obtain one part and not the whole enchilada.
One of my favorite examples is multi-GB Microsoft downloads in order to obtain a few commandline utilities of several KB, e.g., WAIK.
I have seen one person attempt to solve this by mounting the ISO over HTTP and then extracting the desired given KB-sized program. This is slightly less than "convenient".
When things are packaged this way, it can make the job of tackling complexity just a wee bit more challenging.