Vaš repozitorijum nikada nije bio cela priča

Kod pokazuje šta postoji. Razlozi se nalaze u specifikacijama, incidentima, podacima i odlukama.

Vaš repozitorijum nikada nije bio cela priča

Otvorite repozitorijum šest meseci nakon što je funkcionalnost isporučena i možete rekonstruisati mnogo toga. Možete ispratiti arhitekturu, pregledati šemu, pročitati testove i videti tačno koje su linije izmenjene.

Ono što obično ne možete da rekonstruišete jeste razgovor zbog kog 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 sprečava duplirane transakcije u nizvodnom sistemu. Neće pokazati da je jednostavniji interfejs odbačen 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 istorije koda. Nameru čuva samo kada je tim svesno zapiše i održi povezanom sa implementacijom.

Taj jaz je oduvek bio deo softverskog inženjerstva. AI alati za programiranje čine ga vidljivijim. Sistem može da pročita svaki fajl u repozitorijumu, isprati svaki simbol i generiše tehnički uverljiv patch, a da i dalje reš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 promena u softveru zavisi od pet različitih slojeva dokaza.

  1. Namera — Koji ishod traži korisnik, klijent ili poslovanje? To može da se nalazi u specifikaciji, tiketu, razgovoru sa podrškom ili belešci sa sastanka.
  2. Ograničenja — Šta ne sme da se pokvari? Obećanja o kompatibilnosti, bezbednosne granice, propisi, ugovori, budžeti i rokovi često se nalaze van repozitorijuma.
  3. Implementacija — Kako sistem danas funkcioniše? Kod, testovi, šeme, zavisnosti i konfiguracija deploy-a čine ovaj sloj.
  4. Dokazi iz rada sistema — Šta se dešava u stvarnom sistemu? Logovi, tragovi, metrike, produkcioni podaci i izveštaji o incidentima mogu da protivreče pretpostavkama koje u kodu deluju razumno.
  5. Istorija odluka — Zašto je izabran trenutni pristup? Pull request-ovi, diskusije o dizajnu, odbačene alternative i prethodni incidenti sadrže odgovor.

Repozitorijum je najjači u trećem sloju. Sadrži delove ostalih, ali retko dovoljno da ih predstavi u potpunosti.

Ovo je važno zato što se softverski kvarovi često pojavljuju na granicama između slojeva. Implementacija odgovara zastareloj specifikaciji. Ispravka zadovoljava tiket, ali krši operativno ograničenje. Testovi prolaze zato što kodiraju jučerašnje pretpostavke. Kod je interno dosledan, dok produkcioni podaci prate obrazac koji niko nije dokumentovao.

Patch koji je lokalno ispravan i dalje može da bude pogrešna izmena.

Na šta repozitorijum sam po sebi ne može da odgovori

Zamislite korisnika koji izmeni dokument, a zatim potraži ažuriranu rečenicu, samo da bi u rezultatima i dalje video staru verziju. „Neka se pretraga ažurira odmah“ zvuči kao jasan zahtev. Repozitorijum otkriva nekoliko mogućih mesta od kojih može da se krene, ali sam po sebi ne može da odredi koje je ispravno rešenje.

Pitanje Verovatan izvor
Koja verzija dokumenta je merodavna? Izvorni dokument i istorija revizija
Gde se stari tekst i dalje zadržava? Logovi sinhronizacije, izlaz ekstrakcije, indeks pretrage ili keš
Šta „odmah“ znači za ovaj proizvod? Obećanje proizvoda ili cilj nivoa usluge
Da li su se dozvole dokumenta promenile zajedno sa njegovim sadržajem? Izvorne dozvole i istorija revizije
Da li je zastareo rezultat ograničen na jednog korisnika, izvor ili region? Tragovi zahteva i metrike iz produkcije

Kod za pretragu može da objasni kako se rezultati vraćaju. Ne može da vam kaže da li je stvarni problem kašnjenje sinhronizacije, zastarela 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 deluje zastarelo možda i dalje podržava nasleđenog klijenta. Servis koji izgleda kao duplikat možda razdvaja podatke sa različitim zahtevima za dozvole. Provera koja deluje preterano možda je jedini trag u kodu o incidentu u produkciji koji trenutni tim nikada nije video.

Uklanjanje složenosti je vredno. Uklanjanje istorije prerušene u složenost je skupo.

Više konteksta i dalje može da dovede do pogrešnog odgovora

Očigledno rešenje je da se AI-ju da više materijala: ceo repozitorijum, svaki tiket, svaki dokument, svaka poruka i svaki log.

To stvara pristup, ne razumevanje.

Izvori mogu biti zastareli, protivrečni, spekulativni ili napisani za različitu publiku. Brainstorming ne bi smeo da ima veću težinu od odobrene specifikacije. Zahtev star šest meseci ne bi smeo prećutno da poništi jučerašnju odluku o proizvodu. Produkcioni log treba povezati sa izdanjem, okruženjem i putanjom koda koji su ga proizveli. Zahtev korisnika ne bi smeo da se tretira kao univerzalni zahtev bez provere opsega.

Ozbiljan sistem za kontekst zato zahteva više od samog pronalaženja informacija. Potreban mu je način da rasuđuje o sledećem:

  • Autoritet: Kome je od izvora dozvoljeno da definiše zahtev?
  • Aktuelnost: Koje informacije su važeće, a šta je prevaziđeno?
  • Poreklo: Odakle potiče svaka tvrdnja, ograničenje ili zaključak?
  • Odnosi: Koji problem, izdanje, korisnik, skup podataka i putanja koda pripadaju zajedno?
  • Dozvole: Koji izvori smeju da se koriste za ovaj zadatak i prikažu ovoj osobi?

Kontekst nije gomila tokena. To je graf sa vremenom, autoritetom i granicama.

Više konteksta treba da donese više dokaza, a ne više samopouzdanja bez dokaza.

Prava jedinica rada je promena

Editori i alati za programiranje organizovani su oko fajlova zato što su fajlovi ono što menjamo. Inženjerski timovi organizovani su oko promena.

Promena počinje razlogom. Postaje zahtev, 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 novom rundom arheologije.

AI sistem koji radi na stvarnom softveru trebalo bi da prati taj životni ciklus.

Pre implementacije, trebalo bi da identifikuje zahtev, relevantna ograničenja i sve izvore koji su u sukobu. Trebalo bi da zna da li ispravlja defekt, menja očekivano ponašanje ili uvodi novi ugovor.

Tokom implementacije, trebalo bi da poveže svaki smislen izbor sa dokazima. Zašto ovaj modul? Zašto ova strategija migracije? Zašto zadržati ovu granu? Objašnjenje bi trebalo da opstane i nakon razgovora koji je proizveo kod.

Nakon implementacije, trebalo bi da uz izmenu priloži rezultate verifikacije, odluke donete tokom pregleda i novootkrivena ograničenja. U suprotnom, sledeća osoba — ili sledeća AI sesija — moraće ponovo da ih otkriva.

To je razlika između alata koji može da menja repozitorijum i sistema koji može da učestvuje u inženjerskom radu.

AI treba da smanji potrebu za rekonstrukcijom, a ne da ukloni prosuđivanje

Bolji kontekst se ponekad predstavlja kao put ka autonomnom razvoju softvera. Njegova neposredna vrednost je manje dramatična, ali korisnija: smanjenje troška rekonstrukcije stvarnog stanja pre nego što se napravi izmena.

AI može da postavi izvorni zahtev pored relevantnog koda. Može da izvuče na površinu incident koji objašnjava neuobičajenu zaštitnu meru. Može da poveže metriku koja pokazuje loš rezultat sa izdanjem koje ju je promenilo. Može da pokaže da se dva autoritativna izvora ne slažu pre nego što implementacija počne.

Te mogućnosti ne uklanjaju inženjersko prosuđivanje. One ga čine bolje informisanim.

Čovek i dalje mora da odluči koji je kompromis prihvatljiv, da li je zahtev potpun i koliki rizik jedno izdanje može da nosi. Sistem treba da učini dokaze vidljivim, a rezonovanje proverljivim. Ne bi trebalo da prikriva neizvesnost iza uglađene zakrpe.

Merilo nije „može li da generiše kod?“

Merilo je „može li da objasni zašto je ovo prava izmena baš sada?“

Od svesti o repozitorijumu ka svesti o radu

Asistenti za kodiranje prvo su postali korisni tako što su razumeli fajl pred programerom. Svest o repozitorijumu bila je sledeći veliki korak: pronalaženje povezanog koda, praćenje simbola i primena izmena kroz ceo projekat.

Sledeći korak je svest o radu koji okružuje repozitorijum.

To znači povezivanje koda sa specifikacijom koja ga je zahtevala, razgovorom koji ga je razjasnio, produkcionim dokazima koji su ga doveli u pitanje i odlukom koju kasnije treba zapamtiti. To takođe znači isključivanje konteksta koji je nerelevantan, zastareo ili izvan korisnikovih dozvola.

Dok gradimo Dvina, ovo je jedna od ideja kojoj se stalno vraćamo. Rad se ne odvija unutar jednog fajla, aplikacije ili razgovora. Značenje živi u vezama između njih i u tome kako se te veze menjaju tokom vremena.

Repozitorijum ostaje suštinski važan. On je izvršni izvor istine o ponašanju sistema. Jednostavno nije potpun izvor istine o nameri proizvoda, operativnoj stvarnosti ili organizacionom pamćenju.

Cela priča menja ono što se gradi

Kada imate samo kod, prirodno pitanje je:

Koja izmena odgovara ovom sistemu?

Sa širim kontekstom, pitanje postaje:

Koja izmena odgovara ovom sistemu, ovom zahtevu, ovoj istoriji i ovom trenutku?

To drugo pitanje prepoznaje ograničenja pre nego što se pretvore u regresije. Recenzentima daje obrazloženje iza implementacije. Pomaže novim članovima tima da razumeju zašto sistem izgleda baš tako kako izgleda. AI-ju daje utemeljenu ulogu: ne kao proročištu unutar editora, već kao učesniku koji može da sastavi dokaze iz čitavog rada.

Vaš repo nikada nije bio cela priča.

Prilika je u tome da se izgrade sistemi koji mogu da pročitaju i sve ostalo — i da pokažu svoj postupak.

Pridružite se Dvina

Registrujte se besplatno i objedinite sve svoje alate u jednom jednostavnom radnom prostoru.

Истражи још

Prikupljamo samo analitičke podatke neophodne za nesmetan rad naših usluga.