While developers, QA people, and outside testers are distracting themselves with the known defects, the unknown ones still lurk. If the process above were rendered as a program function in C, most developers would have no problem in identifying the wasted cycles, and immediately would optimize out the unnecessary steps. The most important optimization by far is to eliminate defects as early as possible in the development process. However, it's a much better use of time to address problems while they're fresh in your mind, and before the problems become embedded in the program's source. That means subjecting the requirements, the functional specification, and the source itself to review, with the goal of eliminating defects before they start to waste cycles.
Many people equate defects with programming errors.
However, to paraphrase Gerald Weinberg, a program that has a lousy design but no programming errors is still a lousy program. The most important person in the program's design is the person who is going to use it. Make sure that the program follows the user's task, rather making the user follow the programmers' functions and procedures. Forestall the first wave of beta test reports in most betas, you'll get plenty of suggestions on how to improve the user interface or the feature set of the program by being highly conscious of the user during the design process, by reviewing functional specifications and prototypes carefully, and by performing usability testing on your product long before the beta ships. Programmers are sometimes resistant to participating in code review.