Specifications are good, yes. But I disagree that they can (or should) never be changed. Customers typically don't know everything developers or technology can accomplish that they can exactly describe what they want, and developers rarely know enough of a customer's business process to explain how the final product will look and act. (There is plenty of ego on both sides that screw things up: customers think they know what the best technology to use is and developers think they can re-engineer a customer's business process.)
Both are (IMO) best served by a process marked by short iteration periods and involvement by all parties (customers, developers and mangers) at all stages. As tilly pointed out this is one of the fundamental tenets of XP. I'm only about halfway through the recent book Planning Extreme Programming, but it's done a good job so far of pointing out trouble areas and describing the discipline necessary on everyone's part to make an iterative process work.
The projects I've been involved with where we tried to figure out everything necessary for the entire project at the beginning never did well because nobody (including me) appreciated the power of change.