Otvorite repozitorij šest mjeseci nakon što je funkcionalnost isporučena i možete rekonstruisati mnogo toga. Možete pratiti arhitekturu, pregledati šemu, pročitati testove i vidjeti tačno koje su linije promijenjene.
Ono što obično ne možete rekonstruisati jeste razgovor zbog kojeg su te linije postale neophodne.
Kod vam neće reći da pravilo validacije postoji zato što jedan korisnik šalje neispravne izvoze. Neće objasniti da neobična politika ponovnih pokušaja sprječava duple transakcije u nizvodnom sistemu. Neće pokazati da je čišći interfejs odbijen nakon testa pristupačnosti, niti da granica servisa odražava ugovorno ograničenje, a ne inženjersku preferenciju.
Git je odličan u očuvanju historije koda. Namjeru čuva samo kada je tim svjesno zapiše i održi povezanom s implementacijom.
Taj jaz je oduvijek bio dio softverskog inženjerstva. AI alati za kodiranje čine ga vidljivijim. Sistem može pročitati svaki fajl u repozitoriju, pratiti svaki simbol i generisati tehnički uvjerljiv patch, a da i dalje rješava pogrešan problem.
Problem nije u tome što kod dovodi u zabludu. Kod odgovara na uže pitanje.
Pet slojeva inženjerske istine
Većina smislenih promjena u softveru zavisi od pet različitih slojeva dokaza.
- Namjera — Koji ishod traži korisnik, kupac ili poslovanje? To može biti u specifikaciji, tiketu, razgovoru s podrškom ili bilješci sa sastanka.
- Ograničenja — Šta se ne smije pokvariti? Obećanja kompatibilnosti, sigurnosne granice, propisi, ugovori, budžeti i rokovi često se nalaze izvan repozitorija.
- Implementacija — Kako sistem danas funkcioniše? Kod, testovi, šeme, zavisnosti i konfiguracija deploymenta čine ovaj sloj.
- Dokazi iz rada sistema — Šta se dešava u stvarnom sistemu? Logovi, tragovi, metrike, produkcijski podaci i izvještaji o incidentima mogu proturječiti pretpostavkama koje u kodu djeluju razumno.
- Historija odluka — Zašto je izabran trenutni pristup? Pull requestovi, dizajnerske rasprave, odbačene alternative i prethodni incidenti sadrže odgovor.
Repozitorij je najjači u trećem sloju. Sadrži dijelove ostalih, ali rijetko dovoljno da ih predstavi u potpunosti.
Ovo je važno zato što se kvarovi u softveru često pojavljuju na granicama između slojeva. Implementacija odgovara zastarjeloj specifikaciji. Ispravka zadovoljava tiket, ali krši operativno ograničenje. Testovi prolaze zato što kodiraju jučerašnje pretpostavke. Kod je interno dosljedan, dok produkcijski podaci prate obrazac koji niko nije dokumentovao.
Lokalno ispravan patch i dalje može biti pogrešna promjena.
Na šta repozitorij sam po sebi ne može odgovoriti
Zamislite korisnika koji uredi dokument, a zatim potraži ažuriranu rečenicu, samo da bi u rezultatima i dalje vidio staru verziju. „Neka se pretraga ažurira odmah“ zvuči kao jasan zahtjev. Repozitorij otkriva nekoliko mogućih mjesta od kojih treba krenuti, ali sam po sebi ne može odrediti ispravno rješenje.
| Pitanje | Vjerovatan izvor |
|---|---|
| Koja verzija dokumenta je mjerodavna? | Izvorni dokument i historija revizija |
| Gdje se stari tekst još zadržava? | Logovi sinhronizacije, izlaz ekstrakcije, indeks pretrage ili keš |
| Šta „odmah“ znači za ovaj proizvod? | Obećanje proizvoda ili cilj usluge |
| Jesu li se dozvole dokumenta promijenile zajedno s njegovim sadržajem? | Izvorne dozvole i historija revizije |
| Je li zastarjeli rezultat ograničen na jednog korisnika, izvor ili regiju? | Tragovi zahtjeva i produkcijske metrike |
Kod za pretragu može objasniti kako se rezultati vraćaju. Ne može vam reći je li stvarni problem kašnjenje sinhronizacije, zastarjela ekstrakcija, invalidacija keša, propagacija dozvola ili očekivanje koje proizvod nikada nije definisao.
Ova razlika postaje još važnija u zrelim sistemima. Polje koje izgleda zastarjelo možda i dalje podržava naslijeđenog klijenta. Servis koji djeluje kao duplikat možda razdvaja podatke s različitim zahtjevima za dozvole. Provjera koja naizgled djeluje pretjerano možda je jedini trag u kodu o produkcijskom incidentu koji trenutni tim nikada nije vidio.
Uklanjanje složenosti je vrijedno. Uklanjanje historije prerušene u složenost je skupo.
Više konteksta i dalje može dovesti do pogrešnog odgovora
Očigledno rješenje je dati AI-ju više materijala: cijeli repozitorij, svaki tiket, svaki dokument, svaku poruku i svaki log.
To stvara pristup, a ne razumijevanje.
Izvori mogu biti zastarjeli, kontradiktorni, spekulativni ili napisani za različite publike. Brainstorming ne bi trebao imati veću težinu od odobrene specifikacije. Zahtjev star šest mjeseci ne bi smio tiho nadjačati jučerašnju odluku o proizvodu. Produkcijski log treba biti povezan s izdanjem, okruženjem i putanjom koda koji ga je proizveo. Zahtjev korisnika ne bi se smio tretirati kao univerzalan zahtjev bez provjere opsega.
Ozbiljan sistem konteksta zato treba više od samog dohvaćanja. Potreban mu je način da rasuđuje o sljedećem:
- Autoritet: Koji izvor smije definisati zahtjev?
- Aktuelnost: Koja je informacija važeća, a šta je zamijenjeno novijim?
- Porijeklo: Odakle potiče svaka tvrdnja, ograničenje ili zaključak?
- Odnosi: Koji problem, izdanje, korisnik, skup podataka i putanja koda pripadaju zajedno?
- Dozvole: Koji se izvori smiju koristiti za ovaj zadatak i prikazati ovoj osobi?
Kontekst nije gomila tokena. To je graf s vremenom, autoritetom i granicama.
Više konteksta treba proizvesti više dokaza, a ne više samopouzdanja bez dokaza.
Stvarna jedinica rada je promjena
Uređivači i alati za kodiranje organizovani su oko datoteka jer su datoteke ono što mijenjamo. Inženjerski timovi organizovani su oko promjena.
Promjena počinje razlogom. Postaje zahtjev, dotiče kod i podatke, prolazi kroz pregled, stiže u produkciju i stvara nove dokaze. Ako te faze ostanu nepovezane, svaki budući zadatak počinje novim krugom arheologije.
AI sistem koji radi na stvarnom softveru trebao bi pratiti taj životni ciklus.
Prije implementacije, trebao bi identificirati zahtjev, relevantna ograničenja i sve izvore koji su u sukobu. Trebao bi znati da li ispravlja defekt, mijenja očekivano ponašanje ili uvodi novi ugovor.
Tokom implementacije, trebao bi povezati svaki smislen izbor s dokazima. Zašto ovaj modul? Zašto ova strategija migracije? Zašto zadržati ovu granu? Objašnjenje bi trebalo opstati i nakon razgovora koji je proizveo kod.
Nakon implementacije, uz promjenu bi trebalo priložiti rezultate verifikacije, odluke iz pregleda i novootkrivena ograničenja. U suprotnom će ih sljedeća osoba — ili sljedeća AI sesija — morati ponovo otkrivati.
To je razlika između alata koji može uređivati repozitorij i sistema koji može učestvovati u inženjerskom radu.
AI treba smanjiti potrebu za rekonstrukcijom, a ne ukloniti prosuđivanje
Bolji kontekst se ponekad predstavlja kao put ka autonomnom razvoju softvera. Njegova neposredna vrijednost je manje dramatična, ali korisnija: smanjenje troška rekonstrukcije stvarnosti prije nego što se napravi promjena.
AI može dovesti izvorni zahtjev uz relevantni kod. Može iznijeti na vidjelo incident koji objašnjava neuobičajenu zaštitnu mjeru. Može povezati metriku koja pada s izdanjem koje ju je promijenilo. Može pokazati da se dva autoritativna izvora ne slažu prije nego što implementacija počne.
Te mogućnosti ne uklanjaju inženjersko prosuđivanje. One ga čine bolje informisanim.
Osoba i dalje mora odlučiti koji je kompromis prihvatljiv, da li je zahtjev potpun i koliki rizik izdanje može nositi. Sistem treba učiniti dokaze vidljivim, a rezonovanje provjerljivim. Ne bi trebao skrivati neizvjesnost iza uglađene zakrpe.
Standard nije „može li generisati kod?”
Standard je „može li objasniti zašto je ovo prava promjena upravo sada?”
Od svjesnosti o repozitoriju do svjesnosti o radu
Asistenti za kodiranje prvo su postali korisni tako što su razumjeli datoteku ispred developera. Svjesnost o repozitoriju bila je sljedeći veliki korak: pronalaženje povezanog koda, praćenje simbola i primjena promjena kroz projekat.
Sljedeći korak je svjesnost o radu oko repozitorija.
To znači povezivanje koda sa specifikacijom koja ga je tražila, razgovorom koji ga je razjasnio, produkcijskim dokazima koji su ga doveli u pitanje i odlukom koju poslije treba zapamtiti. To također znači isključivanje konteksta koji je nerelevantan, zastario ili izvan korisnikovih dozvola.
Dok gradimo Dvina, ovo je jedna od ideja kojoj se stalno vraćamo. Rad se ne odvija unutar jedne datoteke, aplikacije ili razgovora. Značenje živi u vezama između njih i u tome kako se te veze mijenjaju tokom vremena.
Repozitorij ostaje suštinski važan. On je izvršni izvor istine za ponašanje sistema. Jednostavno nije potpuni izvor istine za namjeru proizvoda, operativnu stvarnost ili organizacijsko pamćenje.
Cijela priča mijenja ono što se gradi
Kad imate samo kod, prirodno pitanje je:
Koja promjena odgovara ovom sistemu?
Sa širim kontekstom, pitanje postaje:
Koja promjena odgovara ovom sistemu, ovom zahtjevu, ovoj historiji i ovom trenutku?
To drugo pitanje prepoznaje ograničenja prije nego što prerastu u regresije. Recenzentima daje obrazloženje iza implementacije. Pomaže novim članovima tima da razumiju zašto sistem izgleda tako kako izgleda. AI-ju daje utemeljenu ulogu: ne kao proročištu unutar editora, nego kao učesniku koji može sastaviti dokaze iz cijelog rada.
Vaš repo nikada nije bio cijela priča.
Prilika je u tome da se izgrade sistemi koji mogu pročitati i sve ostalo — i pokazati svoj rad.

