> Okay. This makes sense if the software is: > > 1) Designed by one institution. > 2) Designed almost entirely before deployment. > 3) Not designed to be worked on by users and > semi-trained developers. > > In other words --- proprietary software.
In my experience, it doesn't work well even in these cases. Investing a huge amount of effort designing in detail well in advance is nearly always a mistake, unless the requirements are fully understood and static... ie never. Mostly the requirements are unknown until the (possibly internal) customer has something. Nothing identifies requirements better than deployment. Particularly with large projects that have long development times, even if the requirements are well understood at the start, they will have changed by the time it is deployed. The biggest and most common mistake with software development is believing that it finishes. Software has a lifecycle, and development is like food; it is constantly required, otherwise the software dies. -- Donovan Baarda -- http://mail.python.org/mailman/listinfo/python-list