Refaktoryzacja jest jak odbiór pokoju.
Jeśli utrzymujesz porządek, masz liniowy narzut, proporcjonalny do ilości produktywnej pracy, którą wykonujesz na kodzie, O (n) w kategoriach algorytmologa. Zakładając, że spędzisz 10% czasu na refaktoryzacji (lub utrzymaniu porządku w pokoju), że 10% jest podaną i pozostanie niezmienna w czasie.
Jeśli jednak rzucisz swoje brudne ubrania w kąt i będziesz to robił dalej, ilość czasu, który będziesz spędzać na podnoszeniu pokoju, rośnie, gdy bałagan staje się bardziej złożony. Zakładając, że każda pojedyncza część brudnego prania przyczynia się wykładniczo do wymaganego czasu czyszczenia, jesteś teraz w O (e n ) sytuacji.
Każdy, kto kiedykolwiek zagłębił się w koncepcję złożoności algorytmicznej, zauważy, że istnieje gdzieś próg rentowności, czyli optymalna ilość brudnego prania do gromadzenia; ile to zależy od stałych czynników, które są odrzucane w notacji big-O. Kolejnym czynnikiem jest wartość twojej pracy w czasie: jeśli twoja praca jest teraz dużo warta, ale tania w przyszłym tygodniu (tj. W piątek jest termin na ten projekt i jeszcze trzy, ale potem będziesz w większości bezczynny ), równanie może okazać się na korzyść braku refaktoryzacji.
A potem jest masa krytyczna złożoności. W pewnym momencie bałagan („krytyczny bałagan”, jeśli wolisz) staje się tak zły, że łatwiej jest po prostu spalić cały pokój i kupić nowe ubrania. W rzeczywistości zwykle tak nie jest, ale wydaje się, że tak jest, a efekty psychologiczne sprawią, że dziesięć razy trudniej poradzisz sobie z tym problemem.
I oczywiście, jeśli wejdziesz już w projekt, który jest gigantycznym, wielokrotnie redundantnym bałaganem, masz ograniczony wybór.
TL; DR: W razie wątpliwości dokonaj refaktoryzacji. Powinieneś mieć naprawdę dobry dowód, zanim zdecydujesz się tego nie robić.