Betty said:
Where is the part where you find out what the program is supposed to do?
You review the features, as they grow, with Someone who has the full-time
job of researching what the program is supposed to do.
If you can't get that Someone, then, gosh, you might not have the charter
for a healthy project.
If that Someone tells you a feature is now finished, you don't argue.
And you never do too much before reviewing the feature, so you never need to
backtrack too far.
That Someone will request features in order of business value, so you can
deploy a release to real users as early as possible. This also helps prevent
rework.
Daniel said:
This (
http://www.fastcompany.com/online/06/writestuff.html) is an
interesting article about a methodology for software development that
gives a completely different perspective and makes an interesting point
about bugs in the software vs. bugs in the process.
Then the article ends with this:
"The most important things the shuttle group does -- carefully planning the
software in advance, writing no code until the design is complete, making no
changes without supporting blueprints, keeping a completely accurate record
of the code -- are not expensive. The process isn't even rocket science. Its
standard practice in almost every engineering discipline except software
engineering."
Those things are important for all software development, but the author
misses some major points. Aerospace software has a long legacy of
incremental development. No such software has _ever_ been _completely_
planned in advance. The developers write lots of code _before_ carefully
planning the next design change.
Such development invests in infrastructure that makes the software as safe
as possible to change.
What's totally remarkable is these techniques (specifically, the test-first,
pair programming, and continuous integration) can scale _down_ from
aerospace software development, to the speed of ordinary business
development.