Everyone in the blogosphere, including here at codebetter seems to be down on Agile, TDD, Pair Programming et. al. Everyone argues the value it brings, the fact that implementing change or managing change becomes so much easier when you have the right methodology, processes and infrastructure in place. Automated builds, test driven development, the whole 9 yards.
So lets take a step back and see what we've really done, when comparing with standard methodologies such as RUP, all we really did here was, we have lowered the cost of change. But did we really lower the cost? Well turns out, not really - we merely redistributed the cost. Instead of a RUP model where most of your cost is loaded towards later phases, you simply put an upfront effort in building all that infrastructure ahead of time. Sure it is nice and beneficial to do have an automated build process, but didn't you put an upfront investment in making that work? So in Agile you have lowered the cost of change, but increased the cost of inception.
I'm not arguing that narrowing down every single detail down to a 400 page "requirements document" and tracking it with a huge MS Project plan with 30 minute task breadowns is the right answer. I'm just arguing that going too much on either end of the spectrum is a bad idea in the real world.