
Kas iš tikrųjų yra 127 commit'ų leidimas
GeekBye v1.7.0 buvo 127 commit'ai per vienuolika dienų. Iš išorės tai atrodo kaip šimtas smulkmenų. Iš vidaus tai buvo dvi didelės funkcijos, supintos kartu, — o viena iš jų iš pradžių buvo sukurta ne toje vietoje, paskui išplėšta ir perstatyta leidimo viduryje. Štai didelio leidimo anatomija.
Yra šio įrašo versija, kuri tiesiog išvardija viską GeekBye v1.7.0 — perkurtą pradžios ekraną, kalibravimo procesą, sutraukiamą šoninę juostą, naujus nustatymus ir taip toliau. Ji būtų tiksli ir nieko jūsų neišmokytų. Nes sąžininga 127 commit'ų leidimo istorija nėra sąrašas. Tai forma.
Štai ta forma. Šimtas dvidešimt septyni commit'ai skamba kaip šimtas dvidešimt septynios smulkmenos. Beveik niekada tai nėra tiesa. v1.7.0 buvo dvi didelės funkcijos, kurtos lygiagrečiai ilgai gyvuojančiose šakose maždaug vienuolika dienų ir supintos kartu pabaigoje. Suprasti didelį leidimą reiškia suprasti tuos du siūlus — ir tą vieną vietą, kur kažką sukūrėme ne toje vietoje ir turėjome tai išplėšti skrydžio metu.
Siūlas pirmas: kalibravimas
Pirmasis siūlas buvo kalibravimas — balsinis AI jūsų komunikacijos įgūdžių vertinimas. Pradedate tiesioginį pokalbį su AI „karjeros koučeriu", pereinate struktūruotą fazių rinkinį (apšilimas, elgesio, techninė komunikacija, reakcija spaudimui, tikslų nustatymas), o pabaigoje gaunate įvertinimą šešiose dimensijose: pasitikėjimas, aiškumas, konkretumas, įsitraukimas, savitvarda, aktualumas. Po gaubtu ji taip pat matuoja konkrečias kalbos metrikas — jūsų kalbėjimo tempą, žodžių parazitų dažnį, ar jūsų pauzės skaitomos kaip strateginės, ar kaip neužtikrintos.
Rezultatas nėra pažymys, tai pradžios taškas. Kalibravimas parodo jūsų stiprybes, augimo sritis ir — o tai svarbiausia — rekomenduojamą sudėtingumą, nuo kurio pradėti praktikuotis. Ji kalibruoja tai, kur produktas turėtų jus sutikti. Kiekvienas įgūdis grįžta kaip išskleidžiama grįžtamojo ryšio kortelė su santrauka, konkrečiu pasiūlymu ir tikra citata iš jūsų paties pokalbio kaip pavyzdžiu. Tai funkcija, ant kurios pastatyta visa likusi praktikos patirtis.
Siūlas antras: visiškai naujas langas
Antrasis siūlas buvo premium pertvarkymas — ir vadinti tai pertvarkymu jį nuvertina. Tai nebuvo esamų ekranų perdažymas; tai iš esmės buvo antras programos langas, išplėtotas šešiose aiškiose fazėse: sutraukiama Notion stiliaus šoninė juosta, antraštės išskleidžiamasis meniu, pakeitęs seną sesijų sąrašą, naršyklės stiliaus navigacija su istorija ir naršymo takeliu bei premium perstatyti Home, Profilių, Susitikimų ir Nustatymų ekranai.
Dvi didelės funkcijos. Štai kas iš tikrųjų buvo tie 127 commit'ai. Ir sunkiausia jų pristatymo dalis buvo ne bet kurios iš jų rašymas — tai buvo pynimas. Abi šakos buvo tarpusavyje priklausomos; viena buvo sulieta į kitą, o kalibravimo šakai teko įtraukti pagrindinę šaką keturis atskirus kartus vien tam, kad neišsiderintų, kol pertvarkymas judėjo po ja. Commit'ų skaičius nėra didelio leidimo kaina. Kaina yra ilgai gyvuojančios šakos ir integracijos tvarka.
Dalis, verta perskaityti: kalibravimą sukūrėme ne toje vietoje
Štai klaida, ir ji gera, nes tokia įprasta.
GeekBye turi tvirtą architektūrinę taisyklę: visos AI operacijos gyvena backend'e. Klientas yra plonas apvalkalas, kalbantis su serveriu. Visi tai žinojo.
Ir vis dėlto kalibravimas iš pradžių buvo sukurtas kliento vietinėje duomenų bazėje. Skirta lentelė, duomenų bazės migracija, 254 eilučių saugykla, IPC tvarkyklės ir 515 eilučių vertinimo klausimų bankas — visa tai gyvenanti vartotojo įrenginyje. Tai veikė. Tai taip pat tyliai pažeidė sutartį, ant kurios pastatyta visa programa.
Po trijų dienų vienas commit'as ištrynė 680 eilučių aštuoniuose failuose, kad visa tai perkeltų į backend, kur kalibravimo duomenys tapo tinkamu serverio pusės modeliu, o klausimų logika ir balų skaičiavimas tapo serverio reikalu. Kitas commit'as visiškai ištrynė 515 eilučių kliento klausimų banką. Diff'as beveik juokingas: vienas įterpimas, šeši šimtai aštuoniasdešimt ištrynimų.
Niekas neketino rašyti 680 eilučių vienkartinio kodo. Tai nutiko taip, kaip visada nutinka: trumpesnis kelias kliento pusėje yra čia pat, prototipuoti lokaliai greičiau, o „perkelsime į backend vėliau" atrodo nekenksminga. Bet kai jūsų architektūra jau sako, kur gyvena tiesos šaltinis, kurti tai bet kur kitur nėra trumpesnis kelias — tai iš anksto susiplanuotas papildomas darbas. Pamoka, kuri liko: padėkite tai ten, kur sako sutartis, iš pirmo karto, net kai vietinę versiją greičiau pastatyti.
Klaida, kurią galėjo rasti tik integracija
Dar vienas įrodymas, nes tai būdingas didelių leidimų gedimo režimas. Kai tik kalibravimas ir nauja navigacija buvo sujungti ir iš tikrųjų veikė, programa pradėjo įjunginėti užklausų dažnio limitą — HTTP 429 — be akivaizdžios priežasties.
Priežastis buvo grynai integracinė. Kalibravimo būsena buvo gaunama komponento lygmenyje, todėl kiekviena navigacija ją gaudavo iš naujo — o React griežtas režimas, kuris tyčia du kartus iškviečia efektus kūrimo metu, kad atskleistų klaidas, tai padvigubino dar kartą. Rezultatas buvo nuo keturių iki aštuonių identiškų kalibravimo užklausų, iššaunamų kiekvieną kartą keičiant ekraną, — pakankamai, kad įsijungtų serverio dažnio ribotuvas. Pataisymas konsolidavo duomenų gavimą į porą iškvietimų prijungimo metu.
Šios klaidos nebūtumėte radę testuodami vien kalibravimą ar vien navigaciją. Ji egzistuoja tik ties siūle — ten, kur susitinka dvi nepriklausomai teisingos funkcijos. Tai mokestis, kurį ima didelis leidimas: paskutinė mylia yra ne funkcijų kūrimas, o atradimas visko, kas sugenda tik tada, kai jos pagaliau atsiduria tame pačiame kambaryje.
Trys dalykai, kurių išmokė didelis leidimas
- 127 commit'ų leidimas yra dvi ar trys didelės temos, o ne šimtas mažų. Suraskite siūlus. Darbas — ir rizika — glūdi tame, kaip jie pinasi, o ne skaičiuje.
- Padėkite tiesos šaltinį ten, kur sako sutartis, iš pirmo karto. Ištrynėme 680 eilučių, perkeldami kalibravimą iš kliento į backend. Vietinis trumpesnis kelias yra iš anksto suplanuotas papildomas darbas; architektūra jau davė jums atsakymą.
- Integracija atskleidžia gedimus, neprieinamus izoliacijai. 429 audra gyveno ties siūle tarp dviejų teisingų funkcijų ir pasirodė tik tada, kai jos ėmė veikti kartu. Numatykite biudžetą integraciniam perėjimui, o ne tik kiekvienos funkcijos testavimui atskirai.
Tai v1 eros giminaitis istorijos, kurią papasakotume vėl kur kas didesniu mastu — žr. ko iš tikrųjų reikalauja antra versija: 206 commit'ų sąžiningų būsenų (v2.0.0), kur ta pati tiesa „didelis skaičius iš tikrųjų yra kelios didelės idėjos" atsiskleidžia per visą v2 perrašymą. Ankstesnį v1 istorijos skyrių žr. kaip transliuoti tiesioginę ataskaitą be mirgėjimo (v1.6.13); o visą lanką — programinės įrangos pristatymo iki tobulumo anatomiją.