In theory, it should be relatively trivial to follow a rule like this:
Keep it simple, stupid.
In practice, external simplicity requires a large dose of discipline:
You need to be able to understand the problem you are trying to solve, and then come up with an elegant solution.
You need to be comfortable swapping internal complexity for external simplicity.
Essentially you're building an iceberg, where the vast majority of an iceberg (90%+) sits underwater, hidden from sight.
This is a great metaphor for building simple and usable products. It is necessary to do a massive amount of unseen work to ensure that the users’ experience is exceptional.
For example, we can take the conceptual idea of “settings”. A lazy way to handle different ideas in regards to a product is to make everything optional for the user. Add an on/off switch, give them various settings to customize the usage, and so on. This is what B teams end up doing.
The problem is, most people don’t really give a shit about your product,they are using your product to do something else!
Nobody wants a to-do list app, but they do want to stay organized and get things done in a timely manner.
"People don’t want to buy a quarter-inch drill, they want a quarter-inch hole." Theodore Levitt
So let’s remember this, and create something that helps people solve their problems, and gets out of the way as much as possible.
So, speaking specifically about settings, when it makes sense, don’t give an option to the user.