Co się dzieje, gdy kod pisze wyłącznie AI

· 7 min czytania

Klient opisywał zmiany, kod pisał Claude Code przez dwanaście tygodni. Co trzeba było zautomatyzować wokół modelu, żeby to było bezpieczne.

Klient opisywał zmiany, kod pisał Claude Code przez dwanaście tygodni. Co trzeba było zautomatyzować wokół modelu, żeby to było bezpieczne.

Przez dwanaście tygodni pracowałem dla klienta nie tyle nad kodem, ile nad procesem wokół niego. Zmiany opisywał klient — osoba bez doświadczenia programistycznego — a kod pisał za niego Claude Code. Moim zadaniem było zautomatyzowanie reszty: planowania, review, testów i wdrażania, tak żeby to, co wychodzi z modelu, dało się bezpiecznie wpuścić na produkcję.

W tym czasie nie powstała ani jedna linijka kodu napisana ręcznie, a każdy pull request szedł z opisem zmiany, automatycznym review i testami po drodze. Człowiek wchodził tam, gdzie proces sam oznaczał coś jako decyzję krytyczną.

Samo pisanie kodu przez model nie jest tu jednak najciekawsze, bo to dziś potrafi każdy. Ciekawe jest, ile pracy wokół kodu da się zdjąć z człowieka, żeby przy takim tempie nic się nie posypało.

Projekt jest komercyjny i objęty poufnością, więc nie podaję nazwy klienta ani szczegółów produktu.

Kto właściwie napisał ten kod

Kodu pisanego ręcznie nie było wcale. Człowiek miał w tym układzie trzy zadania: opisać, co ma się zmienić, zatwierdzić plan, zanim powstanie kod, i rozstrzygnąć te miejsca, w których proces sam sygnalizował, że decyzja jest krytyczna. Resztą zajmował się agent.

To trzecie zadanie nie powinno spadać na osobę, która opisuje zmiany. Kiedy proces oznacza coś jako krytyczne — uprawnienia, pieniądze, dane innych firm — decyzję musi podjąć ktoś, kto potrafi przeczytać diff i przewidzieć, co się stanie po wdrożeniu. W praktyce oznacza to doświadczonego programistę. Automatyzacja zdejmuje z człowieka rutynę, nie odpowiedzialność.

Najpierw rozmowa, potem kod

Zmiana zaczyna się tu od procedury, która przepytuje: jedno pytanie naraz, z propozycją odpowiedzi i furtką na „nie, inaczej”. Model dopytuje o rzeczy, których w zleceniu nie było — co ma się stać w przypadku brzegowym, czy dotyczy to również starych danych, po czym poznamy, że jest gotowe.

Dopiero z tej rozmowy powstaje plan, a dopiero zatwierdzony plan idzie do implementacji. Każda taka rozmowa zostawia po sobie plik, więc po trzech miesiącach w repozytorium leży komplet opisów: co, dlaczego i po czym poznamy, że gotowe.

Ten etap wygląda na najbardziej zbędny w całym procesie, a jest odwrotnie. Model, który dostaje jedno zdanie polecenia, resztę zgaduje, i to bardzo przekonująco. Po dwudziestu pytaniach nie ma już czego zgadywać. Tę samą zasadę stosuję we własnych projektach — przy ZapiszPrzepis plan przed kodem skrócił budowę wyszukiwarki z tygodnia do trzech dni.

Jak wygląda review

Kod napisany przez model trzeba przeczytać, a przy kilku zmianach dziennie nikt nie zrobi tego ręcznie z należytą uwagą. Tę część wziął na siebie Cezar — narzędzie spinające agenty z cyklem życia zadania na GitHubie, w które wpięto własny zestaw procedur.

Kolejka pull requestów czekających na automatyczne review — siedem zmian gotowych do sprawdzenia

Pull request pojawia się na GitHubie i dostaje etykietę, która uruchamia workflow:

Co się dzieje po otwarciu pull requesta
  1. Krok 1

    Rozpoznanie zmiany

    Agent czyta diff, powiązane zadanie i plan zmiany, jeśli istnieje.

  2. Krok 2

    Uzupełnienie dokumentacji

    Jeśli ktoś pominął etap planowania, agent odtwarza opis zmiany z tego, co faktycznie powstało.

  3. Krok 3

    Review w sześciu wymiarach

    Zgodność z planem, zakres, bezpieczeństwo, architektura, spójność ze wzorcami, kryteria akceptacji.

  4. Krok 4

    Werdykt i komentarz

    Zaakceptowane, do poprawy albo odrzucone — wraz z listą znalezisk, każde z plikiem i numerem linii.

  5. Krok 5

    Etykieta na liście

    Stan zmiany widać na liście pull requestów kolorem, bez wchodzenia w szczegóły.

Agent ma przy tym zakaz dotykania kodu. Wolno mu zapisać jedynie dokumentację zmiany, nigdy poprawkę w źródłach.

Lista pull requestów z etykietami stanu nadanymi automatycznie po review

Etykieta przy tytule wystarcza na co dzień za cały interfejs: zielona znaczy, że agent nie ma zastrzeżeń, pomarańczowa — że są uwagi do przeczytania.

Co ten agent wyłapuje

Pojedyncze review zaczyna się od werdyktu i tabeli z oceną w sześciu wymiarach:

Werdykt review: tabela z oceną w sześciu wymiarach — od zgodności z planem po kryteria akceptacji

Pod nią idą ponumerowane znaleziska, każde z wagą, plikiem, numerem linii i propozycją poprawki:

Trzy znaleziska z jednego review — każde z wagą, lokalizacją w kodzie i gotową poprawką

Blisko połowa tych uwag nie dotyczy jakości kodu, tylko tego, czy zmiana robi to, co zapowiedziała, czy odhaczono kryteria akceptacji i czy nie wjechało coś, czego nikt nie zamawiał.

Linter tego nie sprawdzi, bo nie zna planu, a człowiek o siedemnastej patrzy już tylko na diff, a nie na to, od czego zaczynał.

Jeden konkret zamiast przymiotników

Na jednym z pull requestów agent zgłosił, że jedna ze ścieżek zapisu sprawdza uprawnienia na poziomie organizacji, ale pomija dostęp do konkretnej firmy. Interfejs tego nie ujawniał, bo lista wyboru była już przefiltrowana. Użytkownik mógł jednak wysłać spreparowany formularz i podpiąć zasób należący do innej firmy.

Agent podał plik i numer linii, pokazał identyczną operację w sąsiednim pliku, gdzie sprawdzenie było zrobione poprawnie, i napisał, którą funkcję dodać. Typy tego nie złapią, bo obie ścieżki są poprawne pod względem typów, a testu nikt takiego nie napisał.

Więcej znalezisk nie znaczy lepiej

To jest pułapka, w którą łatwo wpaść przy automatycznym review. W innym projekcie korzystałem z CodeRabbita i dostawałem długie listy uwag, z których większość okazywała się fałszywa. Przeglądanie ich kosztowało więcej czasu niż samo czytanie kodu, a po dwóch tygodniach zacząłem je przewijać. Narzędzie formalnie działało, w praktyce przestało cokolwiek wnosić.

Tutaj problem był odwrotny: uwag krytycznych wyszło podejrzanie mało. Kod recenzował model, który sam go napisał, a trudno wychwycić założenie, które samemu się przyjęło.

Obie skrajności kończą się tak samo — człowiek przestaje czytać. Review jest warte tyle, ile jego trafność, a nie ile pozycji ma lista. Stąd wniosek, który biorę do kolejnych projektów: rozdzielać pisanie i recenzowanie między modele różnych dostawców i sprawdzać, który wyłapuje rzeczy, na które naprawdę reagujesz.

Tempo

Połowa pull requestów zamykała się w godzinę. Zmiany były małe, więc review trwało krótko; review było automatyczne, więc nie czekało na czyjś wolny wieczór. Nic się nie odkładało, więc nic nie puchło.

Zwykle wystarczały dwie rundy uwag, choć zdarzały się zmiany, które wracały kilkanaście razy.

Jeden adres, pod który zagląda agent

Projekt wystartował na publicznym pakiecie procedur do Claude Code, ale plany szły do jednego katalogu, specyfikacje do drugiego, raporty postępu do trzeciego. Człowiek jakoś sobie z tym radzi, bo pamięta, gdzie co wrzucił.

Agent nie pamięta nic między sesjami. Dostaje wyłącznie to, co potrafi znaleźć, i na tym stoi cały opisany wyżej mechanizm: review porównuje zmianę z jej planem, więc plan leżący pod nieoczekiwanym adresem jest dla agenta tym samym, co plan nieistniejący.

Gdzie to nie działa

Planowanie zostało świadomie odpuszczone. Z czasem uznano, że zajmuje za dużo czasu, i część zmian ruszała prosto do implementacji. Procedura potrafi odtworzyć opis po fakcie, więc dokumentacja nie ma dziur — ale opis pisany po implementacji odpowiada na pytanie „co zrobiliśmy”, podczas gdy wartość tego etapu leży w pytaniu „co powinniśmy zrobić”, zadanym wcześniej.

Bramka kompilacji rzadko się uruchamia. Agent ma zbudować gałąź i sprawdzić typy, ale zwykle nie ma pod ręką środowiska. Twardą bramką pozostaje CI, a agent dokłada to, czego CI sprawdzić nie umie. Jak wpinam AI w same testy, opisałem w przewodniku po testach E2E z Playwrightem.

Co z tego ma Twój projekt

  • Każda zmiana jest opisana, zanim powstanie, i sprawdzona wobec tego opisu, kiedy powstanie. Nic nie wchodzi na produkcję bez śladu, dlaczego weszło.
  • Kryteria akceptacji nie są odhaczane na słowo. Jeśli coś z listy cicho wypadło, wychodzi to w review, zanim dojedzie do wdrożenia.
  • AI nie ma prawa zapisu tam, gdzie ryzyko jest realne. Poprawki lądują jako szkic do zatwierdzenia, nigdy jako automatyczne scalenie.
  • Proces zostaje u Ciebie. Procedury to zwykłe pliki w Twoim repozytorium, które możesz czytać i zmieniać.
  • Jedna osoba odpowiedzialna za całość — od ustalenia zakresu, przez wdrożenie, po wsparcie po starcie.

Podsumowanie

  • Kod może w całości pisać model, o ile przed implementacją stoi rozmowa i plan, a po niej automatyczne review. Samo generowanie kodu jest tu najłatwiejszą częścią.
  • Blisko połowa uwag z review dotyczy zgodności z planem i kryteriami akceptacji, a nie jakości kodu. Nie sprawdzi tego narzędzie, które nie zna ustaleń.
  • Automatyczne review skraca cykl, bo nie czeka na wolny wieczór. Połowa zmian zamykała się w godzinę.
  • Liczba znalezisk to zły miernik. Zbyt długa lista fałszywych alarmów i zbyt krótka lista uwag kończą się tym samym: człowiek przestaje czytać.
  • Do pisania i do recenzowania warto brać modele różnych dostawców. Ten sam model rzadko widzi własne błędne założenia.
  • Decyzje oznaczone jako krytyczne zatwierdza doświadczony programista. Proces wskazuje miejsce, ale ocenić skutki musi ktoś, kto umie przeczytać diff.

Skąd wziąłem Cezara

Na 10xDevs — kursie prowadzonym przez Przemka Smyrdka i Marcina Czarkowskiego z Przeprogramowani. Narzędzie pokazywał na gościnnym spotkaniu Piotr Karwatka, twórca Divante, dziś rozwijający Open Mercato.

Samo narzędzie mocno się od tego czasu zmieniło. Opisany wyżej proces jest jednak niezależny od konkretnego przycisku w interfejsie: procedury to pliki w repozytorium, a bramką jest etykieta na pull requeście.

Chcesz proces, który zostaje u Ciebie?

Buduję strony i aplikacje webowe z planem przed kodem, automatycznym review i dokumentacją zmian, która nie znika razem ze mną. Napisz, czego potrzebujesz, a odpowiem, czy i jak da się to zrobić.

Porozmawiajmy o Twoim projekcie Zobacz ofertę

Najczęściej zadawane pytania

— 01
Czy AI pisze kod w Twoich projektach?
Tak, i w opisywanym projekcie cały kod napisał model. Człowiek zatwierdzał plan przed implementacją i rozstrzygał decyzje oznaczone jako krytyczne. To działa wyłącznie dlatego, że wokół generowania kodu stoi proces: rozmowa i plan przed implementacją, automatyczne review po niej.
— 02
Czy automatyczne review zastępuje człowieka?
Nie. Zastępuje pierwszy przebieg — ten, w którym sprawdza się, czy zmiana robi to, co zapowiedziała, czy odhaczono kryteria akceptacji i czy nie wjechało nic poza zakresem. Decyzję o wdrożeniu podejmuje człowiek — przy zmianach oznaczonych jako krytyczne powinien to być doświadczony programista — a poprawki agenta trafiają jako szkic, nigdy jako automatyczne scalenie.
— 03
Czy taki proces nie spowalnia pracy?
Przyspiesza. W opisywanym projekcie połowa pull requestów zamykała się w godzinę: zmiany są małe, więc review trwa krótko, a review jest automatyczne, więc nie czeka na czyjś wolny wieczór.
— 04
Co konkretnie taki agent wyłapuje?
Blisko połowa uwag nie dotyczy jakości kodu, tylko zgodności z planem, kryteriów akceptacji i zakresu zmiany. Reszta to bezpieczeństwo, spójność ze wzorcami i architektura. Klasycznego lintera pierwsza grupa w ogóle nie interesuje, bo nie zna ustaleń.
— 05
Czy ten proces zostaje w moim projekcie?
Tak. Procedury leżą w repozytorium jako zwykłe pliki, workflow działa na GitHubie, a dokumentacja każdej zmiany jest w kodzie. Możesz z tym pracować dalej ze mną albo bez.
— 06
Czy do review wystarczy ten sam model, który pisał kod?
Działa, ale to najsłabszy wariant: model rzadko wychwytuje własne błędne założenia, więc lista uwag wychodzi krótsza, niż powinna. Uwaga w drugą stronę jest równie ważna — narzędzie sypiące długimi listami fałszywych alarmów też przestaje działać, bo człowiek zaczyna je przewijać. Liczy się trafność uwag, nie ich liczba.
— 07
Co w tym procesie jeszcze nie działa?
Bramka kompilacji w review odpala się rzadko, bo agent zwykle nie ma środowiska, w którym mógłby zbudować gałąź — twarde sprawdzenie zostaje po stronie CI. Wyszło to dopiero po policzeniu historii repozytorium i jest w trakcie naprawy.
— 08
Czy to działa tylko w dużych projektach?
Opłacalność rośnie z liczbą zmian, ale próg jest niski. Sensowne staje się już wtedy, gdy przestajesz pamiętać, co ustaliliście trzy tygodnie temu — a to zdarza się szybciej, niż większość zakłada.
Powrót do bloga

Powiązane wpisy

Czytaj więcej