I have worked with a large international company in the past, and I was impressed by their software development approach. The development cycle is as follows:
The project tasks are divided in various stages. The project plan for each phase is further divided into 3 categories:
Must have
Should have
Nice to have
The Must-have's are requirements that must be met for this project phase. The Should-have's are requirements that should be completed for the project phase, but ok if not completed. It will slip to the Must-have's in the next phase. And the Nice-to-have's are features that are not essential for the project phase, and would progress to Should-have's in the next phase if the project slips.
If the project is going according to plan with time to spare, then items in the Must-have, Should-have and Nice-to-have categories will be promoted, ie., Must-have's add to the should-have's in the previous phase, and should-have's add to the must-have's, and so on...
This approach is what I believe a simplified XP (Extreme Programming) in practice. And it seems to be quite successful too.