"To implement the next step you are going to have to go back and dig up all that perfect code you have just finished writing..." "This sounds nice, but nothing has really changed - we have just shifted the problem from the coding to the design stage." Things have indeed changed. - If I spend 4 hours designing something and then have to throw it away due to realizing the next piece of functionality doesn't fit in with…
yeah but in practice you can't just design without at least writing test program to gather intelligence. I mean you can but it would be like living in a fiction world.
And even if it's an experimental problem or algorithm that's not well understood, and you have to write some test programs, it's still better to spend a day writing test programs and 4 hours doing a design (then throw it away if you encounter a problem with it), than spending 2 weeks actually writing the real code, with documentation, error handling, performance testing, and so on (then throw that away if you encounter a problem.)