for the last few years i've increasingly been of the conviction that a lot of the glitches i've seen in system development result from the corners we work ourselves into by not explicitly recognizing that software systems are evolutionary, and that they are never really done. i get criticism for that one, but i think that even a superficial examination of virtually any non-trivial system reveals a changing environment, which is frequently almost impossible to anticipate. the events of september 11 are a good example.
i find appeal in the algorithmic nature of development strategies such as those advanced in mcconnell's rad book and their explicit recognition of the dynamic nature of the process. i personally get criticized for not being a big fan of planning, if for no other reason than you rarely get users of whatever level to tell you what they want before they see something and tell you that ain't it. (as mcconnell says, build one recognizing that you're probably going to throw it away.) it's my opinion that most plans are worthless by the time they are codified, because they address where we've already been. kinda like that old dr commercial that had calvary facing tanks (and where are they now?). successful plans seem to me to have very broad stokes, with considerable flexibility for implementation details. few planners, of whatever nature, see things that way.