The specification needs to be evaluated after being written, to ensure that the solution being specified is actually do-able, will actually work as intended, and will really serve the needs asked for. Often forgotten, this is where the computer program is designed before being coded. A good design ensures that all coding effort is being expended towards the product, not up any blind alleys. On-line help should also be designed in, and balanced with printed documentation. Coding needs to progress in an organized, managed fashion, so that progress can be checked against the schedule.
Every product needs to be tested thoroughly before release.
Testing is best done in parallel with the coding, testing each module or phase as it is completed. If possible, the product should be tested by engineers who have not been involved in writing the code. Think of testing as bug finding and fixing, and validation and the final check that you are getting what you asked for. A spreadsheet could pass testing with flying colors, but fail validation if the specification called for a word processor. We believe good documentation is clearly laid out by an experienced technical writer.