A few weeks ago I had an evening about 'Agile Programming'..
Basicly Agile Programming means to NOT think out the complete IT project in advance, but go with the flow instead. That means, when a change in the project is immenent, with Agile you can flexibly do just that: let the project change the way the environment expects!
The problem with large IT projects (which do not 'use' Agile) is that the client wants to know every detail in advance. This is due to the fact that the client wants to know what the IT project costs, and the IT-guys can't have to take to much risk by defining specs too loose.. Hence, if clients simply trusted IT-guys, they would choose the Agile project approach; when the project needs some changes, we redefine the project and all will end okay. Clients will be happy and the IT-guys will build just what the client wants.