Build one to throw away vs Second-system effect
- by m3th0dman
One one hand there is an advice that says "Build one to throw away". Only after finishing a software system and seeing the end product we realize what went wrong in the design phase and understand how we should have really done it.
On the other hand there is the "second-system effect" which says that the second system of the same kind that is designed is usually worse than the first one; there are many features that did not fit in the first project and were pushed into the second version usually leading to overly complex and overly engineered.
Isn't here some contradiction between these principles? What is the correct view over the problems and where is the border between these two?
I believe that these "good practices" are were firstly promoted in the seminal book The Mythical Man-Month by Fred Brooks.
I know that some of these issues are solved by Agile methodologies, but deep down, the problem is still the principles still stand; for example we would not make important design changes 3 sprints before going live.