Steven
Steven6 min čítania

Čo naozaj stojí verzia 2: 206 commitov úprimných stavov

GeekBye v2 nebolo vydaním funkcií. Bolo to 206 commitov namierených na jedinú myšlienku: aplikácia nikdy nemá klamať o vlastnom stave. Tu je, koľko to stojí — vrátane jednoriadkovej chyby v lockfile, ktorá nám takmer zabránila vydať čokoľvek z toho.

Spoľahlivosť
Inžinierstvo
Vydanie
Vydania GeekBye
Čo naozaj stojí verzia 2: 206 commitov úprimných stavov

Väčšina vydaní „verzie 2" je kopa nových funkcií s väčším číslom na obale. GeekBye v2 bolo opakom. Neprinieslo takmer žiadnu novú schopnosť viditeľnú pre používateľa. Jeho 206 commitov bolo namierených na jedinú, neefektnú myšlienku:

Aplikácia by vám nikdy nemala ukázať stav, ktorý nie je pravdivý.

Znie to samozrejme, kým nespočítate, koľkými spôsobmi desktopová aplikácia potichu klame. Ukáže fajočku na nahrávaní, ktoré je stále na ceste. Povie „pripojené" nad soketom, ktorý zomrel pred minútou. Mlčí, kým sa váš prepis stráca cestou. Nič z toho nie je pád. Je to horšie ako pády, pretože aplikácia vyzerá v poriadku, hoci sa mýli — a zistíte to až neskôr, keď nahrávka, ktorú ste potrebovali, nie je na mieste.

v2 bolo vydaním, v ktorom sme sa vydali na lov za každou z týchto malých lží.

Lož, ktorú sme nenávideli najviac: nahrávanie, ktoré „prešlo"

GeekBye vie zálohovať vaše nahrávky na Google Drive. Vo v1 sa pripojenie k Drive považovalo za detail na pozadí — ak fungovalo, super; ak nie, zlyhanie bolo väčšinou neviditeľné. Aplikácia naďalej vyzerala pripojená. Predpokladali ste, že vaše nahrávky sú v bezpečí. Niekedy neboli.

v2 to prestavalo okolo úprimných stavov pripojenia. Drive je teraz vždy v jednom z niekoľkých explicitných, pravdivých stavov — pripojené, opätovne sa pripája, odpojené — a aplikácia vysiela každú zmenu tohto stavu celému rozhraniu v okamihu, keď sa stane. Keď je pripojenie prerušené, globálny banner opätovného pripojenia vám to povie, všade, priamo. Aplikácia už nepredstiera, že nahrávanie prešlo, keď neprešlo. Ak sa vaša záloha práve teraz nemôže uskutočniť, viete to práve teraz — a nie o týždeň, keď pôjdete hľadať súbor.

Pod kapotou je to malá architektúra, nie slogan: jeden zdroj pravdy pre pripojenie, udalosť, ktorá sa rozvetví do každej časti rozhrania, keď sa zmení, a banner, ktorý číta priamo z tohto stavu. Neexistuje cesta, kde je pripojenie prerušené a rozhranie vyzerá funkčné, pretože čítajú z toho istého faktu.

Lož strateného nahrávania

Druhou veľkou opravou úprimnosti bolo obnovenie nahrávok. Prepis v reálnom čase potrebuje živé pripojenie. Vo v1, ak toto pripojenie počas relácie štiklo — zablikanie Wi-Fi, tunel, opätovné pripojenie VPN — zvuk počas výpadku mohol jednoducho zmiznúť. Prepis mal dieru a nič vám to nepovedalo.

v2 zmenilo zmluvu: zvuk sa uchováva lokálne počas výpadku pripojenia a zosúladí sa potom. Keď spojenie padne, GeekBye drží zvuk v bezpečí na vašom počítači; keď sa vráti, tento vyrovnávaný zvuk sa odošle a zošije do prepisu na správne miesto. Zlých tridsať sekúnd siete vás už nestojí tridsať sekúnd stretnutia. Toto je základ, na ktorom neskoršie vydania spoľahlivosti stavali priamo — mechanika opätovného pripojenia a vyrovnávania v článku prečo sa váš AI zapisovač zastaví pri zlom Wi-Fi je tá istá myšlienka, len zocelená.

Lož búrky vyskakovacích okien

Existuje jemnejšia nečestnosť v tom, ako aplikácie hlásia problémy: hlásia ich priveľa. Jeden nestabilný moment siete môže vystreliť tú istú chybu päťkrát, a zrazu máte kopu identických červených toastov, ktoré pochovávajú jediné dôležité posolstvo. To tiež nie je úprimné — je to šum, ktorý predstiera informáciu.

Preto v2 pridalo škrtenie toastov podľa kľúča kategórie a smerovanie chýb. Chyby sú zoskupené podľa toho, čím naozaj sú, a každá kategória má obmedzenú frekvenciu, takže jeden základný problém vyprodukuje jedno jasné posolstvo, nie kanonádu. Problém s limitom frekvencie sa smeruje k správe o limite frekvencie; problém s pripojením sa smeruje k správe o pripojení. Aplikácia vám povie čo je pravda, raz — tá istá disciplína, ktorá neskôr uchránila 429 pred tým, aby sa vydával za odhlásenie v článku deň, keď naša aplikácia zaDDoSovala samu seba.

Číslo 206 je podstatou

Úprimné stavy, banner opätovného pripojenia, obnovenie nahrávok, smerovanie toastov — to sú štyri myšlienky. Vydanie malo 206 commitov. Kam išiel zvyšok?

Do neefektného dlhého chvosta, ktorý „nikdy nezobraz falošný stav" v skutočnosti vyžaduje. Každé miesto, kde sa staré rozhranie mohlo rozísť s realitou, bolo treba nájsť a prepojiť tak, aby čítalo z pravdy, nie zo zastaranej kópie. Každá cesta opätovného pripojenia musela aktualizovať zdieľaný stav namiesto lokálneho hádania. Desiatky malých opráv spoľahlivosti naprieč nahrávaním, prepisom a nahrávaniami — každá zatvára konkrétnu medzeru, kde aplikácia mohla vyzerať správne, hoci sa mýlila.

Toľko stojí skutočná „verzia 2", keď je cieľom dôvera namiesto funkcií. Neexistuje jeden titulkový commit. Existuje 206 malých a vydanie pôsobí ako jedna vec — pokoj — len preto, že všetkých 206 ťahá tým istým smerom.

Vydanie takmer nevyšlo

Tu je vojnová historka, a dobrá, pretože je o tom, ako naša vlastná aplikácia klamala nám.

Keď režete vydanie, skript na zvýšenie verzie opečiatkuje nové číslo naprieč projektom. Pri v2.0.0 aktualizoval verziu aplikácie — ale package-lock.json, presná účtovná kniha závislostí npm, zostal ukazujúci na starú verziu, 1.9.0. Lokálne bolo všetko v poriadku; nikto nepreinštalúva závislosti len preto, aby zostavil. Ale CI spúšťa npm ci a celá úloha npm ci je odmietnuť pokračovať, ak sa lockfile nezhoduje s manifestom. Je to funkcia prísnosti — a urobila presne to, čo mala, tým, že položila zostavu pri najväčšom vydaní, aké sme kedy rezali.

Potom pod ňou vyplávala druhá, zákernejšia. Novší npm odstrihol voliteľnú tranzitívnu závislosť — balík encoding, ktorý ťahá node-fetch — z lockfile ako zbytočnú. Lenže čistá inštalácia nášho CI ju potrebovala, takže inštalácia sa pokazila spôsobom, ktorý nemal nič spoločné s naším kódom a všetko spoločné s tým, že účtovná kniha bola jemne nesprávna.

Obe boli jednoriadkové opravy: znovu zosynchronizovať lockfile so skutočnou verziou, obnoviť odstrihnutú položku. Obe sú tiež dokonalé, pokorujúce príklady presne toho, o čom bolo v2 — stavu, ktorý tvrdil, že je pravdivý, a nebol. Lockfile má byť úprimným záznamom toho, od čoho aplikácia závisí. Keď sa odchýlil od reality, zostava urobila presne to, čo teraz robí naša aplikácia pre používateľov: odmietla predstierať, že je všetko v poriadku. Vydávanie vydania spoľahlivosti sa ukazuje ako problém spoľahlivosti až na samé dno.

Tri veci, ktoré nás v2 naučilo

  1. Nebezpečné zlyhania sú tie tiché. Pád sa ohlási. Falošné „pripojené", fantómové úspešné nahrávanie, prepis s neviditeľnou dierou — stoja vás dôveru práve preto, že nič nevyzerá zle. Lovte tiché lži.
  2. Úprimnosť je architektúra, nie posolstvo. Nemôžete pripevniť „hovor pravdu" na rozhranie ako banner. Banner musí čítať z toho istého jediného zdroja pravdy ako všetko ostatné, inak sa stane ďalšou vecou, ktorá sa môže mýliť. Jeden fakt, rozvetvený von — nikdy dve kópie, ktoré sa môžu rozísť.
  3. Verzia 2 hodná svojho čísla je väčšinou neviditeľná. Ak je váš v2 zoznam funkcií, je to v1.5 s marketingom. Skutočný v2 je 206 commitov, na ktoré nikto nedokáže ukázať jednotlivo, ktoré sa spočítajú do produktu, ktorý vám jednoducho prestane klamať.

GeekBye v2.0.0 je základ, na ktorom stavalo každé vydanie odvtedy. O tom, čo tento základ nesie, si prečítajte prečo sa váš AI zapisovač zastaví pri zlom Wi-Fi, deň, keď naša aplikácia zaDDoSovala samu seba (v2.0.1) a živý prepis, keď firewall blokuje WebSockety (v2.0.8). O pokoji, ktorému to všetko slúžilo, čo je nové v GeekBye v2.