Wenn Ihnen Ihr Bauch sagt, dass Sie wahrscheinlich etwas überarbeiten sollten, ist es wahrscheinlich, dass Ihre Instinkte Ihnen etwas zu spät sagen, dass Sie etwas Wichtiges zu lange aufgeschoben haben.
Ich verstehe "Code-Gerüche", Rot-Grün-Refaktor und andere Gedanken, aber ich habe oft das Gefühl, dass der beste Zeitpunkt für die Refaktorisierung nicht das erste Mal ist, wenn Sie den Code schreiben, sondern das zweite oder dritte Mal, wenn Sie den Code verwenden und erkennen dass es sich tatsächlich um ein Problem handelt und tatsächlich verwendet wird.
Das Refactoring umfasst effektiv zwei Ebenen. Das erste Problem sind die offensichtlichen Probleme, die beim ersten Codieren auftreten. Dies sind die kleinen Optimierungen, die Sie im Vorfeld nur sehr wenig kosten. Halten Sie Ihre Methoden und Klassen klein und halten Sie sich an DRY und SRP. Dann haben Sie die zusätzliche Phase, in der Sie sich mit größeren Fehlern in Ihrem Design befassen müssen, die möglicherweise erst dann sofort sichtbar werden, wenn Ihr Code einige Kilometer darunter liegt. Es ist diese zweite Ebene, über die Sie sprechen, und um sicherzustellen, dass ein späteres Refactoring nicht zu kostspielig ist, müssen Sie Ihren Code bereits so geschrieben haben, dass der Aufwand, den Sie sich später vorstellen, einfacher und kostengünstiger wird. was bedeutet, dass eine frühe Umgestaltung durchgeführt wird.
Wie Jeff in seiner Antwort erwähnte, ist "Zeit Geld" , insbesondere in Unternehmen, in denen die Arbeitsbelastung hoch und die Risiken noch höher sind. Zeit, die im Vorfeld aufgewendet wurde, um sicherzustellen, dass der Code in seinem bestmöglichen Zustand ist, wird später Zeit gespart, wenn sich herausstellt, dass das, was ein einfaches Refactoring gewesen sein sollte, ein großer Vorgang ist.
Wenn Sie Software schreiben, wird jeder Moment, in dem Sie Ihren Code im Voraus verbessern, Zeit gespart, wenn Sie ihn wirklich brauchen. Je früher Sie umgestalten, desto deutlicher werden Ihre späteren Änderungen. Es ist wie eine Anzahlung in heutigen Dollars gegen zukünftige technische Schulden zu leisten, die morgen in aufgeblasenen Dollars sein werden.
In jedem Fall sollte Refactoring keine Aufgabe sein, die Sie bis zu einer mysteriösen Zukunft verschieben sollten, wenn die Software bereits vollständig und stabil ist, da dies Ihre Risiken später erhöht, wenn die Einsätze viel höher und das Produkt viel schwieriger zu ändern sind. Refactoring sollte ein Teil Ihrer täglichen Aktivitäten sein, und dies ist die Essenz der von Ihnen erwähnten Red-Green-Refactor-Philosophie.