Back in the before times you shipped a product in a box, marketed the hell out of it, and hoped people bought it. What was in the box was it. There was never going to be more to it. If enough people liked it you might make a new version in a couple of years and try the same thing. If not, you moved on to some other idea, put that in a box, and tried to sell it. The cycle continued.
At the heart of this process was a thing called Milestone 0. Take a big chunk of the available time and dedicate it to planning. Not just figure out where you wanted to be or what the end result was, but detailed planning. What things to do. How long they would take. The order to do them in. Who would do them. When everything would be done. Good planners even accounted for vacation time.
The resulting plans were a marvel. Everything needed was accounted for. Nothing extra was scheduled. Nothing would need to be changed. The end result would be exactly what was expected at the beginning. It’s a wonderful idea. No wasted effort. No missteps. No rework. That’s what BDUF is all about. Being as efficient as possible
Of course, about the time the first line of code was written the plans were out of date. By the time the product shipped the difference between the plan and the actual was usually bigger than the plan itself. There was lots of wasted effort. Lots of missteps. Lots of rework. Because we didn’t know what we didn’t know. The only way to learn was by trying, and then we’d apply the lessons learned. By doing rework.
It turns out that trying to avoid rework without perfect knowledge isn’t a way to avoid rework, it’s a way to push your rework off to the future. To a time when it’s harder to do, costs more to do, and has far greater impact on things.
One of the best ways to do that is to take many much smaller steps. But that’s a topic for another time.