Taskello Taskello platforma produktywności

Code review - jak robić to dobrze i nie tracić czasu

Krzysztof Żyłka Artykuły 7 min czytania
Code review - jak robić to dobrze i nie tracić czasu

Po co robimy code review

Code review to nie egzamin. To nie okazja żeby udowodnić, że jesteś mądrzejszy od kolegi. To narzędzie, które służy trzem celom:

  • Jakość kodu - druga para oczu łapie błędy, które autor przeoczył. Nie chodzi o literówki - chodzi o logiczne błędy, edge case, problemy z bezpieczeństwem.
  • Dzielenie się wiedzą - review to najlepsza forma nauki. Reviewer poznaje nowy kod, autor dostaje feedback. Po kilku miesiącach cały zespół zna cały codebase.
  • Spójność - utrzymanie jednolitego stylu, wzorców i konwencji w projekcie. Bez review każdy pisze po swojemu.

Jeśli Twoje code review sprowadza się do klikania "Approve" bez czytania - nie robisz review. Jeśli sprowadza się do wyłapywania brakujących średników - robisz robotę lintera.

Co sprawdzać podczas review

Nie da się sprawdzić wszystkiego w każdym PR. Skup się na tym co naprawdę ważne, od najważniejszego:

  • Czy rozwiązuje problem? - zanim patrzysz na kod, zrozum co PR ma robić. Przeczytaj opis, sprawdź powiązane zadanie. Najpiękniejszy kod jest bezwartościowy jeśli nie rozwiązuje właściwego problemu.
  • Architektura i design - czy kod jest w dobrym miejscu? Czy interfejsy mają sens? Czy nie łamie istniejących wzorców? To najtrudniejsze do naprawienia później.
  • Logika biznesowa - czy warunki są poprawne? Czy edge case jest obsłużony? Czy dane są walidowane na granicy systemu?
  • Bezpieczeństwo - SQL injection, XSS, brak autoryzacji, wyciek danych w logach. Te błędy są kosztowne.
  • Czytelność - czy za pół roku zrozumiesz ten kod? Nazwy zmiennych, długość funkcji, komentarze przy nieoczywistej logice.
  • Testy - czy są testy? Czy testują właściwe scenariusze? Czy nie są kruche (zależne od implementacji zamiast zachowania)?

Czego nie sprawdzać ręcznie:

  • Formatowanie i styl - od tego jest linter i formatter. Skonfiguruj je raz i zapomnij.
  • Typowanie - od tego jest kompilator / type checker.
  • Proste błędy składniowe - CI powinien to łapać automatycznie.

Jak dawać feedback

Sposób w jaki piszesz komentarze ma ogromne znaczenie. Ten sam feedback może motywować albo demolować.

Zasady dobrego feedbacku:

  • Komentuj kod, nie osobę - "Ta funkcja jest trudna do zrozumienia" zamiast "Napisałeś nieczytelny kod". Różnica subtelna, ale istotna.
  • Wyjaśniaj dlaczego - "Użyj prepared statement" to rozkaz. "Prepared statement zapobiega SQL injection - ten input pochodzi od użytkownika" to edukacja.
  • Sugeruj, nie narzucaj - "Czy rozważałeś użycie map() zamiast pętli?" brzmi lepiej niż "Nie rób pętli, użyj map()". Chyba że to kwestia bezpieczeństwa - wtedy bądź stanowczy.
  • Oznaczaj priorytet - nie każdy komentarz jest blokerem. Używaj prefiksów: "nit:" (drobnostka), "suggestion:" (propozycja), "blocker:" (musi być naprawione).
  • Chwal dobre rozwiązania - "Fajne użycie pattern matching tutaj!" kosztuje sekundę, a buduje pozytywną atmosferę.

Jak przyjmować feedback

Review działa w dwie strony. Autor też ma swoją rolę:

  • Nie bierz do siebie - komentarze dotyczą kodu, nie Ciebie. Każdy pisze kod który można poprawić.
  • Odpowiadaj na komentarze - nawet jeśli to tylko "Done" lub "Dobra uwaga, poprawione". Reviewer musi wiedzieć, że jego feedback został przeczytany.
  • Tłumacz swoje decyzje - jeśli nie zgadzasz się z komentarzem, wyjaśnij dlaczego wybrałeś takie podejście. Może masz kontekst, którego reviewer nie ma.
  • Ułatw review - mały PR, dobry opis, powiązane zadanie. Duży PR bez opisu to proszenie się o powierzchowne review.

Rozmiar PR - mniejszy znaczy lepszy

To najważniejsza zasada efektywnego code review. Badania pokazują że jakość review drastycznie spada powyżej 200-400 linii zmian.

Dlaczego małe PR są lepsze:

  • Łatwiej zrozumieć kontekst zmiany
  • Szybciej się je reviewuje (15 minut zamiast godziny)
  • Mniejsze ryzyko konfliktów z innymi branchami
  • Łatwiej je cofnąć jeśli coś pójdzie nie tak
  • Szybszy feedback loop - nie czekasz 3 dni na review

Jak tworzyć małe PR:

  • Dziel zadanie na logiczne kroki (refactoring osobno, nowa funkcja osobno, testy osobno)
  • Feature flagi pozwalają mergować niedokończoną funkcję bez wpływu na użytkowników
  • Jeden PR = jedna zmiana logiczna. Nie mieszaj bugfixa z refactoringiem z nową funkcją.

Opis PR - kontekst jest kluczowy

Dobry opis PR to połowa sukcesu review. Reviewer nie powinien musieć zgadywać co i dlaczego zmieniasz.

Minimum w opisie:

  • Co - jedna-dwie linie opisujące zmianę
  • Dlaczego - link do zadania, opis problemu który rozwiązujesz
  • Jak przetestować - kroki do zweryfikowania że zmiana działa
  • Screenshot - jeśli zmiana dotyczy UI, pokaż przed i po

Czas review - nie blokuj zespołu

PR czekający na review 3 dni to zablokowana praca. Autor przeskakuje na inne zadanie, traci kontekst, a merge conflicts rosną.

Dobre praktyki czasowe:

  • Review w ciągu 24 godzin - ideał to review tego samego dnia. Maksymalnie następnego dnia rano.
  • Blok na review - zarezerwuj 30 minut dziennie na review. Rano albo po obiedzie - stały czas, nawyk.
  • Nie przerywaj głębokiej pracy na review - sprawdź PR gdy skończysz bieżące zadanie, nie w środku implementacji.
  • Szybkie PR najpierw - mały PR (do 50 linii) zajmuje 5 minut. Nie odkładaj go na jutro.

Automatyzacja - niech maszyny robią to co potrafią

Każdy komentarz w review który mógł być automatyczny to zmarnowany czas człowieka:

  • Linter - styl kodu, formatowanie, konwencje nazewnictwa
  • Type checker - błędy typów, brakujące parametry
  • Testy w CI - czy nic nie zepsuło, czy nowe testy przechodzą
  • SAST - statyczna analiza bezpieczeństwa, znane podatności
  • Coverage report - czy pokrycie testami nie spadło

Skonfiguruj te narzędzia raz, wymagaj ich przejścia przed review. Reviewer nie powinien tracić czasu na rzeczy, które maszyna sprawdzi szybciej i dokładniej.

Code review a juniorzy

Review kodu juniora to okazja do nauczania, nie krytyki. Kilka zasad:

  • Tłumacz "dlaczego" przy każdym komentarzu - junior uczy się zasad, nie tylko poprawek
  • Linkuj do dokumentacji i artykułów - "Ten wzorzec to Strategy Pattern, tutaj dobre wyjaśnienie: [link]"
  • Bądź cierpliwy - to co dla Ciebie oczywiste, dla juniora może być nowe
  • Zachęcaj juniorów do reviewowania kodu seniorów - to najlepsza forma nauki

Najczęstsze błędy w code review

  • Review only happy path - sprawdzasz czy działa, ale nie sprawdzasz co się stanie gdy coś pójdzie nie tak. A produkcja to głównie edge case.
  • Bikeshedding - godzinna dyskusja o nazwie zmiennej, zero uwagi na logikę biznesową. Skup się na tym co ważne.
  • Rubber stamping - klikanie Approve bez czytania. Gorsze niż brak review, bo daje fałszywe poczucie bezpieczeństwa.
  • Gatekeeping - blokowanie PR bo "ja bym to zrobił inaczej". Jeśli kod jest poprawny, czytelny i rozwiązuje problem - nie musi być napisany po Twojemu.
  • Za duże PR - 2000 linii zmian w jednym PR to nie review, to przeglądanie. Nikt nie jest w stanie utrzymać takiego kontekstu w głowie.

Podsumowanie

Dobre code review to balans: wystarczająco dokładne żeby łapać ważne problemy, wystarczająco szybkie żeby nie blokować zespołu. Komentuj konstruktywnie, trzymaj PR małe, automatyzuj co się da. I pamiętaj - celem jest lepszy kod i lepszy zespół, nie udowadnianie kto ma rację.

Cookies

Dbamy o Twoją prywatność

Używamy plików cookies, aby zapewnić najlepsze działanie platformy i analizować statystyki. Szczegóły znajdziesz w Polityce cookies.