There was a funny situation in my team recently. During the end-of-iteration demo there was a discussion about a new feature. The arguments in favor of a feature were mostly: it’s **cheap** and it **would** be…
Over the years I developed a natural resistance against implementation. It’s quite weird given that I do software for living, no? Here is my story:
Cheap? There are no cheap features.
Every feature means new lines of code. New lines mean more software that can have bugs. New lines mean more code to maintain. New user stories may also bring some organizational burden like tracking, testing, meetings, discussions, agreeing on details, etc.
Would? Adding features based on speculation is risky.
There is a fair chance that speculated feature is not that useful or doesn’t really appeal to the user. Well… this is something I will find out in future.
It’s better to wait for user’s feedback. It’s usually better to implement something very simple and consider it as a starting point for a discussion with a user.
I implement features only if I know they’re needed. Although it’s usually fun to write good software, I’m quite good at resisting implementation.
Finally, it’s wise to remember that it all depends on the software at hand. For example, some speculation is required when implementing spanking new killer-app that is about to win the market with brand new ideas.