Originally posted by Gaurav Arora:
flexibility is never a bad thing
I'm not sure I agree with this.
Flexibility is good if it helps with current requirements, or genuinely likely future requirements. Flexibility is also good, if it can be achieved without additional complication.
Flexibility that is not needed now, and has only speculative use in the future, but which adds complication, is bad. It costs money to implement. It costs money to debug the extra complexity. It costs money to maintain the more-complex code.
An example of bad flexibility I've often encountered is over-generalisation. An interface that could have been simple has been made complex to understand and to implement, for the sake of generality for which there was no need at the time, and for which no need has arisen in the years afterwards.
Remember,
YAGNI.