@vesuvius: A few months ago we started a project where the project manager told the customer that he wasn't going to devote a single development hour to the project until the information gathering, business analysis, and other planning was all complete. This was something very new for our organization. After much wailing and gnashing of teeth the customer relented, and they did 4 months of business analysis, gathering specs and all of the stuff you wish you could do all the time. When the development package was handed off to the developers, we were in awe. It was a complete departure from previous projects. So far it's been quite fun. We never have to ask questions, it's all in the documents. Plus, it looks like we're beating our time estimates.
That's awesome.Can't even imagine project that runs with no change in specification at all. (Let alone those changes which requires throwing away fundamential assumption and introduce all the bugs hiding here and there in Business Logic Layer module that has no way to ever got fully covered by unit tests)
That's were schedules goes out of control.
And I don't want to blame PM for this. As in-house developers we don't have right to say "No" to changes as long as the users can show an actual business need there. Don't expect anyone above to side with you for resisting the change. They'll just say "if your application can't cover all business case, maybe they should just buy one of the "canned" software in the market and hire their expert to tweak it, and you have no use here".