Legacy code wordt slechter naarmate het ouder wordt
Legacy code wordt niet beter na verloop van tijd. Het wordt slechter.
Vorige week was ik drie uur bezig met het oplossen van een bug. Dat had 20 minuten moeten duren. Het probleem was een validatiemodule uit 2019. Iedereen negeerde het omdat "het werkt". Het werkte niet. Ik vond een TODO-comment uit 2020 in het bestand.
Veel mensen behandelen legacy code als een optionele schuld. Ze denken dat ze het kunnen terugbetalen wanneer ze tijd hebben. Legacy code is meer als schimmel. Het verspreidt zich. Het besmet andere delen van je systeem. Hoe langer je het negeert, hoe duurder het wordt om het op te ruimen.
Dit creëert een vicieuze cirkel:
- Je erft een rommelig project.
- Je voegt nog een if-statement toe om je feature werkend te krijgen.
- Zes maanden later doet iemand anders hetzelfde.
- Een jaar later heeft het bestand 800 regels en nul tests.
Deze "werkende" code heeft verborgen kosten:
- De ontwikkelingssnelheid daalt. Je besteedt meer tijd aan het lezen van de context dan aan het schrijven van code.
- Het aantal bugs neemt toe. Het oplossen van het ene probleem breekt iets anders.
- Onboarding wordt moeilijk. Nieuwe ontwikkelaars hebben moeite om te begrijpen waarom logica overal is gedupliceerd.
Let op deze rode vlaggen:
- Nutteloze of misleidende comments.
- Gedupliceerde bedrijfslogica in verschillende bestanden.
- Circulaire afhankelijkheden en hoge koppeling.
Probeer niet alles te herschrijven. Volledige herschrijvingen mislukken in 80% van de gevallen. Je bent maanden bezig met het herbouwen van wat al bestaat, terwijl de business wacht op nieuwe features.
Gebruik incrementele refactoring met characterization tests:
- Leg het huidige gedrag vast met tests, zelfs als het vreemd is.
- Refactor zonder dat gedrag te veranderen.
- Herhaal dit totdat de code leesbaar is.
- Pas daarna verander je het gedrag met echte tests.
Volg deze regels om valkuilen te vermijden:
- Refactor nooit zonder tests.
- Verander geen gedrag tijdens een refactor. Een bug kan een ongedocumenteerde feature zijn waar een klant op vertrouwt.
- Laat stille code met rust. Als een module in drie jaar niet is veranderd en geen problemen veroorzaakt, laat het dan zo.
Richt je energie op de code die je regelmatig aanraakt.
Bron: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h
