Le refactoring, c'est comme récupérer votre chambre.
Si vous gardez les choses en ordre, vous avez une surcharge linéaire, proportionnelle à la quantité de travail productif que vous faites sur le code, O (n) en termes algorithmiques. En supposant que vous passez 10% de votre temps à refactoriser (ou à garder votre chambre bien rangée), que 10% est une donnée, et cela restera constant au fil du temps.
Si, cependant, vous jetez vos vêtements sales dans un coin et continuez à le faire, le temps que vous allez passer à ramasser votre chambre augmente à mesure que le désordre devient plus complexe. En supposant que chaque pièce de linge sale contribue de façon exponentielle au temps de nettoyage requis, vous êtes maintenant dans une situation O (e n ).
Quiconque a déjà exploré le concept de complexité algorithmique observera qu'il y a un seuil de rentabilité quelque part, c'est-à-dire qu'il y a une quantité optimale de linge sale à accumuler; combien cela dépend des facteurs constants qui sont rejetés dans la notation big-O. Un autre facteur est la valeur de votre travail au fil du temps: si votre travail vaut beaucoup maintenant, mais pas cher la semaine prochaine (c'est-à-dire qu'il y a une date limite ce vendredi pour ce projet et trois autres, mais après cela, vous serez surtout inactif ), l'équation pourrait se révéler favorable à la non-refactorisation.
Et puis il y a la complexité de la masse critique. À un moment donné, le gâchis (`` gâchis critique '', si vous voulez) devient si grave qu'il semble plus facile de simplement brûler toute la pièce et d'acheter de nouveaux vêtements. En réalité, ce n'est généralement pas le cas, mais cela semble ainsi, et les effets psychologiques rendront dix fois plus difficile de s'attaquer à la chose.
Et évidemment, si vous entrez déjà dans un projet qui est déjà un gâchis multiplicateur redondant, vous avez un choix limité.
TL; DR: En cas de doute, refactorisez. Vous devriez avoir de très bonnes preuves avant de décider de ne pas le faire.