Zarządzanie Produktem

Jak uniknąć „wielkiego powrotu” do kodu

Jak uniknąć „wielkiego powrotu” do kodu

Znasz to uczucie, gdy po pół roku od wdrożenia projektu dostajesz wiadomość od klienta: „Coś nie działa, trzeba wrócić do kodu”? Albo gorzej – sam odkrywasz, że architektura, która miała być skalowalna, teraz przypomina dom z kart? „Wielki powrót” do kodu to koszmar każdego CTO i właściciela produktu. Ale dobra wiadomość jest taka – można go uniknąć. Zła? Wymaga to więcej dyscypliny niż dieta cukrzyka w cukierni.

Dlaczego „wielki powrót” to jak wizyta u dentysty po 10 latach?

Zanim przejdziemy do rozwiązań, zróbmy szybką autopsję problemu. „Wielki powrót” zwykle ma trzy przyczyny:

Jak uniknąć "wielkiego powrotu" do kodu

  • Kod napisany pod deadline – bo przecież „zrobimy refactor później” (spoiler: nie zrobimy)
  • Brak dokumentacji – albo jej jakość przypomina notatki z imprezy studenckiej
  • Architektura „na już” – czyli słynne „to zadziała, a jak nie – poprawimy”

Prawda jest taka, że każdy z nas myślał: „To tylko tymczasowe rozwiązanie”. I każdy z nas potem przeklinał siebie sprzed pół roku. Jak to naprawić? Oto moje sprawdzone metody.

1. Pisz kod tak, jakbyś miał go czytać podczas migreny

Najlepszą dokumentacją jest czysty kod. Brzmi jak banał? To dlatego, że jest banalnie prawdziwy. Oto moje żelazne zasady:

Co robić Dlaczego Jak wdrożyć
Nadawaj znaczące nazwy „temp_var_2” mówi tyle co „ten plik jest ważny” na biurku Wymagaj code review przed mergem
Dziel na małe funkcje Funkcja 300-linijkowa to nie funkcja, to powieść Limit 20-30 linii na funkcję
Komentuj „dlaczego”, nie „co” Kod mówi co robi, komentarz powinien mówić dlaczego Automatyczne sprawdzanie pokrycia komentarzy

Case study: Jak oszczędziliśmy 400 godzin dev time’u

W NexTech mieliśmy moduł płatności napisany przez juniora (z całym szacunkiem dla juniorów). Po roku okazało się, że nikt nie wie jak to działa. Refactor zajął 3 tygodnie. Teraz każdy nowy moduł przechodzi „test migreny” – jeśli po 15 minutach czytania kodu masz wrażenie, że ktoś ci wbija szpilki w oczy, wraca do autora.

2. Dokumentacja to nie luksus, to ubezpieczenie

Wiem, wiem – dokumentacja jest jak flossing. Wszyscy wiemy, że powinniśmy to robić, ale jakoś zawsze brakuje czasu. A potem jest ekstrakcja kanałowa w postaci „wielkiego powrotu”.

Oto jak robimy to w NexTech:

  • Living documentation – dokumentacja w repozytorium, aktualizowana przy każdym PR
  • 5-minutowa reguła – jeśli coś zajmuje więcej niż 5 minut wyjaśnienia, musi być udokumentowane
  • Wideo quickstarty – 2-3 minutowe nagrania dla nowych developerów

Statystyka, która boli:

Według naszych danych, projekty z kompletną dokumentacją mają 73% mniej „powrotów” w ciągu pierwszych 6 miesięcy. Koszt dokumentacji? Około 5-10% czasu projektu. Koszt „wielkiego powrotu”? Minimum 30-50% pierwotnego czasu.

3. Testy to twój parasol na deszczowy dzień

Pisanie testów przypomina wykupienie ubezpieczenia – płacisz teraz, żeby nie płacić później. I podobnie jak z ubezpieczeniem, doceniasz je dopiero gdy coś się zepsuje.

Nasze podejście:

  • TDD dla krytycznych modułów – najpierw test, potem kod
  • Testy regresyjne przy każdym buildzie – jak szczepionka, działa tylko jeśli regularna
  • Testy wydajnościowe co kwartał – bo to, co działało na 100 użytkowników, może paść przy 10 000

Prawda, która uwiera:

Projekty z pokryciem testowym poniżej 60% mają 4x większe prawdopodobieństwo „wielkiego powrotu”. A teraz szczerze – jaki % twojego kodu jest pokryty testami?

4. Architektura to nie przesada, to oszczędność

„Nie potrzebujemy skomplikowanej architektury, to mały projekt” – słynne ostatnie słowa przed katastrofą. Dobra architektura to jak dobra infrastruktura miejska – nie widać jej, dopóki działa.

Zasady, które nas uratowały:

  • Zasada odwróconej zależności – wysokopoziomowe moduły nie powinny zależeć od niskopoziomowych
  • Microservices od początku – nawet jeśli startujesz z monolitem, projektuj jak mikroserwisy
  • Event-driven design – bo synchroniczne wywołania to proszenie się o kłopoty

Historia z życia wzięta:

Jeden z naszych pierwszych projektów miał „prostą” architekturę – wszystko w jednym repo, bez wyraźnych granic. Po 18 miesiącach zmiana jednej linii kodu wymagała testów całego systemu. Refactor zajął 6 miesięcy i kosztował nas klienta. Teraz każdy nowy projekt zaczynamy od pytania: „Jak to będzie wyglądało za 3 lata?”

5. Code review to nie formalność, to inwestycja

Code review traktowane jako „no dobra, szybko przejrzę” to jak badanie kontrolne u lekarza, które ogranicza się do pytania „Wszystko ok?”. Prawdziwe code review powinno boleć – trochę.

Jak robimy to skutecznie:

  • 30% zasada – jeśli 30% kodu wymaga poprawki, całość wraca do autora
  • Rotacyjni reviewerzy – każdy musi przeglądać kod innych, to najlepsza nauka
  • Metryki jakości – nie tylko „czy działa”, ale też złożoność, spójność, testy

Szokujące odkrycie:

Po wprowadzeniu rygorystycznych code reviews liczba poważnych bugów w produkcji spadła o 68%. A czas poświęcany na code review? Wzrósł z 5% do 15% czasu projektu. Rachunek jest prosty – lepiej 15% teraz niż 50% później.

Podsumowanie: Lepiej zapobiegać niż leczyć

„Wielki powrót” to nie fatum, to konsekwencja wcześniejszych decyzji (a raczej ich braku). Podsumujmy kluczowe punkty:

  1. Czysty kod to podstawa – pisz go tak, jakbyś miał go czytać po nocy bez snu
  2. Dokumentacja to nie strata czasu, to ubezpieczenie na przyszłość
  3. Testy to twój system wczesnego ostrzegania
  4. Architektura to nie przesada – to plan awaryjny
  5. Code review to nie formalność – to ostatnia linia obrony

Pamiętaj: w programowaniu nie ma czegoś takiego jak „tymczasowe rozwiązanie”. Jest tylko „to, z czym będziemy żyć przez następne 5 lat”. Wybór należy do ciebie.

A jeśli teraz myślisz „nie mam czasu na te wszystkie praktyki”, to pamiętaj – zawsze masz czas. Tylko później zajmie ci to trzy razy więcej. Ale kto liczy, prawda?