
Mitä 127 commitin julkaisu oikeasti on
GeekBye v1.7.0 oli 127 committia yhdessätoista päivässä. Ulkoapäin se näyttää sadalta pieneltä asialta. Sisältäpäin se oli kaksi isoa ominaisuutta punottuna yhteen — ja toinen niistä rakennettiin väärään paikkaan, sitten revittiin irti ja rakennettiin uudelleen kesken julkaisun. Tässä on ison julkaisun anatomia.
On olemassa versio tästä blogikirjoituksesta, joka vain listaa kaiken GeekBye v1.7.0:ssa — uudistetun kotinäytön, kalibrointivirran, kokoontaitettavan sivupalkin, uudet asetukset ja niin edelleen. Se olisi tarkka eikä se opettaisi sinulle mitään. Sillä rehellinen tarina 127 commitin julkaisusta ei ole lista. Se on muoto.
Tässä on muoto. Sata kaksikymmentäseitsemän committia kuulostaa sadalta kahdeltakymmeneltäseitsemältä pieneltä asialta. Se ei melkein koskaan ole. v1.7.0 oli kaksi isoa ominaisuutta, rakennettuna rinnakkain pitkäikäisillä haaroilla noin yhdentoista päivän aikana, punottuna yhteen lopussa. Suuren julkaisun ymmärtäminen tarkoittaa näiden kahden säikeen ymmärtämistä — ja sen yhden paikan, jossa rakensimme jotain väärään kohtaan ja jouduimme repimään sen takaisin irti kesken lennon.
Säie yksi: kalibrointi
Ensimmäinen säie oli kalibrointi — tekoälyn ääniarviointi viestintätaidoistasi. Aloitat live-puhelun tekoäly-"uravalmentajan" kanssa, käyt läpi jäsennellyn joukon vaiheita (lämmittely, käyttäytyminen, tekninen viestintä, paineensieto, tavoitteiden asettaminen), ja lopussa saat pisteet kuudessa ulottuvuudessa: itsevarmuus, selkeys, täsmällisyys, sitoutuminen, malttisuus, relevanssi. Pinnan alla se mittaa myös konkreettisia puhemetriikkoja — puhenopeuttasi, täytesanojen tiheyttä, luetaanko taukosi strategisiksi vai epäröiviksi.
Tulos ei ole arvosana, se on lähtökohta. Kalibrointi tuottaa vahvuutesi, kasvualueesi ja — ratkaisevasti — suositellun vaikeustason, jolla aloittaa harjoittelu. Se kalibroi missä tuotteen pitäisi kohdata sinut. Jokainen taito palaa laajennettavana palautekorttina, jossa on yhteenveto, konkreettinen ehdotus ja todellinen lainattu rivi omasta puhelustasi esimerkkinä. Se on ominaisuus, jonka päälle loput harjoituskokemuksesta on rakennettu.
Säie kaksi: kokonaan uusi ikkuna
Toinen säie oli premium-uudistus — ja sen kutsuminen uudistukseksi aliarvioi sen. Se ei ollut olemassa olevien näyttöjen uudelleenpintaus; se oli käytännössä toinen sovellusikkuna, rakennettu kuudessa selkeässä vaiheessa: kokoontaitettava Notion-tyylinen sivupalkki, ylätunnisteen alasvetovalikko, joka korvasi vanhan istuntolistan, selaimen kaltainen navigointi historialla ja leivänmurupoluilla, sekä Kodin, Profiilien, Kokousten ja Asetusten premium-uudelleenrakennukset.
Kaksi isoa ominaisuutta. Sitä 127 committia oikeasti oli. Ja vaikein osa niiden julkaisemisessa ei ollut kummankaan kirjoittaminen — se oli punominen. Kaksi haaraa olivat toisistaan riippuvaisia; toinen yhdistettiin toiseen, ja kalibrointihaaran täytyi vetää main-haara sisään neljä erillistä kertaa vain pysyäkseen synkassa samalla kun uudistus liikkui sen alla. Commitien määrä ei ole ison julkaisun kustannus. Pitkäikäiset haarat ja integrointijärjestys ovat.
Lukemisen arvoinen osa: rakensimme kalibroinnin väärään paikkaan
Tässä on virhe, ja se on hyvä, koska se on niin yleinen.
GeekByellä on tiukka arkkitehtoninen sääntö: kaikki tekoälyoperaatiot asuvat backendissä. Client on ohut kuori, joka puhuu palvelimelle. Kaikki tiesivät tämän.
Ja silti kalibrointi rakennettiin ensin clientin paikalliseen tietokantaan. Oma taulu, tietokantamigraatio, 254 rivin repository, IPC-käsittelijät ja 515 rivin arviointikysymyspankki — kaikki asumassa käyttäjän koneella. Se toimi. Se myös hiljaa rikkoi sopimusta, jonka päälle koko sovellus on rakennettu.
Kolme päivää myöhemmin yksi commit poisti 680 riviä kahdeksasta tiedostosta siirtääkseen kaiken backendiin, jossa kalibrointidatasta tuli kunnollinen palvelinpuolen malli, ja kysymyslogiikasta ja pisteytyksestä tuli palvelimen asia. Toinen commit poisti 515 rivin client-kysymyspankin kokonaan. Diff on melkein hauska: yksi lisäys, kuusisataakahdeksankymmentä poistoa.
Kukaan ei lähtenyt kirjoittamaan 680 riviä kertakäyttöistä koodia. Se tapahtui niin kuin tämä aina tapahtuu: clientin oikopolku on juuri siinä, paikallisesti on nopeampi prototypoida, ja "siirretään se backendiin myöhemmin" tuntuu vaarattomalta. Mutta kun arkkitehtuurisi jo kertoo missä totuuden lähde asuu, sen rakentaminen mihin tahansa muualle ei ole oikopolku — se on uudelleentyötä, jonka olet aikatauluttanut itsellesi etukäteen. Opetus joka jäi mieleen: laita se sinne minne sopimus sanoo, ensimmäisellä kerralla, silloinkin kun paikallinen versio on nopeampi pystyttää.
Bugi, jonka vain integrointi saattoi löytää
Vielä yksi kuitti, koska se on isojen julkaisujen tunnusomainen vikatila. Kun kalibrointi ja uusi navigointi oli kytketty yhteen ja ne todella pyörivät, sovellus alkoi laukaista käyttörajaa — HTTP 429:ää — ilman ilmeistä syytä.
Syy oli puhdasta integrointia. Kalibrointistatus haettiin komponenttitasolla, joten jokainen navigointi haki sen uudelleen — ja Reactin strict mode, joka tarkoituksella kutsuu efektejä kahdesti kehityksessä paljastaakseen bugeja, tuplasi sen taas. Tuloksena oli neljästä kahdeksaan identtistä kalibrointipyyntöä laukesi jokaisella näytön vaihdolla, tarpeeksi laukaisemaan palvelimen käyttörajoittimen. Korjaus konsolidoi haun pariin kutsuun mount-vaiheessa.
Tätä bugia ei olisi voinut löytää testaamalla kalibrointia yksinään tai navigointia yksinään. Se on olemassa vain saumassa — jossa kaksi itsenäisesti oikein toimivaa ominaisuutta kohtaa. Sitä veroa iso julkaisu perii: viimeinen maili ei ole ominaisuuksien rakentamista, se on kaiken sen löytämistä, mikä hajoaa vasta kun ne ovat vihdoin samassa huoneessa.
Kolme asiaa, jotka iso julkaisu opetti
- 127 commitin julkaisu on kaksi tai kolme isoa teemaa, ei sataa pientä. Löydä säikeet. Työ — ja riski — asuu siinä miten ne punoutuvat yhteen, ei määrässä.
- Laita totuuden lähde sinne minne sopimus sanoo sen asuvan, ensimmäisellä kerralla. Poistimme 680 riviä siirtäessämme kalibrointia clientistä backendiin. Paikallinen oikopolku on uudelleentyötä, jonka olet aikatauluttanut etukäteen; arkkitehtuuri kertoi sinulle vastauksen jo.
- Integrointi paljastaa viat, joita eristys ei voi. 429-myrsky asui kahden oikein toimivan ominaisuuden saumassa ja ilmestyi vasta kun ne pyörivät yhdessä. Budjetoi integrointikierros, älä pelkkää ominaisuuskohtaista testausta.
Tämä on v1-aikakauden serkku tarinalle, jonka kertoisimme uudelleen paljon isommassa mittakaavassa — katso mitä versio 2 oikeasti vaatii: 206 committia rehellisiä tiloja (v2.0.0), jossa sama "iso numero on oikeasti muutama iso idea" -totuus toteutuu koko v2-uudelleenkirjoituksessa. v1-tarinan edelliseen lukuun, kuinka streamata live-raportti ilman välkyntää (v1.6.13); ja koko kaarelle, ohjelmiston toimittamisen anatomia täydellisyyteen asti.