Коли ваші кишки говорять вам, що ви, ймовірно, повинні зробити якийсь рефакторинг, це, ймовірно, ваші інстинкти говорять вам трохи пізно, що ви занадто довго відкладаєте щось важливе.
Я розумію "запахи коду", червоно-зелений рефактор та інші думки, але часто я відчуваю, що найкращий час для рефактора - це не перший раз, коли ви пишете код, а вдруге чи третій раз, коли ви використовуєте код і реалізуєте що це насправді проблема і знаходиться у фактичному використанні.
Для рефакторингу ефективно два рівні. Перший - це очевидні проблеми, які виникають при першому коді. Це маленькі оптимізації, які коштують вам дуже мало, щоб зробити передній план. Такі речі, як збереження ваших методів та занять невеликими, а також дотримання DRY та SRP. Тоді у вас є додатковий етап вирішення основних недоліків у вашому дизайні, що може бути не відразу очевидним, поки ваш код не матиме кілька миль під ним. Про цей другий рівень ви говорите, і все ж для того, щоб пізніше рефакторинг не був надто затратним, вам потрібно було вже записати свій код таким чином, щоб зусилля, які ви згодом передбачаєте, зробити простішими та менш затратними, що означає провести раннє рефакторинг.
Як зазначив Джефф у своїй відповіді, "час - це гроші" , особливо в компаніях, де навантаження велика, а ризики - навіть вищі. Час, витрачений на фронт, переконуючись, що код перебуває у найкращому стані, заощаджується час пізніше, коли дражнити те, що мало бути легким рефакторингу, виявляється головною операцією.
Коли ви пишете програмне забезпечення, кожен момент, витрачений на вдосконалення коду наперед, заощаджується час пізніше, коли вам це буде потрібно. Чим раніше ви рефактор, тим чіткішими будуть ваші пізніші зміни. Це як зробити внесок у сьогоднішніх доларах проти майбутнього технічного боргу, який буде завтра завищеними доларами.
У будь-якому випадку, рефакторинг не повинен бути завданням, яке ви відкладете до тих пір таємничого майбутнього, коли програмне забезпечення вже завершене та стабільне, оскільки воно збільшує ваші ризики пізніше, коли ставки значно вищі, а продукт набагато складніше змінити. Рефакторинг повинен бути частиною вашої щоденної діяльності, і це суть філософії Red-Green-Refactor, яку ви згадали.