What is the best method you have found for deciding whether or not to implement features into your software product?
EDIT: Can you recommend some reading material (online or book) for me on this topic?
What is the best method you have found for deciding whether or not to implement features into your software product?
EDIT: Can you recommend some reading material (online or book) for me on this topic?
Whether there is a client willing to pay for them, or make a purchasing decision based on them.
It's amazing how much sorter this list is than the list of what the developers wish to include...
In scenarios where a feature can be broken down into multiple "featurettes" it can be beneficial to test the waters by delivering an initial level of functionality, building upon it to the full original feature over time.
This can help the business by getting the users to lead them in the direction that suits them most.
This approach is most workable if your product is a website or a bespoke software product written directly for a client.
Look at any of the various agile methodologies and see how they put the customer in control of deciding which features to implement. View it as a cooperative process between developers and customers to meet the customer's goals. Ultimately the customer has to decide what is most important, though developers also need to sometimes explain why to get Feature X that the customer wants, we must have Feature Y and Z first. Use rapid, iterative feedback to discover the actual features that the customer really wants. When she has a chance to actually use the product early, you get much better answers as to what is really needed.
Pick up Jim Highsmith's Agile Software Development Eco-Systems for a good overview of various agile methodologies. In particular, look at chapter 5, "Deliver Something Useful", for a discussion on how to get the customer involved. Perhaps your local library can get you a copy to preview.
Just to expand on dommer's answer, the "customer" -- he person for whom the software is argeted, the audience -- is he only one that can decide. If there is no audience, like a new speculative product, then find someone who can play audience. Unless the target audience is programmers, make sure it's not a programmer, and in any case, at all costs don't give that job to one of the developers on the project. (For details why, read The Inmates are Running the Asylum by Alan Cooper.)
Then define your feature list by expansion and contractions: expand by generating all the crazy ideas you can think of, by brainstorming or similar. Have the customer or surrogate customer define which once are nicest to have, that is prioritize them. Find the minimal useful system and build that, and then expand and contract again because both you and the customer will know more about the problem.
You need to start from the top and work down.