Greetings.
As we learn to design software, a recurring problem becomes clear.
The problem is this: To differentiate between valuable and not-valuable. Let me break it down now.
Everyone in product management is screaming at us to make the software easier to use. We are also tasked with it, it seems, cramming a shitload of features into a little bit of time.
Our friends, the penguins, think that we, therefore are employed to write features — and, so, at times, it seems to us.
But note: The users will not log-in to use features. You wouldn't, I wouldn't. No one would or will. The user will only log-in and keep logging-in to get value.
Question: What is value? Value, again, is the quest of the user to overcome those things which prevent him from achieving a specific, acute goal.
So: we, the software authors, must ask ourselves of every feature these three questions.
1. Who wants that?
2. What happens if they don't get it?
3. Why do they want it?
The answers to these questions are Litmus paper. Apply them, and their answer will tell you if the feature adds value or not.
There is not magic fairy dust that will turn a superfluous, useless, redundant or merely hard to use feature valuable once the user downloads the software. You the software author are in charge of making sure every feature is valuable.
If the features confuses or bores you when you design it, rest assured that it will bore the programmers, and will, then bore the user, and we're all going back to the breadline.
Someone has to make the feature valuable. It is not the programmer's job (the programmer's job is to make it work to the design). It is not the project manager's job. His or her job is to make sure it gets built and delivered on time and on budget. It is your job.
Every feature must be valuable. That means: The user must have a simple, straightforward, pressing need which impels him or her to show-up and use the feature.
This need is why they came. It is what the feature is about. Their attempt to get this need met will lead, at the end of the workflow, to success. If this need is complex and requires more than one feature, this need will, then, of necessity, propel the user into the next feature.
All of these workflows, taken together, will, over the course of the session, constitute a completed task.
Any feature, thus, which does not both advance the task and standalone (has value, by itself, on its own merits) is either superfluous, or incorrectly designed.
I close with one though: Look at the feature and ask yourself "Does it add value? Is it essential? Does it help the user complete their tasks?"
Answer truthfully.
If the answer is "no", write it again or throw it out.
It is not your responsibility to know all the answers, but it is your responsibility to know and ask the right questions, over and over, until it becomes second nature.
With apologies to David Mamet (original text)