Refatorar é como pegar seu quarto.
Se você mantiver as coisas arrumadas, terá uma sobrecarga linear, proporcional à quantidade de trabalho produtivo que você está realizando no código, O (n) em termos de algoritmologista. Supondo que você gaste 10% do seu tempo refatorando (ou mantendo seu quarto arrumado), esses 10% são um dado e permanecerão constantes ao longo do tempo.
Se, no entanto, você jogar suas roupas sujas em um canto e continuar fazendo isso, a quantidade de tempo que você vai gastar em seu quarto aumenta à medida que a bagunça se torna mais complexa. Supondo que cada peça de roupa suja contribua exponencialmente para o tempo de limpeza necessário, agora você está em uma situação de O (e n ).
Qualquer um que já tenha se aprofundado no conceito de complexidade algorítmica observará que há um ponto de equilíbrio em algum lugar, ou seja, há uma quantidade ideal de roupa suja a acumular; quanto isso depende dos fatores constantes que são descartados na notação big-O. Outro fator é o valor do seu trabalho ao longo do tempo: se o seu trabalho vale muito agora, mas é barato na próxima semana (ou seja, há um prazo nesta sexta-feira para este projeto e mais três, mas depois disso, você ficará praticamente ocioso ), a equação pode resultar em não refatoração.
E depois há a massa crítica da complexidade. Em algum momento, a bagunça ('bagunça crítica', se você quiser) fica tão ruim que parece mais fácil queimar a sala inteira e comprar roupas novas. Na realidade, geralmente não é, mas parece que sim, e os efeitos psicológicos tornarão dez vezes mais difícil lidar com isso.
E, obviamente, se você entrar em um projeto que já é uma grande bagunça redundante, você terá poucas opções.
TL; DR: em caso de dúvida, refatorar. Você deve ter realmente boas evidências antes de decidir não.