Just read a few great insights in eXtreme Programming:
"Divide your development schedule into about a dozen iterations of 1 to 3 weeks in length. Keep the iteration length constant through out the project." This is not only a divide-and-conquer strategy but also great in managing risk.
"Don't schedule your programming tasks in advance. Instead have an iteration planning meeting at the beginning of each iteration to plan out what will be done. Just-in-time planning is an easy way to stay on top of changing user requirements." This is a wonderful insight about project management in the modern age as user requirements can change quite rapidly.
"It is also against the rules to look ahead and try to implement anything that it is not scheduled for this iteration. There will be plenty of time to implement that functionality when it becomes the most important story in the release plan." This is the famous "put first thing first" used in project management.
But what if you can't finish the planned task during the iteration? Here's the answer: "If it looks like you will not finish all of your tasks then call another iteration planning meeting, re-estimate, and remove some of the tasks." It takes integrity.
Last piece of advice: "Concentrate your effort on completing the most important tasks as chosen by your customer, instead of having several unfinished tasks chosen by the developers."