...begins with a single step.
Just recently, I was all set with a nice incremental development project plan. I knew where I was going (and it wasn't 1000 miles distant). I had a sweet set of initial steps that would add value to our work immediately. And I was capturing test results along the way, with test refinement... You know, the whole TDD thing.
Then I got... opposition! 'Why do we need to do all this testing?' 'What value does it have to test things we know are broken?' 'Why haven't we done requirements analysis? Design?'
I wrestled with my egotistical rudeness and, subduing it, suggested the usual TDD things... if the problem stops recurring, how do you know it's fixed? If you don't know how it's broken, how can you fix it anyway?
This was the same person who had totally bought in to an incremental approach. The resistance was absolutely not to the incremental approach - it was to the continuous testing! I was completely crestfallen and dumbfounded. You, you, you... you just have to do continuous testing! But can I explain why?
When you're taking one step and then another, it's tempting to think you're making progress. But as old campers will tell you - if you don't have a compass or other fixed reference while walking the forest, you'll go in circles. Feel familiar, software developers?
I'm a big fan of incremental iterative development (given an adequate architectural framework...) But making an incremental movement does not at all mean that you are progressing towards your goal. You must know where you were, and where you are. You have to understand why you got from there to here to you can get to the next there - and closer to your goal, by the way. In other words: you can't do incremental without tracking and testing.