| There is a lot of advice here to do incremental rewrites, refactoring, unittesting, functional/system testing etc. Undoubtfuly it is all mature and correct advise. However, I feel it is all one-sided and I ought to provide some counter points: 1. The codebase in question may be well beyond the line where any sane person would touch it, seriously. 2. Individuals experienced with the codebase, its structure, implementation, technology stack might be not available (think cobol). 3. Refactoring or incremental rewrite is a process that has to be planned and managed s.t. current product/codebase structure. Oftencase it is this very structure, which demands the full rewrite -- because of it being too convoluted to allow refactoring to take place. 4. You might want to do a rewrite to refresh the tech. stack -- language, design, frameworks -- it is ok to do so. 5. You do not necessarily need to come with the same feature set. Both you and your customers might want to cut down unnecessary cruft. Technical debt usually starts to show its signs with losing flexibility w.r.t user request to change features. 6. Occasionaly you might come up with a separate, different product, with a different name and brand -- which might turn out to be even better! 7. You learn a lot in the process. |
Being part of team incremental rewrite, myself, I'd say that you're overestimating the cost of the incremental rewrite and underestimating the cost of the rewrite.
For your first 2 points especially, I'd argue if you can't even begin to incrementally rewrite a system, you're in no position to begin to plan a full rewrite.