Maxims like do the simplest thing that could possibly work do not necessarily lead to optimal solutions. Traditionally, requirements engineers think through the scenarios positive and negative and organize them into a complete structure before design and coding can begin. Flexibility is restored by looking over the code and redesigning it so that it achieves its aims as simply as possible. Such refactored code does each thing once and once only. The approach is interesting but controversial, especially for larger systems.
Continuous testing is a key feature.
As soon as a developer defines a functional test, he or she adds it to the project test kit and runs it at the end of each day s work. Clearly, this prevents many problems from arising and detects others early. Designing and coding are similarly unconventional. Essays on Software Engineering . Bothered by the software development crises of the 1960s and 70s, Brooks suggested that systems be built by as few minds as possible and that each team be headed by two expert programmers, a surgeon and a copilot, each cognizant of all of the design and all of the code.