The choice between up-front work and refactoring should be made case by case. There is always some up-front work and some refactoring. It is up to the software engineer to make the right trade-off, based on the following heuristics.
The choice comes down to selecting the method that implies the least risk. Good, experienced software engineers are able to make this choice. Instead of using the disparaging term "big design up front" (BDUF) we should be investigating how best to determine what is "just enough design for increments" (JEDI). This will enable us to make better-informed decisions. Maybe software engineering should look not only to other engineering disciplines for analogies and techniques, but also to the way risk and return on investment are analyzed in the financial world. |