Some projects have very specific design briefs with tight deadlines. In this situation everything must be pinned down beforehand, and can be. Maybe I am talking about different types of projects that don't fall into the indie game development category.
It's possible to make a very specific design document initially, but in games programming technology is constantly changing and improving (so it's practically impossible to create a 99% specific design doc for a game).
John J - many projects have no "very complex technical features".
True.
And anyways all very complex features can be broken down into small uncomplex items.
Also true, but you can't simply say, for example, "I'm going to make a dynamically paging 3D tree rendering engine using a modular interface that features several levels of detail including automatically generated impostors and batch optimized meshes", and then instantly write out a locked-down design document specifying each and every aspect in full detail. There are so many things that may need to change as you encounter unforeseen problems, etc.
The only exception to this is the case when you're already fully experienced in every area of what you're about to create. In this case, you can use a locked-down design document.
Regardless of all this, my general point is that design and structuring before you start coding will save you later in dividends.
That's true, but my general point is simply that there are two cases where you can't lock down your design document:
1. When you're implementing or developing new or untested technology
2. When you're implementing a technology you're not completely familiar with