We managed to make our program work, but we found that the original design left something to be desired. We then had to add extra code and handlers for the things which we hadn't thought of when we started. This is all well and good, and usually results in working code as long as we think of everything which can happen and then handle it. It is perhaps looking at an approach where you do a lot more of the design and thinking "up front".

This makes creating the program much simpler, in that you will have done much of the design work before the code is written. Also, you are less likely to have things happen which you aren't prepared for. When we design the final program, Inspect your Morse, we will use a state based system to ensure that we are always in control.

In real life the design and evaluation processes are performed repeatedly, according to a schedule which is set out at the start of the project. This allows the program to be regularly reviewed and tested against the requirements of the customer.