Time is precious, so it's natural to always be on the lookout for short-cuts. But certain short-cuts end up being anything but short, costing you far more later than if they had just been done up front. In other words, even if management promises "don't waste your time on it", you know that they'll come back to you and ask for it:
- Cross-browser web applications - they say "just worry about IE for now", only to want FireFox a year later.
- Refactoring your navigation - they're going to want a page referenced from multiple places.
- Scalability - They might say "just get it done now", but they'll want it to scale up.
- Changing any environmental value - they may let you assume some environmental value, like the hard-drive disk volume or some url, but you know it's going to eventually change.
- Turning static data into dynamic data - any hard-coded data (like entering a customer service phone number) is going to change.
- Changing relationships from one to many - you want to pass in a single scalar, but really the business rules require an array (or a one-to-many database relationship).
- Allowing client customizations and overrides -
- Some way of doing online help documentation -
I lose track of how many changes like these happen. It's best to just always be prepared for it. Even if the manager (or client) signs of on some waterfall doc, it won't matter, because without the change they'll feel "cheated" and resent the developer.
The kicker is that with the right starting framework, tools, and code-smell, many some of these changes take roughly the same amount of time to "do right" as to hack them (like cross-browser JS or using app.config values for literals like paths), especially when it comes to total cost of ownership.