Notatka warsztatowa Planowanie przez robienie

Plan, którego nie da się uruchomić, nie może się mylić

Adam Gospodarczyk twierdzi, że planowanie w markdownie to strata czasu. Zamiast opisywać, buduj artefakt, który da się odpalić albo zobaczyć. Poniżej jego argument, dowód na żywo i komentarz o tym, gdzie ta zasada przestaje działać.

wg Adama Teza

Artefakt planistyczny ma być wykonywalny albo widzialny

Markdown to format, którego ani ty, ani model nie możecie uruchomić. Nie da się go zweryfikować, więc nie generuje feedbacku. A planowanie bez feedbacku jest zgadywaniem, tylko ładnie sformatowanym.

Plan na papierze miał sens, gdy kod pisaliśmy ręcznie albo gdy agent potrzebował wielu podejść do samej składni. Dziś częściej trafia za pierwszym razem, więc taniej jest zbudować i wyrzucić niż opisać.

Plan w .md jest zawsze wewnętrznie spójny, bo nic nie może go obalić.

dowód Ta sama specyfikacja, trzy formaty

W jednym z nich jest błąd, w pozostałych też

Poniżej opis cyklu życia procesu: osiem stanów, dziewięć przejść. Lewy panel renderuje go jako tabelę markdown. Prawy jako klikalny graf. Na dole ten sam opis przechodzi przez walidator. Wszystkie trzy panele czytają jedną tablicę w JavaScripcie, więc informacja jest identyczna. Różni się tylko to, co da się z nią zrobić.

W specyfikacji brakuje jednego przejścia. Zacznij od lewego panelu i zmierz, ile zajmie ci znalezienie go tam.

lifecycle.spec · 8 stanów · 9 przejść · jedno źródło danych

klikaj stany w grafie

Format 1: tekst

            

Kompletny i poprawny. Nieinteraktywny, bo to tylko tekst. Żeby cokolwiek sprawdzić, musisz trzymać całą tabelę w głowie i porównywać wiersz z wierszem.

Format 2: widok
wejście do stanu wyjście ze stanu stan końcowy
Format 3: uruchomienie
Walidator nie był jeszcze uruchomiony.

Tekst mówi prawdę i nie pomaga. Widok pokazuje ślepy zaułek jako kształt, zanim zdążysz przeczytać nazwy. Uruchomienie zamienia go w zdanie, które trafia do zgłoszenia. To jest cała różnica między planem a artefaktem.

wg Adama Trzy przypadki

Czym zastąpić plan, zależnie od tego, co budujesz

UI, UX, interakcje

Wireframe w HTML

Agent potrafi zbudować nawet złożone interakcje za pierwszym razem, w jednym pliku. Potem sam zrobi zrzut ekranu przez CLI przeglądarki, kliknie w to i przeczyta konsolę. Zrozumienie wizualne dostajesz nie tylko ty, ale i model. Przeniesienie gotowego wireframe do produktu bywa jednym strzałem.

Logika, API, backend

Skrypt, który odpalasz

Logi z uruchomienia niosą więcej informacji niż kolejny plik .md. Pozwalają porównywać wersje szybko, czasem deterministycznie, a wyjście można formatować i kolorować. Taki skrypt bywa gęsto okomentowany i wciąga kontekst z bazy kodu. Integracji agent zwykle nie trafia za pierwszym razem, ale wykonywalny input i tak bije ścianę tekstu.

Sama aplikacja

Kod zamiast opisu kodu

Planowanie przez robienie. Generuj i regeneruj bezpośrednio w aplikacji. Intuicyjnie wydaje się to złe, zwłaszcza przy większych projektach, ale w wielu scenariuszach lepiej iterować na rzeczy prawdziwej niż na sztucznej strukturze obok niej. Kontekst agent dociągnie potem, choćby z git status.

wg Adama Kiedy jednak tekst

Markdown z warstwą wykonywalną

Jeśli naprawdę potrzebujesz kontekstu przenoszonego między sesjami, użyj .mdx albo .mdsvx, czyli markdownu z osadzonymi komponentami. Dokument dostaje wtedy warstwę wizualną i interaktywną, a nie tylko akapity. Nadal się go czyta, ale można go też obejrzeć i kliknąć.

komentarz Dlaczego to działa

Chodzi o koszt wykrycia błędu, nie o format pliku

Wireframe i skrypt mogą się wywalić i to jest ich największa zaleta. Błąd wychodzi w minutę, a nie po dwóch dniach implementacji. Dokument tej właściwości nie ma, bo nie istnieje stan, w którym akapit zwraca exit 1.

Druga rzecz to stratność tłumaczenia. Opis w markdownie zostawia luki, które model wypełnia zgadywaniem, a każda taka luka to jedna decyzja podjęta bez ciebie. HTML i działający skrypt są już w tej samej domenie co produkt, więc konwersja jest w dużej mierze mechaniczna.

komentarz Gdzie to ma granice

Decyzja biznesowa nie ma trybu uruchomienia

Ta zasada dotyczy planów o kształcie kodu. Nie dotyczy planów o kształcie decyzji. Pytanie „który wariant liczymy”, „jaki próg przyjmujemy”, „załącznik idzie mailem czy linkiem” nie ma odpowiedzi, którą wyprodukuje uruchomienie skryptu, bo to nie jest pytanie techniczne. Tego rodzaju ustalenia dalej warto mieć zapisane, bo ich wartością jest akceptacja, a nie weryfikacja.

Drugi wyjątek to pamięć. Przy kilku równoległych sesjach agentów na jednym repozytorium ktoś musi wiedzieć, co już zostało ustalone i wdrożone. Notatka jest do tego dobrym narzędziem, bo jej zadaniem nie jest specyfikowanie, tylko przypominanie.

Wszystko poniżej warstwy decyzji, czyli „jak dokładnie ma wyglądać ten ekran” albo „co ten parser ma zrobić z tym plikiem”, faktycznie rozstrzyga się szybciej wykonywalnym artefaktem niż akapitem.

komentarz Co z tym zrobić

Cztery zmiany, które kosztują zero

  • 01 Zanim napiszesz plan, sprawdź, czy da się go zastąpić. Jeśli odpowiedzią na pytanie jest kształt ekranu albo zachowanie funkcji, buduj artefakt. Jeśli odpowiedzią jest czyjaś zgoda, pisz notatkę.
  • 02 Wireframe zamiast opisu UI. Jeden plik HTML, prawdziwe dane, klikalne stany. Agent zobaczy go tak samo jak ty, a to on będzie potem przenosił go do produktu.
  • 03 Skrypt zamiast opisu logiki. Wejście, wyjście, kolorowe logi. Dwie wersje algorytmu porównasz w kilkanaście sekund zamiast dyskutować, która brzmi rozsądniej.
  • 04 Notatki tnij do tego, czego artefakt nie unosi. Ustalenia, założenia, stan wdrożenia. Reszta i tak zdezaktualizuje się szybciej, niż ktokolwiek zdąży ją przeczytać.