Mit all den Kommentaren über das Überschätzen denke ich, dass eine bescheidene Menge an Punkten (auch Gelegenheit) verpasst wird.
Es geht nicht darum, die benötigte Zeit für die Änderung zu schätzen (nur) und dann einige hinzuzufügen, sondern darum, die Zeit zu schätzen, die erforderlich ist, um den Code zu ändern (Refactor!), Um ihn an einen Punkt zu bringen, an dem die Änderung sicher vorgenommen werden kann, und um dann die Änderung durchzuführen ändern (wahrscheinlich etwas zusammen geklebt). Ok, das ist das Gleiche ... aber es gibt keine Frage von Fudging oder Stretching oder Over-Estimating, es ist einfach eine Frage der Aussage, dass ich dazu zuerst das tun muss und dies ist, wie lange es dauern wird insgesamt. Entscheidend dabei ist, dass Sie an den Teilen des Systems arbeiten, von denen die Änderung abhängt, und nicht mehr - wenn es anderswo schrecklichen Code gibt ... hart, fangen Sie ihn auf, wenn Sie dort sind.
Um noch einmal auf die ursprüngliche Frage zurückzukommen: Nach vielen Jahren kommt es für mich darauf an, wenn Sie etwas implementieren, es sei denn, Sie wissen (nicht glauben, nicht erwarten (vermuten?), Nicht denken, aber wissen ), dass es zusätzliche Dinge gibt Auch erforderlich, dann sollten Sie tun, was Sie brauchen, um diese Anforderung umzusetzen, und nicht mehr so ordentlich und elegant wie möglich.
Wenn Sie die nächste Sache implementieren möchten - einige Zeit später -, müssen Sie die erforderlichen Schritte ausführen, um die Codebasis (und die Datenbank und was auch immer) in den Zustand zu versetzen, der für die Implementierung dieser Funktionalität erforderlich ist. Dieses Refactoring ist der Ort, an dem Sie sich mit dem Chaos befassen, das bei der Entwicklung eines Projekts auf natürliche Weise entsteht - und hoffentlich vermeiden, mehr Chaos zu verursachen (oder zumindest die Ebene konsistent zu halten).
Einer der Diskussionsbereiche hier ist "Technische Schulden" - es ist wie eine Überziehung, Sie müssen sie zurückzahlen und je länger Sie sie lassen, desto mehr Zinsen (in diesem Fall Zeit für die Korrektur) fallen an - was Ihnen einen Nutzen bringt Argument dafür, einen Teil Ihrer Zeit mit der Minimierung der technischen Schulden zu verbringen.
Dies ist auch der Punkt, an dem Unit-Tests und andere automatisierte Tests (wenn ich das so gut kann, wie ich es mit ziemlicher Sicherheit behaupten kann) in Kombination mit einem geeigneten Build-Server (der zumindest einige ausführen kann) eingeführt werden Ihrer Tests). Kombiniert mit diesen - aber von Wert für sich selbst - sind Muster wie Abhängigkeitsinjektion und Umkehrung der Kontrolle (nie ganz sicher, wie sehr diese beiden "gleich" sind), weil sie das Wechseln der Leitungen und damit den Umgang mit Veränderungen in der Leitung erleichtern Isolierung.
Schließlich - denken Sie daran, wenn es nicht kaputt ist, reparieren Sie es nicht. Reines Aufräumen des Codes zum Zweck des Aufräumens mag zufriedenstellend sein, aber es ist auch eine Gelegenheit, Fehler einzuführen. Es kann zwar schmerzhaft sein, wenn Sie es nicht ändern müssen und nicht darauf aufbauen, aber es ist möglicherweise besser, einige Klumpen zu hinterlassen Alleine - die Gelegenheit zum Reparieren oder Ersetzen wird sich irgendwann ändern!