Roky jsem vedl vývoj. Podle fáze firmy to byl tým o osmi lidech nebo o padesáti, ale práce vedoucího zůstávala stejná: rozdělit cíl, dát ho někomu konkrétnímu, poznat včas, že se to nedaří, a odmítnout devět z deseti dobrých nápadů. Dnes dělám v podstatě totéž. Jen ten tým tvoří jeden člověk a flotila AI agentů.
Rozdělení rolí zní povědomě. Je tam koordinátor, který drží vydání pohromadě. Provoz, jediný, kdo smí sáhnout na ostrou verzi. Seniorní vývojář, který si bere delší témata a rozpadá je na menší kusy pro „juniory“. Tester a analytik. Jediné, co je opravdu jiné, je jednotka kapacity. U lidí to byly hlavy a kalendář. Tady je to rozpočet: každá role běží na jiném předplatném s vlastním týdenním limitem, a ten limit se dá vyčerpat za jedno odpoledne.
Čekal jsem, že těžké bude něco jiného, než co se nakonec ukázalo. Čekal jsem problémy s kvalitou výstupu. Kvalita je přitom ta snazší část. Zlomilo se to na věcech, které jsem u lidí nikdy nemusel řešit, protože je lidé dělají sami od sebe.
Agent neřekne, že nestíhá
Když člověku v týmu dojde kapacita, řekne to. Někdy pozdě, někdy nerad, ale řekne. Agent to říct nemůže. Když narazí na limit svého předplatného, nemá jak — ohlásit problém je taky práce a on v tu chvíli pracovat nesmí. Prostě zmlkne uprostřed věty.
Horší je, že to zmlknutí vypadá úplně stejně jako úspěch. Agent, který dokončil svůj tah a čeká na další pokyn, se zvenčí nedá odlišit od agenta, kterému došel limit, ani od agenta, který uvázl na otázce, již nikomu nepoložil. Tři velmi rozdílné stavy, jeden a týž obraz: ticho.
U lidí tohle řeší porada. Sejdete se, někdo se tváří divně a vy se doptáte. Ve flotile se stav nedá zjistit od agenta, musí se zjišťovat o agentovi, a to zvenčí. Musel jsem si proto postavit hlídače, který se v pravidelném rytmu dívá, jestli se za poslední desítky minut vůbec něco pohnulo, a odlišuje ticho pracovní od ticha mrtvého. Je to první kus vybavení, který v lidském týmu nepotřebujete vůbec.
Nevyslovený záměr neexistuje
Lidský tým stojí z velké části na nevyslovených věcech. Řeknu jednou, že u téhle části systému chci být předem informovaný, a drží to rok. Nikdo mi to nepředkládá znovu, nikdo se neptá, jestli to pořád platí.
U agentů takhle nic nedrží. Pravidla, která si přečtou na začátku, se během několika hodin práce ztratí — ne poruchou, ale prostým vytlačením: dvacet kroků úkolu je najednou bližší než věta z úvodu. Jednou jsem zadal úkol o několika navazujících krocích. Agent udělal první krok, poslal hlášení a čekal. Nebylo to selhání, udělal přesně to, co bylo napsané. Selhal záměr: „udělej tohle“ pro mě znamenalo „a pak pokračuj“. Pro něj ne. A zvenčí bylo to čekání k nerozeznání od zaseknutí.
Dnes mám dvě věty, které opakuji do omrzení v každém jednotlivém zadání: „jeď až do dokončení“ a „nález není úkol“. Co má platit vždycky, musí být v každém zadání, ne v úvodním dokumentu. Je to nepříjemné zrcadlo pro vedoucího. Ukázalo se totiž, že to, čemu jsem roky u lidí říkal „jasné zadání“, bylo z poloviny zadání a z poloviny sdílený kontext, který dopsali oni za mě.
Pilnost je drahá
Jeden den mi agenti spálili polovinu týdenního limitu nejdražšího předplatného. Ne na velkém úkolu. Na drobnostech, o které nikdo nepožádal: úklid, přejmenování, zlepšení čitelnosti, dvě opravy, které se cestou „nabízely“. Každá jednotlivá změna byla obhajitelná. Dohromady to byl celý den práce a nula schválených výsledků.
Lidský tým má proti tomuhle pojistku, o které se nemluví, protože zní nelichotivě: únavu a nechuť. Člověk, který má zavřít jeden úkol, se do úklidu vedle pustí jen tehdy, když ho opravdu pálí. Má jiné priority, má pátek odpoledne, má dvě schůzky. Agent nemá ani jedno. Dostane přístup a je pilný, dokud nedojde rozpočet.
Pravidlo, které z toho vzniklo, je tupé a funguje. Nejdřív plán s odhadem ceny, teprve potom práce. A nález, na který agent narazí po cestě, nejde rovnou do práce. Jde do seznamu, s tak malou analýzou, aby stačila na rozhodnutí, jestli se tím vůbec zabývat. „Všiml jsem si“ není mandát.
Byrokracie roste po každém incidentu
Tahle lekce mě mrzí nejvíc, protože jsem si ji způsobil sám. Pokaždé, když něco selhalo, jsem přidal kontrolu. Selhalo nasazení, přidal jsem bránu. Prošla chyba, přidal jsem druhé čtení. Každý jednotlivý krok byl rozumný a v tu chvíli levný. Po několika měsících procházela čtyřmi až šesti kontrolami jiných modelů i změna jedné věty v textu na webu.
Došlo mi to teprve ve chvíli, kdy jsem si spočítal, co který kus flotily za týden stál. Nejdražší položkou nebyla ani jedna z věcí, kvůli kterým ta flotila existuje. Bylo to přeposílání zpráv koordinátorem — zhruba čtyřapůlkrát víc než všechny revize kódu dohromady. Platil jsem hlavně za to, že si moji agenti navzájem předávají vzkazy.
Tady je rozdíl proti lidem nejostřejší. Lidská byrokracie se brzdí sama, protože ji lidé potichu obcházejí; když je pravidlo hloupé, přestane se dodržovat a vy se to dřív nebo později dozvíte. Agenti ji vykonávají poslušně a do posledního bodu. Zdola nepřijde žádný tlak, který by ji smazal. Smazat ji musí ten, kdo ji zavedl.
Pomohlo rozdělit změny do tří tříd podle následku, ne podle velikosti. Úprava textu projde bez posvěcení. Zásah do plateb neprojde nikdy bez něj. Mezi tím je pásmo, kde stačí jedno nezávislé čtení. K tomu jedna změna v topologii: technické role si věci řeší napřímo a koordinátor dostává rozhodnutí, ne provoz.
„Ověřeno“ není ověřeno
Stovky zelených testů a přihlášení do aplikace přesto nefungovalo. Test si totiž na cestě podstrčil vlastní náhradu přihlašovací vrstvy a poctivě otestoval ji. Zelená barva nelhala: ta náhrada opravdu fungovala bezvadně. Skutečné přihlášení ne. Odhalilo se to jedním kliknutím v prohlížeči.
Podruhé to bylo dražší. Agent hlásil, že změna hesla proběhla a je ověřená. Ověřil ji tak, že porovnal soubor na disku. Jenže běžící služby si heslo načetly při startu a od té doby pracovaly se starým. Hodiny běžely bez databáze, zatímco stav na disku vypadal naprosto v pořádku.
Obojí má stejné jádro. Agent neověřuje realitu, ověřuje svůj model reality — a dělá to s klidem, protože nemá ten nepříjemný pocit, který má člověk nad vlastním hotovým výsledkem. Zkušený vývojář si aspoň někdy říká „to je nějak moc snadné“. Agent tuhle nedůvěru nemá a jeho hlášení zní naprosto stejně sebejistě, ať je pravdivé, nebo ne.
Pravidlo, které z toho plyne, zní tvrdě, ale je především praktické: výsledek neověřuje ten, kdo ho vyrobil. A neověřuji ho ani já; na to nemám čas ani odstup. Ověřuje ho role, která má jediný úkol — zkusit zvenčí, tou cestou, kterou by šel uživatel, jestli to dělá, co to slibuje.
Agenti staví raketoplány
Poslední lekce je nejstarší manažerská nemoc v novém balení. Přišla jednoduchá oprava: srovnat tři konkrétní záznamy. Co se vrátilo, byl návrh nového nástroje, který by takové případy řešil obecně, s vlastním rozhraním a s vlastním kolem revize. Znovu platí, že nic z toho nebylo hloupé. Každý krok logicky navazoval na ten předchozí. Chyběl jen někdo, kdo řekne, že tři záznamy nestojí za nový kód.
V lidském týmu tuhle práci odvede zkušenost a — zase — lenost. Senior se do stavby nástroje na tři záznamy nepustí, protože ví, co to bude stát a kdo to bude za rok udržovat. Agent tuhle paměť nemá. Škrtání je tedy ve flotile práce, kterou nemá kdo udělat kromě člověka. Je to pořád ta stejná práce vedoucího, jen se dělá mnohem častěji a musí se dělat nahlas.
Co se nezměnilo
Když to srovnám s tím, co jsem dělal s lidmi, základ drží. Jasné zadání je pořád jasné zadání, jen se teď pozná okamžitě, protože nemá kdo domyslet zbytek. Jeden vlastník na jednu věc platí dál; dva agenti na jednom úkolu se hádají stejně jako dva lidé, akorát rychleji. Rozhodnutí, které není zapsané tam, kde ho příští člověk nebo agent uvidí, se do měsíce ztratí — u lidí to trvalo o něco déle, protože si ho pamatovali.
A nejtěžší práce vedoucího je pořád stejná: říct „tohle neděláme“. S lidmi mě to stálo popularitu. S agenty mě to stojí peníze, protože každé nevyslovené „ne“ se během několika minut promění v hotovou práci, kterou někdo musí přečíst a zahodit.
Nenahrazuje to vedení, násobí ho
Kdybych to měl shrnout do jedné věty, se kterou nebude každý souhlasit: AI tým vedení nenahrazuje, on ho násobí. Včetně chyb. Nejasné zadání nezpůsobí zmatek u tří lidí do konce týdne, ale u pěti agentů během deseti minut a rovnou za peníze. Chybějící „ne“ nezůstane u jednoho nápadu, vrátí se jako hotová věc. Kontrola přidaná z úleku se nevytratí, poslušně poběží dál, dokud ji nezruším.
Násobení ale funguje oběma směry, a to je důvod, proč to dělám. Dobře napsané zadání se propíše do pěti míst najednou. Rozhodnutí, které jsem zapsal jednou, platí pro celou flotilu. Jen se nic z toho nestane samo. Výpočet nakonec vyšel levněji, než jsem čekal. Režie řízení dráž.