Ich hatte nicht viel Glück mit kleinen inkrementellen Änderungen, wenn der Code, den ich vererbe, wirklich schlecht ist. Theoretisch klingt der kleine inkrementelle Ansatz gut, aber in der Praxis endet nur eine bessere, aber immer noch schlecht entworfene Anwendung, von der jeder denkt, dass sie jetzt DEIN Design ist. Wenn die Dinge kaputt gehen, denken die Leute nicht mehr, dass es wegen des vorherigen Codes ist, es wird jetzt DEINE Schuld. Also würde ich nicht das Wort Redesign, Refactor oder irgendetwas anderes verwenden, das zu einem Managertyp bedeutet, dass Sie Sachen auf Ihre Weise ändern, es sei denn, ich würde es wirklich auf meine Art tun. Auch wenn Sie vielleicht Dutzende von Problemen behoben haben, werden alle Probleme, die noch bestanden (aber nicht entdeckt wurden), nun auf Ihre Nacharbeit zurückgeführt. Und seien Sie versichert, dass, wenn der Code schlecht ist, Ihre Fixes viel mehr Fehler aufdecken werden, die vorher einfach ignoriert wurden, weil der Code so schlecht war.
Wenn Sie wirklich wissen, wie man Software-Systeme entwickelt, würde ich ein Redesign des gesamten Systems tun. Wenn Sie nicht wirklich wissen, wie man gute Software entwickelt, dann würde ich sagen, dass Sie mit den kleinen inkrementellen Änderungen bleiben sollten, da Sie sonst mit einer Codebasis enden, die genauso schlecht ist wie das Original.
Ein Fehler, der oft beim Redesign gemacht wird, ist, dass Leute die ursprüngliche Codebasis ignorieren. Redesign muss jedoch nicht bedeuten, den alten Code vollständig zu ignorieren. Der alte Code musste immer noch tun, was Ihr neuer Code tun muss. In vielen Fällen befinden sich die Schritte, die Sie benötigen, bereits im alten Code. Copy and Paste und tweak wirken Wunder beim Redesign von Systemen. Ich habe festgestellt, dass das Redesign und Neuschreiben einer Anwendung und das Entnehmen von Ausschnitten aus dem ursprünglichen Code in vielen Fällen viel schneller und zuverlässiger ist als kleine inkrementelle Änderungen.
Fred Brooks sagte zu "bauen einen wegwerfen" - aber er verwendete keine agilen Techniken, und jede Funktionalität, die hinzugefügt wurde, wurde dokumentiert und verstanden, und so war es möglich, ohne Verlust neu zu schreiben. – 13ren
Nicht zu vergessen, dass es IMMER viel mehr Details gibt, die Sie implementieren müssen, an die Sie beim Skizzieren des großen Projekts nicht gedacht haben. –