Working for a Timing Interval Analyzer Instrument manufacturer, the decision was made to integrate our instrument into a large scale, high speed, integrated circuit tester. The tester manufacturer used a proprietary applications programming language that our instrument would need to support in order to be included in the tester.
Working from a software specification with another engineer I performed a full object oriented analysis on the specification and arrived at a preliminary framework for our design. We were using an iterative design approach akin to the Agile Development Methodology so I created our first software prototype soon after the design phase was started. As we progressed on the design document, which was a fully object oriented design, I/we continued to add to our prototype and use the findings from our prototype object system to further refine our design. The end product of the design phase was a complete Design Document, including a full set of object oriented class, object, interaction, and use case diagrams.
When the design was complete we had our customer sign off on both the document and prototype implementation.
With the degree of up-front work already completed, the implementation of the software went very smoothly. I adhered to the iterative philosophy and staggered implementation and test phases throughout the implementation phase. When the software was complete a full test suite was also in place and I was confident that our software would meet the customer's requirement.
When the final package was delivered to the customer for final acceptance, a total of 6 bugs were uncovered. These bugs were trivial and all six took less that 20 hours to fix.