I fear you halfway missed what I meant. I was not talking
about UML tools. I was saying that there are good reasons
to program in a way where you do not start with final
specs, and there are many cases where code is incrementally
rethought and redesigned as you go. In particular it is
not sufficient to say as a hard rule that people should
always have solid specs up front.
For two very different references showing that what I am
talking about is not just "do not plan" under different
words take a look at
Extreme Programming
and Rapid Development by
Steve McConnell. The
first is a specific methodology that uses incremental
planning and refactoring. The second is a survey of
best practices for producing software, chapter 7 in
particular contains comparisons of different lifecycle
planning techniques and the tradeoffs you make in
choosing them. Most of the options discussed
follow some variation on ready, fire, aim.
As for magic bullets. I disbelieve there is a magic
bullet. There are a lot of incremental improvements.
Put them together and you get order of magnitude
improvements, but anyone who is saying their technique
can solve all of your problems is selling something
you probably don't want to be buying...