
Mis on tegelikult 127 commiti sisaldav väljalase
GeekBye v1.7.0 oli 127 commiti üheteistkümne päevaga. Väljastpoolt näeb see välja nagu sada väikest asja. Seestpoolt oli see kaks suurt funktsiooni omavahel põimituna — ja üks neist ehitati valesse kohta, seejärel kisti see keset väljalaset välja ja ehitati uuesti. Siin on suure väljalase anatoomia.
On olemas versioon sellest blogipostitusest, mis lihtsalt loetleb kõik, mis GeekBye v1.7.0-s on — ümberkujundatud avaekraan, kalibreerimisvoog, kokkuvolditav külgriba, uued seaded ja nii edasi. See oleks täpne ja ei õpetaks sulle midagi. Sest ausa loo 127 commitit sisaldava väljalase kohta ei tee loetelu. Selle teeb kuju.
Siin on kuju. Sada kakskümmend seitse commitit kõlab nagu sada kakskümmend seitse väikest asja. See pole peaaegu kunagi nii. v1.7.0 oli kaks suurt funktsiooni, ehitatud paralleelselt pikaealistel harudel umbes üheteistkümne päeva jooksul, lõpuks omavahel põimituna. Suure väljalase mõistmine tähendab nende kahe niidi mõistmist — ja selle ühe koha, kus ehitasime midagi valesse kohta ja pidime selle keset lendu tagasi välja kiskuma.
Niit üks: kalibreerimine
Esimene niit oli kalibreerimine — sinu suhtlemisoskuste AI-häälhindamine. Alustad reaalajakõnet AI "karjäärinõustajaga", töötad läbi struktureeritud faaside komplekti (soojendus, käitumuslik, tehniline suhtlus, surve all reageerimine, eesmärkide seadmine) ja lõpus saad hinde kuue mõõtme lõikes: enesekindlus, selgus, konkreetsus, kaasatus, meelekindlus, asjakohasus. Selle all mõõdab see ka konkreetseid kõnemõõdikuid — sinu kõnetempot, täitesõnade sagedust, seda, kas su pausid mõjuvad strateegilistena või kõhklevatena.
Väljund pole hinne, vaid lähtepunkt. Kalibreerimine toodab sinu tugevused, kasvualad ja — mis kõige tähtsam — soovitatava raskusastme, millest harjutamist alustada. See kalibreerib, kus toode peaks sinuga kohtuma. Iga oskus tuleb tagasi laiendatava tagasisidekaardina, millel on kokkuvõte, konkreetne soovitus ja tegelik tsiteeritud lause su enda kõnest näitena. See on funktsioon, millele kogu ülejäänud harjutamiskogemus on üles ehitatud.
Niit kaks: täiesti uus aken
Teine niit oli premium-ümberkujundus — ja seda ümberkujunduseks nimetamine alahindab seda. See polnud olemasolevate ekraanide ümbervärvimine; see oli sisuliselt teine rakenduseaken, välja ehitatud kuues selgesõnalises faasis: kokkuvolditav Notioni-stiilis külgriba, päise rippmenüü, mis asendas vana seansside loendi, brauseristiilis navigeerimine ajaloo ja leivapururadadega ning avaekraani, profiilide, kohtumiste ja seadete premium-taasehitused.
Kaks suurt funktsiooni. Selline 127 commitit tegelikult oligi. Ja nende väljalaskmise raskeim osa polnud kummagi kirjutamine — see oli põimimine. Kaks haru olid teineteisest sõltuvad; üks liideti teise sisse ja kalibreerimisharu pidi main-haru sisse tõmbama neli eraldi korda, lihtsalt selleks, et mitte sünkroonist välja triivida, kui ümberkujundus selle all liikus. Commitite arv pole suure väljalase kulu. Pikaealised harud ja integreerimise järjekord on.
Osa, mis on lugemist väärt: ehitasime kalibreerimise valesse kohta
Siin on viga, ja see on hea viga, sest see on nii tavaline.
GeekBye-l on kindel arhitektuuriline reegel: kõik AI-operatsioonid elavad backendis. Klient on õhuke koorik, mis suhtleb serveriga. Kõik teadsid seda.
Ja ometi ehitati kalibreerimine esmalt kliendi kohalikku andmebaasi. Spetsiaalne tabel, andmebaasi migratsioon, 254-realine repositoorium, IPC-käsitlejad ja 515-realine hindamisküsimuste pank — kõik elamas kasutaja masinas. See töötas. See rikkus ka vaikselt lepingut, millele kogu rakendus on üles ehitatud.
Kolm päeva hiljem kustutas üks commit 680 rida kaheksas failis, et viia see kõik backendi, kus kalibreerimisandmetest sai korralik serveripoolne mudel ning küsimusteloogikast ja hindamisest sai serveri mure. Teine commit kustutas 515-realise kliendi küsimustepanga täielikult. Diff on peaaegu naljakas: üks lisamine, kuussada kaheksakümmend kustutamist.
Keegi ei asunud kirjutama 680 rida äravisatavat koodi. See juhtus nii, nagu see alati juhtub: kliendi otsetee on otse siin, lokaalselt prototüüpida on kiirem ja "viime selle hiljem backendi" tundub kahjutu. Kuid kui su arhitektuur juba ütleb sulle, kus tõeallikas elab, pole selle ehitamine mujale otsetee — see on ümbertegemine, mille oled endale ise ette planeerinud. Õppetund, mis külge jäi: pane see sinna, kuhu leping ütleb, esimesel korral, isegi kui kohalik versioon on kiirem püsti panna.
Viga, mille ainult integreerimine sai leida
Veel üks tõend, sest see on suurte väljalasete tunnusliku rikke laad. Kui kalibreerimine ja uus navigeerimine olid omavahel ühendatud ja tegelikult töötasid, hakkas rakendus ilma ilmse põhjuseta ületama päringulimiiti — HTTP 429-sid.
Põhjus oli puhas integreerimine. Kalibreerimise olekut pärimiti komponendi tasemel, seega iga navigeerimine pärimiti seda uuesti — ja Reacti range režiim, mis meelega kutsub arenduses efekte kaks korda välja, et vead esile tuua, kahekordistas selle veel kord. Tulemuseks oli neli kuni kaheksa identset kalibreerimispäringut iga ekraanivahetuse kohta, piisavalt, et ületada serveri päringulimiiter. Parandus konsolideeris pärimise mõneks päringuks laadimisel.
Sa poleks saanud seda viga leida, testides ainult kalibreerimist või ainult navigeerimist. See eksisteerib ainult õmbluskohas — kus kaks iseseisvalt korrektset funktsiooni kohtuvad. See on maks, mida suur väljalase nõuab: viimane miil pole funktsioonide ehitamine, vaid kõige selle avastamine, mis läheb katki alles siis, kui need lõpuks samas ruumis on.
Kolm asja, mida suur väljalase õpetas
- 127 commitit sisaldav väljalase on kaks või kolm suurt teemat, mitte sada väikest. Leia niidid. Töö — ja risk — elab selles, kuidas need omavahel põimuvad, mitte arvus.
- Pane tõeallikas sinna, kuhu leping ütleb, et see elab, esimesel korral. Kustutasime 680 rida, teisaldades kalibreerimist kliendilt backendi. Kohalik otsetee on ümbertegemine, mille oled ette planeerinud; arhitektuur ütles sulle juba vastuse.
- Integreerimine toob esile rikked, mida isoleeritud testimine ei suuda. 429-torm elas kahe korrektse funktsiooni õmbluskohas ja ilmus alles siis, kui need koos töötasid. Planeeri eelarve integreerimiskäigule, mitte ainult funktsioonipõhisele testimisele.
See on v1-ajastu nõbu loole, mida jutustaksime uuesti palju suuremas mastaabis — vaata mis tegelikult on vaja teise versiooni jaoks: 206 commiti ausaid olekuid (v2.0.0), kus sama "suur number on tegelikult paar suurt ideed" tõde mängib välja üle kogu v2 ümberkirjutuse. v1 loo eelmise peatüki jaoks vaata kuidas voogedastada live-raportit ilma virvenduseta (v1.6.13); ja kogu kaare jaoks tarkvara täiuslikkuseni tarnimise anatoomia.