Refaktoryzacja to zmiana kodu, która poprawia jego strukturę, nie zmieniając tego, co robi oprogramowanie. Refaktoryzacja czy przepisanie od zera to decyzja o tym, ile miesięcy roadmapy są Państwo gotowi zatrzymać. Refaktoryzacja małymi krokami zwykle wygrywa, bo produkt w tym czasie nadal zarabia.
Przepisanie od zera ma sens w trzech przypadkach: kod robi niewłaściwą rzecz, nie należy do Państwa albo działa na technologii bez wsparcia. Poniżej znajdą Państwo tabelę decyzyjną i sposób na refaktoryzację bez zatrzymywania roadmapy.
Większość naszego kodu pisze AI. Senior przegląda każdą zmianę i odpowiada za produkcję. Przez lata rozwijaliśmy SaaS, z którego codziennie korzystało 60 000+ osób. Nigdy nie został przepisany od zera. Zmieniał się dzięki małym, przejrzanym zmianom, bezpośrednio w działającym produkcie.
Dlaczego duże przepisanie prawie zawsze kosztuje więcej, niż się wydaje?
Przepisanie wygląda czysto, bo nowy kod nie ma jeszcze historii. Ale tej historii Państwo potrzebują. Za każdym dziwnym warunkiem w starym kodzie zwykle stoi czyjaś reklamacja.
Najczęstsze powody, dla których przepisanie robi się drogie:
Przepisanie od zera
Tracą Państwo poprawki. Stary kod zawiera lata drobnych poprawek, a klienci znowu trafiają na błędy.
Płacą Państwo za dwa systemy. Dopóki przepisanie nie jest gotowe, stary system nadal wymaga utrzymania i nowych funkcji.
Roadmapa staje. Sprzedaż czeka na funkcje, a nowy system na starcie potrafi mniej.
Cel się przesuwa. Zanim przepisanie dogoni stary system, ten ma już nowe funkcje.
Żadnego z tych kosztów
Refaktoryzacja małymi krokami
Produkt nadal działa i zarabia.
Klienci niczego nie zauważają.
Każdą zmianę można cofnąć.
Nowe funkcje wychodzą równolegle z refaktoryzacją.
Kiedy refaktoryzować, a kiedy przepisać: tabela decyzyjna
Sytuacja
Co zalecamy
Dlaczego
Kod robi właściwą rzecz, ale trudno go zmienić
Refaktoryzacja
Chcą Państwo zachować zachowanie i zmienić tylko kształt kodu.
Nie ma testów
Najpierw testy, potem refaktoryzacja
Bez testów nie wiadomo, co się zepsuło.
Jedna część spowalnia całą resztę
Wymienić tę część, resztę refaktoryzować
Jeden moduł za stabilnym interfejsem da się opanować.
Kod robi niewłaściwą rzecz, biznes się zmienił
Przepisać tę część
Nie ma sensu utrzymywać zachowania, którego Państwo nie chcą.
Kod nie należy do Państwa albo nie mają Państwo do niego dostępu
Nowy system i przeniesienie danych
Nie ma czego refaktoryzować.
Technologia nie ma wsparcia ani poprawek bezpieczeństwa
Stopniowa migracja
Przenosić część po części, nie wszystko naraz.
Nikt w zespole nie rozumie kodu
Najpierw zrozumieć, potem decydować
Kod, którego nikt nie rozumie, nie jest powodem do przepisania. Jest powodem do napisania testów.
Proszę zwrócić uwagę na ostatni wiersz. „Nikt tego nie rozumie” to najczęstszy argument za przepisaniem. I zarazem najgorszy. Nowy zespół, który nie rozumie starego kodu, przepisze go bez poprawek, które ten kod zawiera.
Przepisanie to też najłatwiejszy upsell. Częściej wystarczy kontynuować moduł po module i zacząć od najbardziej ryzykownej części, na przykład logowania i uprawnień.
Jak refaktoryzować bez zatrzymywania roadmapy?
01
Testy obecnego zachowania
Najpierw opisać, co system robi dziś, łącznie z błędami. Dopiero potem go zmieniać.
02
Małe kroki w normalnym trybie pracy
Żadnej gałęzi, która przez miesiąc czeka na merge. Każda zmiana przechodzi przez code review i CI.
03
Refaktoryzować tam, gdzie powstaje funkcja
Kod, którego nikt nie dotyka przez miesiąc, może poczekać.
04
Budować nową część obok starej
Przełączać stopniowo, aż starą będzie można wyłączyć.
05
CI, które naprawdę zatrzyma złą zmianę
Zielony check bez testów niczego nie dowodzi.
AI wykonuje tu powolną, nudną część. Testy istniejącego zachowania, przenoszenie kodu, zmiana nazw. Senior decyduje, co się zmienia i w jakiej kolejności. Reguły, które dajemy do tego AI, opisujemy w artykule Reguły dla kodu AI w zespole.
Kiedy masz testy, refaktoryzacja jest łatwa.
Filip Papranec
Założyciel Digitaliko
Bez testów i code review AI jedynie szybciej powiększa Państwa dług techniczny. Dlatego mówimy, że agent to model plus harness. Harness to to, co zatrzymuje złą zmianę.
Kiedy przepisanie od zera jest właściwą decyzją?
Gdy kod nie należy do Państwa. Jeśli pierwotny system nie jest Państwa, nie ma czego refaktoryzować: buduje się nowy, a dane się przenosi.
Przepisanie przebiega w tej samej kolejności. Najpierw dane i zrozumienie, co system naprawdę robi. Potem ekran po ekranie, nie wszystko jednego dnia.
Przed decyzją proszę przejść przez sześć punktów. Proszę zaznaczyć to, co jest prawdą w Państwa systemie:
Czwarty punkt waży najwięcej. Jeśli kod robi właściwą rzecz, tylko źle, refaktoryzacja.
Kiedy tego nie zalecamy
Mają Państwo seniora, który zna system i ma na to czas. Proszę refaktoryzować samodzielnie. Tabela powyżej wystarczy.
System zostanie wyłączony za kilka miesięcy. Nie warto inwestować w kod, który się kończy. Lepiej zainwestować w przeniesienie danych.
Chcą Państwo podjąć decyzję z kimś, kto robi to na co dzień?
Senior od pierwszego dnia pracuje w Państwa repozytorium i pull requestach. Najpierw testy, potem zmiany małymi krokami, a roadmapa idzie dalej. Tak pracujemy jako zewnętrzni programiści dla zespołów produktowych.
Proszę napisać, która część kodu Państwa spowalnia. Odezwiemy się w ciągu dwóch dni roboczych z kilkoma pytaniami o Państwa pracę. Potem ustalimy, co zrobimy najpierw.
Kiedy refaktoryzować, a kiedy przepisać kod od zera?
Refaktoryzacja, gdy kod robi właściwą rzecz, ale trudno go zmienić. Przepisanie, gdy robi niewłaściwą rzecz, kod nie należy do Państwa albo technologia straciła wsparcie. Nawet wtedy przepisuje się po kawałku, nie wszystko naraz.
Czy można refaktoryzować bez testów?
Można, ale to hazard. Najpierw proszę napisać testy obecnego zachowania, łącznie z błędami. Dopiero potem zmieniać kod. Bez testów o błędzie dowiedzą się Państwo od klienta.
Ile trwa refaktoryzacja?
Nie ma stałego końca i to jest w porządku. Odbywa się na bieżąco w zwykłych pull requestach, tam, gdzie i tak Państwo pracują. Osobny projekt refaktoryzacji trwający miesiącami zwykle nigdy się nie kończy.
Czy AI pomaga w refaktoryzacji?
Tak, przy pisaniu testów, przenoszeniu kodu i zmianie nazw. Decyzja, co zmienić i w jakiej kolejności, zostaje przy seniorze. Bez testów i code review AI sprawia jedynie, że błędy pojawiają się szybciej.
Zapytaj AI o ten artykuł
AI przy odpowiedzi wykorzysta też nasze inne artykuły i doświadczenia z prawdziwych projektów.
Dług techniczny zmierzą Państwo na podstawie historii git i błędów, bez drogiego narzędzia. Najpierw warto naprawić kod, który zmienia się najczęściej i blokuje roadmapę, a nie ten najbrzydszy. Poradnik dla CTO.
Body leasing daje godziny programisty, którymi zarządzają Państwo sami. Senior w zespole daje zrealizowane zadania i zespół, który uczy się pracy z AI. Porównanie z outsourcingiem i rekrutacją, dla CTO.
Nie zastąpiliśmy Vercel, podzieliliśmy pracę. Strony w Next.js zostają na Vercel, nowe aplikacje działają na Cloudflare Workers i D1, opisane w TypeScript za pomocą Alchemy. Ceny ze źródłami, nasza konfiguracja i zablokowany deploy agenta AI.