Steven
Steven6 min čítania

Pokojný softvér: Ako sme zabili blikajúci prepínač a naučili chat povedať, v akom režime práve je

Dve malé vydania GeekBye, žiadne titulné funkcie — len prepínač v nastaveniach, ktorý prestal blikať, a chatovací asistent, ktorý vám konečne povie, či odpovedal v režime stretnutia alebo v režime kódovania. Toto je skutočná cena „pokojného softvéru", jeden detail po druhom.

Produkt
Dizajn
Inžinierstvo
Vydania GeekBye
Pokojný softvér: Ako sme zabili blikajúci prepínač a naučili chat povedať, v akom režime práve je

Nie každé vydanie je vojnová historka. Niektoré sú len zoznamom drobných, takmer neviditeľných vecí, ktoré boli potichu chybné — takých, ktoré nič nepoložia, ale spôsobujú, že aplikácia pôsobí trochu nedôveryhodne, trochu roztrasene, trochu ako-nie-vaša. GeekBye v2.0.3 a v2.0.5 boli dve z nich. Žiadne nové funkcie. Len pokoj.

„Pokojný softvér" znie ako nálada. V skutočnosti je to kopa konkrétnych rozhodnutí. Tu sú tri z nich.

Prepínač, ktorý sa nevedel rozhodnúť

Bol tam jeden prepínač v nastaveniach — ten, ktorý ovláda obnovu zvuku — a pri kliknutí blikal. Zapnete ho a na zlomok sekundy ukáže zapnuté, potom skočí späť na vypnuté a nakoniec sa ustáli. Drobné vizuálne zakoktanie, ale vaše oko ho zachytí a číta ho ako aplikácia si nie je istá, čo robí.

Príčinou je klasický súbeh v používateľskom rozhraní zvaný optimistická aktualizácia. Keď kliknete na prepínač, aplikácia má dve možnosti: počkať, kým sa nastavenie naozaj uloží, a až potom aktualizovať spínač (správne, ale pôsobí to spomalene), alebo prepnúť spínač okamžite a uložiť na pozadí (pôsobí to okamžite). GeekBye robilo to druhé — prepnúť okamžite — ale zároveň znova načítalo uloženú hodnotu, keď sa vrátila. Takže postupnosť bola: kliknete, spínač sa optimisticky prepne na zapnuté, o chvíľu dorazí skutočná uložená hodnota a na jeden snímok si tie dve odporovali, takže spínač viditeľne poskočil.

Oprava spočíva v tom, aby sa optimistická hodnota a potvrdená hodnota čisto zhodovali — spínač sa zaviaže k stavu, ktorý ste zvolili, a prestane o sebe pochybovať, keď sa uloženie potvrdí. Popri tom v2.0.3 spravilo neokázalú úpravu textov: popis obnovy zvuku sa skrátil, aby ladil so susednými riadkami, a formulácie v nastaveniach sa spoľudštili. Nič z toho nie je funkcia. Všetko z toho je rozdiel medzi panelom nastavení, ktorý pôsobí naprogramovane, a takým, ktorý pôsobí dopracovane.

Prehliadka, ktorá nechcela odísť

Prehliadky pre nových používateľov sú užitočné presne raz. Problém je práve v tej jedinečnosti: keď ju už raz uvidíte, úvodné prekrytie, ktoré sa nedá zrušiť, sa stane neporiadkom, ktorý signalizuje táto aplikácia si stále myslí, že ste nováčik. v2.0.3 opravilo oba konce toho — produktovú prehliadku teraz možno skryť, a ak ju naozaj chcete späť, je tam tlačidlo Znova prehrať prehliadku. Ukážte ju, keď pomáha, ustúpte, keď nie, a nechajte používateľa privolať si ju za jeho podmienok. Rešpektovať, že používateľ už nie je nováčik, je vlastnou malou formou pokoja.

Asistent, ktorý nechcel povedať, ako uvažuje

Toto je to, na čom naozaj záležalo, a spája sa to s hlbším problémom, ktorý sme naháňali.

Asistent GeekBye odpovedá inak v závislosti od kontextu. Na stretnutí by „čo si o tomto myslíš?" malo dostať konverzačnú odpoveď zohľadňujúcu stretnutie. Počas kódovania by tie isté slová mali dostať technickú odpoveď. Backend teda prežene otázku správnym rámcom — nazvime ho režim stretnutia alebo režim kódovania — a toto uchopenie skutočne mení odpoveď, ktorú dostanete.

Problém: aplikácia vám nikdy nepovedala, ktorý režim odpovedal. Takže keď vám asistent dal odpoveď s nádychom kódovania na konverzačnú otázku — alebo odpovedal na otázku o kóde, akoby ste sa len bavili — vyzeralo to, akoby sa AI jednoducho mýlila. Nemýlila sa; bola v tom druhom režime a vy ste to nemali ako vidieť. Skrytý stav spôsoboval, že správne správanie vyzeralo pokazené. (Samotná logika režimu je väčší kus práce — orchestrátor, ktorý rozhoduje, ako odpovedať na nekódovacie otázky počas kódovacej relácie — ale nič z toho vám nie je nanič, ak nevidíte rozhodnutie, ktoré spravil.)

v2.0.5 pridalo do chatu odznak režimu iba na čítanie: malý štítok, ktorý ukazuje, či asistent odpovedal v režime stretnutia alebo v režime kódovania. Iba na čítanie je celá podstata — nie je to ovládací prvok, ktorý nastavujete, je to okno do rozhodnutia, ktoré systém už spravil. Prestanete hádať, prečo odpoveď pôsobí zvláštne; vidíte rámec, z ktorého vzišla.

Detail, vďaka ktorému je odznak poctivý

Tu je inžinierske rozhodnutie, ktoré stojí za to posunúť ďalej, lebo je to práve to, čo oddeľuje priskrutkovaný indikátor od dôveryhodného.

Informácia o režime prichádza z backendu ako súčasť streamovanej odpovede — malý snímok mode v prúde udalostí odosielaných zo servera. Ale starší klient, ktorý predchádza tejto funkcii, by nevedel, čo je snímok mode; v lepšom prípade ho ignoruje, v horšom vykreslí niečo skomolené. Klient teda oznámi svoju schopnosť: pošle hlavičku požiadavky s odkazom viem zobraziť odznak režimu, a backend odošle snímok mode iba klientom, ktorí ju poslali. Starí klienti nikdy nedostanú signál, ktorý nevedia spracovať; noví klienti dostanú presne ten snímok, o ktorý požiadali.

Je to jednohlavičkové podanie rúk a je to rozdiel medzi „pridali sme funkciu" a „pridali sme funkciu bez toho, aby sme pokazili niekoho, kto ešte neaktualizoval." Tá istá revízia zpevnila zvyšok správania: odznak sa vymaže sám pri resete a keď sa zmení kontext konverzácie (zastaraný štítok režimu je vlastnou malou lžou) a zobrazuje sa len v zobrazení chatu, kam patrí.

Čo nás naučili dve vydania „bez funkcií"

  1. Roztrasenosť je signál dôvery. Blikajúci prepínač, poskakujúci spínač, štítok, ktorý o snímok dlhšie pretrváva — žiadny z nich nie je chybou v zmysle pádu, ale každý z nich šepká táto aplikácia to nemá celkom pod kontrolou. Pokoj je neprítomnosťou tohto šepotu a zaslúžite si ho jeden súbeh po druhom.
  2. Skrytý režim spôsobuje, že správne správanie vyzerá ako chyba. Asistent robil správnu vec a bol za ňu obviňovaný, čisto preto, že používateľ nevidel rámec. Keď váš systém spraví neviditeľné rozhodnutie, ktoré mení výstup, ukážte to rozhodnutie — odznak iba na čítanie je často celá oprava.
  3. Nové funkcie by mali byť neviditeľné pre klientov, ktorí ich nevedia použiť. Podanie rúk cez hlavičku schopnosti znamená, že signál režimu dorazí len ku klientom, ktorí ho vedia vykresliť. Spätná kompatibilita nie je kontrola verzie priskrutkovaná dodatočne; je to klient, ktorý povie, čomu rozumie, a server, ktorý tú odpoveď rešpektuje.

Toto sú vydania, o ktorých nikto nepíše titulky do zoznamu zmien, a sú veľkou súčasťou toho, prečo GeekBye v2 pôsobí tak, ako pôsobí. O vydaní, na ktorom bol tento pokoj postavený, si prečítajte čo v skutočnosti obnáša druhá verzia (v2.0.0). O práci na spoľahlivosti popri ňom deň, keď si naša aplikácia sama spravila DDoS (v2.0.1) a prečo váš AI zapisovač poznámok prestane nahrávať uprostred stretnutia (v2.0.9).

Súvisiace články

Jedna CSS premenná, päť kôl revízie a Swift toolchain, ktorý klamal
Steven
Steven6 min čítania

Jedna CSS premenná, päť kôl revízie a Swift toolchain, ktorý klamal

GeekBye v2.0.7 spravil celý overlay nastaviteľne priehľadným — čo znie ako jednoriadková zmena v CSS a rozhodne ňou nebolo. Skutočný príbeh je o tom, čo odhalila revízia kódu: dva povrchy, ktoré odmietali zmiznúť, nahrávacia lišta, ktorá vyzerala zle pri rovnakej nepriehľadnosti, a skompilovaná binárka, ktorá sa hompáľala o 672 bajtov, pretože naša vlastná dokumentácia povedala recenzentovi nesprávnu verziu Swift.

Inžinierstvo
Dizajn
Zostavenie
Anatómia dodania softvéru do dokonalosti: ako code review zachytilo to, čo testy nedokázali
Steven
Steven6 min čítania

Anatómia dodania softvéru do dokonalosti: ako code review zachytilo to, čo testy nedokázali

Naprieč celou sériou GeekBye v2 sa opakuje to isté: oprava prejde každým testom na stroji vývojára a potom code review dokáže, že by zlyhala takmer u každého. Toto je pracovný postup za deviatimi vydaniami — brána review, záchyty vo fáze opravy a disciplína „otestuj pred odoslaním", ktorá mení „u mňa to funguje" na „funguje to".

Inžinierstvo
Proces
Revízia kódu
Vaša Mac aplikácia získa prístup k mikrofónu — a pri každom spustení naň zabudne
Steven
Steven5 min čítania

Vaša Mac aplikácia získa prístup k mikrofónu — a pri každom spustení naň zabudne

GeekBye požiadal o prístup k mikrofónu, udelili ste ho a fungovalo to. Ďalšie spustenie: preč. A aplikácia sa v Nastaveniach systému → Mikrofón vôbec neobjavila. Vinníkom bola bezpečnostná funkcia macOS, ktorá aplikáciu potichu spúšťala z cesty, čo zmizne — tu je diagnóza a náprava na jedno kliknutie.

macOS
Povolenia
Inžinierstvo