Steven
Steven5 perc olvasás

Mi is valójában egy 127 commitos kiadás

A GeekBye v1.7.0 tizenegy nap alatt 127 commit volt. Kívülről ez száz apró dolognak tűnik. Belülről két nagy funkció összefonása volt — és az egyiket rossz helyre építettük, majd menet közben kitéptük és újraépítettük. Íme egy nagy kiadás anatómiája.

Mérnöki munka
Kiadás
Architektúra
GeekBye kiadások
Mi is valójában egy 127 commitos kiadás

Van ennek a blogbejegyzésnek egy olyan verziója, amelyik csak felsorolja mindazt, ami a GeekBye v1.7.0-ban van — egy újratervezett kezdőképernyő, egy kalibrációs folyamat, egy összecsukható oldalsáv, új beállítások, és így tovább. Pontos lenne, és semmit sem tanítana neked. Mert egy 127 commitos kiadás őszinte története nem a lista. Hanem a forma.

Íme a forma. Százhuszonhét commit úgy hangzik, mint százhuszonhét apró dolog. Szinte soha nem az. A v1.7.0 két nagy funkció volt, párhuzamosan építve, hosszú életű brancheken, körülbelül tizenegy nap alatt, a végén összefonva. Egy nagy kiadás megértése azt jelenti, hogy megérted ezt a két szálat — és azt az egy helyet, ahol valamit rossz pontra építettünk, és menet közben ki kellett tépnünk.

Első szál: kalibráció

Az első szál a kalibráció volt — egy AI-alapú hangfelmérés a kommunikációs készségeidről. Elindítasz egy élő beszélgetést egy AI „karrier-coachcsal", végigmész egy strukturált fázissorozaton (bemelegítés, viselkedésalapú, technikai kommunikáció, nyomásreakció, célkitűzés), a végén pedig hat dimenzió mentén kapsz pontszámot: magabiztosság, tisztaság, konkrétság, elköteleződés, higgadtság, relevancia. A háttérben konkrét beszédmetrikákat is mér — a beszédtempódat, a töltelékszavak gyakoriságát, hogy a szüneteid stratégiainak vagy bizonytalannak hatnak-e.

A kimenet nem egy osztályzat, hanem egy kiindulópont. A kalibráció megadja az erősségeidet, a fejlődési területeidet, és — ami döntő — egy ajánlott nehézségi szintet, ahonnan érdemes elkezdened gyakorolni. Bekalibrálja, hol találkozzon veled a termék. Minden készség egy kibontható visszajelzési kártyaként tér vissza, egy összefoglalóval, egy konkrét javaslattal, és egy tényleges, idézett mondattal a saját beszélgetésedből példaként. Ez az a funkció, amelyre a gyakorlási élmény többi része épül.

Második szál: egy vadonatúj ablak

A második szál egy prémium újratervezés volt — és az újratervezés szó alábecsüli. Nem a meglévő képernyők átfestése volt; gyakorlatilag egy második alkalmazásablak volt, hat kifejezett fázisban kiépítve: egy összecsukható, Notion-stílusú oldalsáv, egy fejlécbeli legördülő menü, amely leváltotta a régi munkamenetlistát, böngészőstílusú navigáció előzményekkel és morzsamenükkel, valamint a Kezdőlap, a Profilok, a Meetingek és a Beállítások prémium újraépítése.

Két nagy funkció. Ez volt valójában a 127 commit. És a szállítás legnehezebb része nem egyikük megírása volt — hanem az összefonás. A két branch kölcsönösen függött egymástól; az egyiket beolvasztottuk a másikba, és a kalibrációs branchnek négy külön alkalommal kellett behúznia a main branchet, hogy ne sodródjon el, miközben az újratervezés alatta mozgott. A commitok száma nem egy nagy kiadás költsége. A hosszú életű branchek és az integráció sorrendje az.

A rész, amiért érdemes olvasni: rossz helyre építettük a kalibrációt

Íme a hiba, és ez egy jó hiba, mert annyira gyakori.

A GeekBye-nak van egy szilárd architekturális szabálya: minden AI-művelet a backenden lakik. A kliens egy vékony burok, amely egy szerverrel beszélget. Ezt mindenki tudta.

És a kalibrációt mégis először a kliens helyi adatbázisában építettük meg. Egy dedikált tábla, egy adatbázis-migráció, egy 254 soros repository, IPC-kezelők, és egy 515 soros felmérési kérdésbank — mind a felhasználó gépén lakva. Működött. És csendben megsértette azt a szerződést, amelyre az egész app épül.

Három nappal később egy commit 680 sort törölt nyolc fájlban, hogy az egészet áthelyezze a backendre, ahol a kalibrációs adatokból rendes szerveroldali modell lett, a kérdéslogika és a pontozás pedig szerveroldali ügy. Egy másik commit teljesen kitörölte az 515 soros kliensoldali kérdésbankot. A diff szinte vicces: egy beszúrás, hatszáznyolcvan törlés.

Senki sem indult neki azzal, hogy 680 sornyi eldobható kódot írjon. Úgy történt, ahogy ez mindig történik: a kliensoldali gyorsmegoldás ott van, gyorsabb helyben prototípust készíteni, és a „majd később áthelyezzük a backendre" ártalmatlannak tűnik. De amikor az architektúrád már megmondja, hol lakik az igazság forrása, bárhová máshová építeni nem gyorsmegoldás — hanem újramunka, amit előre beütemeztél magadnak. A tanulság, ami megmaradt: tedd oda, ahová a szerződés mondja, elsőre, még akkor is, ha a helyi verziót gyorsabb felállítani.

A hiba, amit csak az integráció találhatott meg

Még egy bizonyíték, mert ez a nagy kiadások jellegzetes hibázási módja. Amint a kalibráció és az új navigáció összedrótozódott, és ténylegesen futott, az app elkezdett átbillenni egy sebességkorláton — HTTP 429-eken — minden nyilvánvaló ok nélkül.

Az ok tiszta integráció volt. A kalibrációs státuszt komponensszinten kérdeztük le, így minden navigáció újralekérdezte — a React strict mode-ja pedig, amely szándékosan kétszer hívja meg az effekteket fejlesztés közben, hogy felszínre hozza a hibákat, ezt megint megkétszerezte. Az eredmény négytől nyolcig terjedő azonos kalibrációs kérés volt képernyőváltásonként, elég ahhoz, hogy átbillentse a szerver sebességkorlátozóját. A javítás a lekérdezést pár, felcsatoláskori hívásra konszolidálta.

Ezt a hibát nem találhattad volna meg úgy, hogy a kalibrációt teszteled önmagában, vagy a navigációt önmagában. Csak az illesztésnél létezik — ahol két, önmagában helyes funkció találkozik. Ez az az adó, amit egy nagy kiadás kivet: az utolsó kilométer nem a funkciók megépítése, hanem annak felfedezése, ami csak akkor törik el, amikor végre ugyanabban a szobában vannak.

Három dolog, amit egy nagy kiadás megtanított

  1. Egy 127 commitos kiadás két vagy három nagy téma, nem száz apró. Találd meg a szálakat. A munka — és a kockázat — abban lakik, ahogy összefonódnak, nem a számban.
  2. Tedd az igazság forrását oda, ahová a szerződés mondja, hogy lakik, elsőre. 680 sort töröltünk, hogy a kalibrációt kliensről backendre helyezzük át. A helyi gyorsmegoldás olyan újramunka, amit előre beütemeztél; az architektúra már megmondta a választ.
  3. Az integráció olyan hibákat hoz felszínre, amit az elszigetelés nem tud. A 429-es vihar a két helyes funkció közötti illesztésnél lakott, és csak akkor jelent meg, amikor együtt futottak. Számolj be egy integrációs menetre, ne csak a funkciónkénti tesztelésre.

Ez egy v1-korszakbeli unokatestvére egy történetnek, amit sokkal nagyobb léptékben mesélnénk el újra — lásd mit igényel valójában egy második verzió: 206 commitnyi őszinte állapot (v2.0.0), ahol ugyanaz a „egy nagy szám valójában néhány nagy ötlet" igazság játszódik le a teljes v2 újraíráson át. A v1-történet előző fejezetéért lásd hogyan streamelj egy élő jelentést villódzás nélkül (v1.6.13); a teljes ívért pedig a szoftver tökéletesre szállításának anatómiája.

Kapcsolódó cikkek

Egy megszakadt kapcsolatnak nem szabadna összeomlasztania az egész alkalmazást — de a miénk ezt tette
Steven
Steven6 perc olvasás

Egy megszakadt kapcsolatnak nem szabadna összeomlasztania az egész alkalmazást — de a miénk ezt tette

Amikor a backendünk értekezlet közben elesett, nem csak a leiratozást állította le — összeomlasztotta az egész alkalmazást. Az ok egyetlen kezeletlen esemény volt, a javítás pedig tíz sor. Ez az a kiadási csokor, amely elérte, hogy a GeekBye bejelentkezve és kapcsolódva maradjon azokon a dolgokon át, amelyek korábban megölték.

Mérnöki munka
Megbízhatóság
Electron
A tökéletesre csiszolt szoftverszállítás anatómiája: hogyan kapta el a kódellenőrzés azt, amit a tesztek nem
Steven
Steven6 perc olvasás

A tökéletesre csiszolt szoftverszállítás anatómiája: hogyan kapta el a kódellenőrzés azt, amit a tesztek nem

A GeekBye v2 sorozatban újra és újra ugyanaz történik: egy javítás átmegy minden teszten a fejlesztő gépén, majd a kódellenőrzés bebizonyítja, hogy szinte mindenki másnál elbukott volna. Ez a kilenc kiadás mögötti munkafolyamat — az ellenőrzési kapu, a javítás-előbb elkapott hibák és a szállítás-előtti tesztelési fegyelem, amely a „nálam működik” állapotot „működik” állapottá változtatja.

Mérnöki munka
Folyamat
Kódellenőrzés
A Mac-alkalmazásod megkapja a mikrofon-hozzáférést — aztán minden indításkor elfelejti
Steven
Steven5 perc olvasás

A Mac-alkalmazásod megkapja a mikrofon-hozzáférést — aztán minden indításkor elfelejti

A GeekBye mikrofonengedélyt kért, megadtad, és működött. A következő indításnál: eltűnt. És az alkalmazás egyáltalán meg sem jelent a Rendszerbeállítások → Mikrofon alatt. A bűnös egy macOS biztonsági funkció volt, amely csendben egy eltűnő elérési útról futtatta az alkalmazást — íme a diagnózis és az egyetlen kérdéssel megoldó javítás.

macOS
Engedélyek
Mérnöki munka