I’m often engaged with clients helping them respond to Requests for Proposals (RFPs), and there are way too many bad RFPs out there.
These bad RFPs not only specify what the customer actually needs, they also specify that the customer can possibly think he will ever need. Typical requirements are that the user must be able to add extra attributes to all entities, or that the user can dynamically change which attributes are mandatory, or that the user can freely configure the order in which fields appear on the screen.
These are not real requirements. But because the customer isn’t sure there will be money to maintain the system, he specifies a system with enough flexibility to ensure that he will never have to speak to a programmer again.
Unfortunately, meeting these requirements takes complex and expensive code, and the customer ends up paying for a lot of flexibility he will never need. Specify only what you need.