As mentioned above, traditional software development delays testing until the very end of the development life cycle. This is because in the Waterfall methodology, each project phase must wait for the previous phase to be completed before it may begin. As such, the testing and integration phase could only be initiated following the system design and implementation phases, where development work has already been completed.
This rigid development model is clearly structured and relatively easy to manage. However, there are also several drawbacks. When project requirements experience unexpected change, or when tests reveal inherent problems in early conceptual stages, adapting to account for these issues can be nearly impossible. Simply put, when testing is delayed until after development, addressing changes and software bugs becomes difficult and costly, and can hamper a team's ability to meet their deadlines. Often, they end up facing an unhappy choice: delay the release until every issue can be resolved or release a sub-par product — it's a lose-lose situation.