I've learned enough about Agile Programming to know that it is not a work practice I would like. Then again, I program for fun and not profit, so I don't have a good position to argue from.
Agile does have good ideas though. This post from Pete Sergeant at WriteMoreTests.com does an excellent job framing the reasons behind some Agile techniques. The valuable bit for the layperson is that he shows how they are relevant to any kind of work that involves estimating tasks and projects, which is pretty much all time constrained work.
For example, why Fibonacci numbers (1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377...) are used to bucket time estimates for tasks and projects.
the more complex a task is, the less chance you have of accurately estimating it, and you should account for that. When torn between two numbers, go for the larger – you’ll usually be right.
The more complex the task or project, the less accurate your estimate can be. The Fibonacci sequence just helps to choose an appropriately large and inaccurate number.