Imagine being given a large project to complete and several months in which to do it. You've been given a vision of the finished project and little else. How do you make the best use of the time? How to you keep every member of your team engaged for the full duration? How do you measure your progress as the time slips past you?
Consider the ways in which iterative development can come to your rescue in this situation.
Productivity - When you want to write a system that needs great throughput, often you'll feed that system with some type of queue. As a task is finished, the next is pulled from the queue and work continues. No negotiation is requires, no prompting or polling. The next work item is is there and just waiting to be done. Many of the developers I've spoken with say they like working in a similar manner. Queue up the work so it's waiting for me to do it, and I can blow through the tasks at a much faster pace.
An iterative development process works in much the same way. While work is being done on the current iteration, any additional requirements ro issues are being queued up on a task list, prioritized and scheduled. An important point, here, is that it isn't the developer who's having to deal with finding the next task, negotiating with management about the length of time the task will require to complete or to hash out the specific requirements. When the current iteration finishes, the tasks for the next are ready to be undertaken by the developer. This means that several of the things that can steal time from those writing the code are eliminated. There will always be the need to converse with users about specifics or to aid in providing estimates on the amount of effort required for a task, however.
Organization - I've worked in environments where requirements or issues could be brought in at any time and justified an immediate change in priorities and focus. At the end of the day, much of your productivity goes down the drain as you take the time to switch contexts - unwind the task you're working on and dig into the one being presented. With an iterative process in place, most of these issues can be placed on the queue and scheduled for a later iteration. This forces an evaluation of how immediate a need really is and cuts down on context switches required which keeps the developer focused and productive.
Morale - No one like to feel they're spinning their wheels - making huge efforts with little progress to show for it. The simple act of setting an obtainable, short-term goal both helps all involved to feel that progress is begin made and also allows for the easy gathering of metrics that establish what point in the scope of the entire project has been attained.
Flexible Scheduling - There are almost always external factors such as outside vendors and the availability of resources that affect when certain parts of a project can be addressed. With an iterative approach, the impact of these factors can be mitigated, to a degree, by putting off these parts of the application until they can be addressed.