Steven
Steven8 min de lectura

Què costa de veritat una versió 2: 206 commits d'estats honestos

GeekBye v2 no va ser una versió de funcionalitats. Van ser 206 commits amb una sola idea al cap: l'aplicació no ha de mentir mai sobre el seu propi estat. Això és el que costa — inclòs l'error d'una sola línia al fitxer de bloqueig que gairebé ens impedeix llançar-ne res.

Fiabilitat
Enginyeria
Llançament
GeekBye Releases
Què costa de veritat una versió 2: 206 commits d'estats honestos

La majoria de versions "versió 2" són un munt de funcionalitats noves amb un número més gran a sobre. GeekBye v2 va ser el contrari. Gairebé no va aportar cap capacitat nova visible per a l''usuari. Els seus 206 commits apuntaven a una sola idea, gens glamurosa:

L''aplicació no t''ha de mostrar mai un estat que no sigui cert.

Això sona obvi fins que comptes de quantes maneres una aplicació d''escriptori menteix en silenci. Mostra una marca de verificació en una pujada que encara està en camí. Diu "connectat" per un socket que va morir fa un minut. Es queda en silenci mentre la teva transcripció es llença a terra. Cap d''aquestes coses és una fallada. Són pitjors que les fallades, perquè l''aplicació sembla que va bé mentre s''equivoca — i només te n''assabentes més tard, quan l''enregistrament que necessitaves no hi és.

La v2 va ser la versió en què vam sortir a caçar cadascuna d''aquestes petites mentides.

La mentida que més odiàvem: la pujada que "va anar bé"

GeekBye pot fer còpia de seguretat dels teus enregistraments a Google Drive. A la v1, la connexió amb Drive es tractava com un detall de fons — si funcionava, genial; si no, la fallada era pràcticament invisible. L''aplicació seguia semblant connectada. Assumies que els teus enregistraments estaven fora de perill. De vegades no ho estaven.

La v2 va reconstruir això al voltant d''estats de connexió honestos. Ara Drive sempre està en un d''uns quants estats explícits i veraços — connectat, reconnectant, desconnectat — i l''aplicació difon cada canvi d''aquest estat a tota la interfície l''instant que passa. Quan la connexió cau, un bàner global de reconnexió t''ho diu, a tot arreu, clarament. L''aplicació ja no fa veure que una pujada ha anat bé quan no. Si la teva còpia de seguretat no es pot fer ara mateix, ho saps ara mateix — no la setmana que ve quan vagis a buscar el fitxer.

Per sota, això és una petita arquitectura, no un eslògan: una única font de veritat per a la connexió, un esdeveniment que s''escampa a cada part de la interfície quan canvia, i un bàner que llegeix directament d''aquest estat. No hi ha cap camí en què la connexió estigui caiguda i la interfície sembli que va bé, perquè llegeixen del mateix fet.

La mentida de l''enregistrament perdut

La segona gran correcció d''honestedat va ser la recuperació d''enregistraments. La transcripció en temps real necessita una connexió viva. A la v1, si aquesta connexió tenia un ensopec a mitja sessió — un tall de Wi-Fi, un túnel, una reconnexió de VPN — l''àudio durant el buit simplement podia desaparèixer. La transcripció tenia un forat i res t''ho deia.

La v2 va canviar el contracte: l''àudio es preserva localment durant un tall de connexió i es reconcilia després. Quan l''enllaç cau, GeekBye manté l''àudio fora de perill a la teva màquina; quan torna, aquest àudio emmagatzemat s''envia i es cus a la transcripció al lloc correcte. Trenta segons dolents de xarxa ja no et costen trenta segons de reunió. Aquest és el fonament sobre el qual les versions de fiabilitat posteriors van construir directament — la maquinària de reconnexió i emmagatzematge de per què el teu prenedor de notes IA s''atura amb mala Wi-Fi és la mateixa idea, endurida.

La mentida de la tempesta de finestres emergents

Hi ha una deshonestedat més subtil en com les aplicacions informen dels problemes: n''informen de més. Un sol moment de xarxa inestable pot disparar el mateix error cinc vegades, i de sobte tens una pila d''avisos vermells idèntics que enterren l''únic missatge que importa. Això tampoc és honest — és soroll que es fa passar per informació.

Per això la v2 va afegir estrangulament d''avisos per categoria i encaminament d''errors. Els errors s''agrupen segons el que realment són, i cada categoria té un límit de freqüència de manera que un sol problema subjacent produeix un missatge clar, no una ràfega. Un problema de límit de freqüència s''encamina a un missatge de límit de freqüència; un problema de connexió s''encamina a un missatge de connexió. L''aplicació et diu què és cert, un cop — la mateixa disciplina que després va evitar que un 429 es fes passar per un tancament de sessió a el dia que la nostra app es va fer un DDoS a si mateixa.

El número 206 és la qüestió

Estats honestos, bàner de reconnexió, recuperació d''enregistraments, encaminament d''avisos — són quatre idees. La versió va ser de 206 commits. On va anar la resta?

A la llarga cua gens glamurosa que "no mostris mai un estat fals" requereix de veritat. Cada lloc on la interfície antiga es podia desincronitzar amb la realitat s''havia de trobar i recablejar perquè llegís de la veritat en lloc d''una còpia obsoleta. Cada camí de reconnexió s''havia de fer que actualitzés l''estat compartit en lloc d''endevinar localment. Desenes de petites correccions de fiabilitat a través de l''enregistrament, la transcripció i les pujades — cadascuna tancant un buit específic on l''aplicació podia semblar que anava bé mentre s''equivocava.

Això és el que costa una "versió 2" de veritat quan l''objectiu és la confiança en lloc de les funcionalitats. No hi ha un únic commit protagonista. N''hi ha 206 de petits, i la versió només sembla una sola cosa — calma — perquè els 206 estiren en la mateixa direcció.

El llançament gairebé no surt

Aquí ve la història de guerra, i és bona, perquè va sobre la nostra pròpia app mentint-nos a nosaltres.

Quan prepares una versió, un script de pujada de versió estampa el número nou per tot el projecte. A la v2.0.0 va actualitzar la versió de l''aplicació — però el package-lock.json, el llibre de comptes exacte de dependències de npm, va quedar apuntant a la versió antiga, 1.9.0. Localment, tot anava bé; ningú reinstal·la dependències només per compilar. Però CI executa npm ci, i tota la feina de npm ci és negar-se a continuar si el fitxer de bloqueig no coincideix amb el manifest. És una funcionalitat d''estrictesa — i va fer exactament el que havia de fer, fent fallar la compilació de la versió més gran que havíem preparat mai.

Llavors en va sorgir un segon, més traïdor, per sota. Una npm més nova havia podat una dependència transitiva opcional — el paquet encoding que node-fetch incorpora — del fitxer de bloqueig com a innecessària. Excepte que la instal·lació neta del nostre CI que la necessitava, així que la instal·lació es va trencar d''una manera que no tenia res a veure amb el nostre codi i tot a veure amb el llibre de comptes que estava subtilment malament.

Tots dos eren correccions d''una línia: resincronitzar el fitxer de bloqueig a la versió real, restaurar l''entrada podada. Tots dos són també exemples perfectes i humiliants d''exactament allò de què anava la v2 — un estat que afirmava ser cert i no ho era. El fitxer de bloqueig se suposa que és el registre honest del que depèn l''aplicació. Quan es va desviar de la realitat, la compilació va fer precisament el que la nostra app ara fa per als usuaris: es va negar a fer veure que tot anava bé. Resulta que llançar una versió de fiabilitat és un problema de fiabilitat fins al fons.

Tres coses que ens va ensenyar la v2

  1. Les fallades perilloses són les silencioses. Una fallada s''anuncia. Un fals "connectat," una pujada exitosa fantasma, una transcripció amb un forat invisible — aquestes et costen la confiança precisament perquè res sembla que va malament. Caça les mentides silencioses.
  2. L''honestedat és una arquitectura, no un missatge. No pots collar "digues la veritat" a una interfície com un bàner. El bàner ha de llegir de la mateixa única font de veritat que la resta, o es converteix en una cosa més que pot estar equivocada. Un fet, escampat — mai dues còpies que es puguin contradir.
  3. Una versió 2 que mereixi el número és majoritàriament invisible. Si la teva v2 és una llista de funcionalitats, és una v1.5 amb màrqueting. Una v2 de veritat són 206 commits que ningú pot assenyalar individualment, que sumen un producte que simplement deixa de mentir-te.

GeekBye v2.0.0 és el fonament sobre el qual ha construït cada versió des d''aleshores. Per veure què transporta aquest fonament, mira per què el teu prenedor de notes IA s''atura amb mala Wi-Fi, el dia que la nostra app es va fer un DDoS a si mateixa (v2.0.1), i transcripció en directe quan el tallafoc bloqueja els WebSockets (v2.0.8). Per la calma al servei de la qual estava tot, què hi ha de nou a GeekBye v2.