One of the problems is that many people actually prefer complexity over simplicity for a variety of reasons: they wrote it, and it will be simplified over their dead bodies; or it needs all these features to satisfy all their lusers; or they want to show off how smart they are; or it's harder to reverse-engineer, ...
Everyone agrees with simplicity when stated in such general terms, but in practice, simplicity where?
Note that simplicity in one piece of software often leads to complexity in another. For example, a language with a minimal set of instructions may be considered "simple", but building software with it can be complex and unwieldy. A minimalist API may be elegant and concise, but lead to headaches when attempting to use it. Etc, etc.
I don't think there there is a good objective definition for simplicity, since a large component of what I'm getting at is subjective and context-dependent, and therefore involves "appropriateness". API design is different than app building is different than container building, etc. This is why good developers are so important.
Agreed. That was my point, that simplicity is subjective, so while people seem to agree that simplicity is desirable, they often disagree about where to simplify (which often comes with trade-offs).
It's less of a bullet and more of a main battle tank - without proper armament it won't defeat the target, but it does protect you and lets you drive through many obstacles like they weren't even there.
One of the problems is that many people actually prefer complexity over simplicity for a variety of reasons: they wrote it, and it will be simplified over their dead bodies; or it needs all these features to satisfy all their lusers; or they want to show off how smart they are; or it's harder to reverse-engineer, ...
Joel Spolsky (who otherwise talks a lot of sense) defends bloatware here: http://www.joelonsoftware.com/articles/fog0000000020.html