Рефакторинг подобен поднятию вашей комнаты.
Если вы держите вещи в чистоте, у вас есть линейные накладные расходы, пропорциональные количеству продуктивной работы, которую вы делаете над кодом, O (n) с точки зрения алгоритмиста. Предполагая, что вы тратите 10% своего времени на рефакторинг (или поддержание чистоты в комнате), эти 10% являются заданными, и они будут оставаться постоянными в течение долгого времени.
Однако, если вы бросаете свою грязную одежду в угол и продолжаете делать это, количество времени, которое вы собираетесь потратить, поднимая свою комнату, увеличивается, поскольку беспорядок становится более сложным. Предполагая, что каждый отдельный кусок грязного белья экспоненциально вносит вклад в требуемое время уборки, вы находитесь в ситуации O (e n ).
Любой, кто когда-либо углублялся в концепцию алгоритмической сложности, заметит, что где-то существует точка безубыточности, то есть оптимальное количество грязного белья, которое можно накапливать; сколько это зависит от постоянных факторов, которые отбрасываются в нотации big-O. Другим фактором является ценность вашей работы с течением времени: если ваша работа стоит очень дорого сейчас, но дешево на следующей неделе (то есть, в пятницу для этого проекта есть крайний срок и еще три, но после этого вы будете в основном бездействовать). ), уравнение может оказаться в пользу не рефакторинга.
А потом есть сложность критической массы. В какой-то момент беспорядок («критический беспорядок», если хотите) становится настолько плохим, что кажется проще просто сжечь всю комнату и купить новую одежду. В действительности это обычно не так, но кажется, что так, и психологические эффекты сделают это в десять раз сложнее, чем заняться этим.
И, очевидно, если вы вступите в проект, который уже является гигантским бесполезным беспорядком, у вас ограниченный выбор.
TL; DR: если есть сомнения, рефакторинг. У вас должны быть действительно веские доказательства, прежде чем принимать решение не делать этого.