
Even the most well-intentioned people are often made liars simply because it is so difficult to accurately estimate software projects. Most developers are not conscious of this and are instead unknowingly lying to themselves, thinking they can foretell the future despite what their experience tells them.
No one can fully and perfectly specify a non-trivial system up front to any degree of accuracy. It is impossible to know exactly how much time a project or component is going to take and it is equally impossible to know exactly what the end product will be. Software developers cannot predict the future any better than you or I.
Much of this is due to the changing nature of software requirements, the needs of the customer, and the uncertainty that developers have before a project begins, not knowing how quickly they will be able to work within the framework of the project, etc.
We know this, we have worked on painful projects, been a part of the guessing game of spec documents. We have been there and now - like us - more and more developers and project managers are realizing that the old methods don't make sense.
1,2,3 - Chaos research by The Standish Group (1994-2004), The landmark study of IT project failure (http://www.standishgroup.com/chaos_resources/)
...creates working software quickly and allows rapid response to change.
...is feature-driven and is done in collaboration with the customer.
...emphasize interactions and continuous improvement of products, people, and processes.
Agile teams are made up of generalizing specialists working together to finish the goals of the project.