Steven
Steven6 minit bacaan

Apa sebenarnya keluaran 127 commit itu

GeekBye v1.7.0 ialah 127 commit dalam sebelas hari. Dari luar, ia kelihatan seperti ratusan perkara kecil. Dari dalam, ia adalah dua ciri besar yang dijalin bersama di penghujungnya — dan salah satunya dibina di tempat yang salah, kemudian dicabut dan dibina semula di tengah-tengah keluaran. Inilah anatomi sebuah keluaran besar.

Kejuruteraan
Keluaran
Seni Bina
GeekBye Releases
Apa sebenarnya keluaran 127 commit itu

Ada satu versi tulisan blog ini yang sekadar menyenaraikan segala-galanya dalam GeekBye v1.7.0 — skrin utama yang direka bentuk semula, aliran penentukuran, bar sisi boleh lipat, tetapan baharu, dan seterusnya. Ia akan tepat dan tidak mengajar anda apa-apa. Kerana kisah jujur sesuatu keluaran 127 commit bukanlah senarainya. Sebaliknya bentuknya.

Inilah bentuknya. Seratus dua puluh tujuh commit kedengaran seperti seratus dua puluh tujuh perkara kecil. Hampir tidak pernah begitu. v1.7.0 ialah dua ciri besar, dibina secara selari pada cabang berumur panjang selama kira-kira sebelas hari, dijalin bersama di penghujungnya. Memahami sesuatu keluaran besar bermakna memahami kedua-dua utas itu — dan satu tempat yang kami bina sesuatu di titik yang salah dan terpaksa mencabutnya semula di tengah-tengah perjalanan.

Utas satu: penentukuran

Utas pertama ialah penentukuran — penilaian suara berkuasa AI terhadap kemahiran komunikasi anda. Anda memulakan panggilan langsung dengan seorang "jurulatih kerjaya" AI, menempuh satu set fasa berstruktur (pemanasan, tingkah laku, komunikasi teknikal, tindak balas di bawah tekanan, penetapan matlamat), dan pada akhirnya anda diberi skor merentasi enam dimensi: keyakinan, kejelasan, kekhususan, penglibatan, ketenangan, kaitan. Di sebaliknya, ia turut mengukur metrik pertuturan yang konkrit — kadar percakapan anda, kekerapan kata pengisi, sama ada jeda anda dibaca sebagai strategik atau teragak-agak.

Hasilnya bukan gred, tetapi sebuah titik permulaan. Penentukuran menghasilkan kekuatan anda, bidang pertumbuhan anda, dan — yang paling penting — tahap kesukaran yang disyorkan untuk mula berlatih. Ia menentukur di mana produk sepatutnya menemui anda. Setiap kemahiran dikembalikan sebagai kad maklum balas boleh kembang dengan ringkasan, cadangan konkrit, dan satu ayat yang benar-benar dipetik daripada panggilan anda sendiri sebagai contoh. Inilah ciri yang menjadi asas kepada baki pengalaman latihan.

Utas dua: sebuah tetingkap yang sama sekali baharu

Utas kedua ialah reka bentuk semula premium — dan memanggilnya reka bentuk semula meremehkannya. Ia bukan penukaran rupa skrin sedia ada; ia sebenarnya adalah sebuah tetingkap aplikasi kedua, dibangunkan dalam enam fasa yang jelas: bar sisi boleh lipat bergaya Notion, dropdown pengepala yang menggantikan senarai sesi lama, navigasi bergaya pelayar dengan sejarah dan breadcrumb, serta pembinaan semula premium bagi Utama, Profil, Mesyuarat, dan Tetapan.

Dua ciri besar. Itulah 127 commit yang sebenarnya. Dan bahagian yang paling sukar untuk mengeluarkannya bukanlah menulis mana-mana satu daripadanya — sebaliknya penjalinannya. Kedua-dua cabang saling bergantung; satu digabungkan ke dalam yang lain, dan cabang penentukuran terpaksa menarik masuk cabang main sebanyak empat kali berasingan semata-mata untuk tidak terpesong daripada penyegerakan sementara reka bentuk semula bergerak di bawahnya. Bilangan commit bukanlah kos sesuatu keluaran besar. Cabang berumur panjang dan susunan integrasilah kosnya.

Bahagian yang berbaloi dibaca: kami bina penentukuran di tempat yang salah

Inilah kesilapannya, dan ia satu kesilapan yang baik kerana ia begitu lazim.

GeekBye mempunyai peraturan seni bina yang tegas: semua operasi AI berada di backend. Client ialah cangkerang nipis yang bercakap dengan pelayan. Semua orang tahu perkara ini.

Namun begitu, penentukuran mula-mula dibina dalam pangkalan data tempatan client. Satu jadual khusus, satu migrasi pangkalan data, satu repository 254 baris, pengendali IPC, dan satu bank 515 baris soalan penilaian — semuanya berada pada mesin pengguna. Ia berfungsi. Ia juga secara senyap melanggar kontrak yang menjadi asas keseluruhan aplikasi.

Tiga hari selepas itu, satu commit memadam 680 baris merentasi lapan fail untuk memindahkan semuanya ke backend, tempat data penentukuran menjadi model sebelah pelayan yang sewajarnya, dan logik soalan serta pemarkahan menjadi urusan pelayan. Satu commit lain memadam bank soalan client 515 baris itu sepenuhnya. Diff-nya hampir kelakar: satu penyisipan, enam ratus lapan puluh pemadaman.

Tiada sesiapa berhasrat untuk menulis 680 baris kod pakai buang. Ia berlaku seperti kebiasaannya perkara ini berlaku: jalan pintas client ada betul-betul di situ, lebih pantas membuat prototaip secara tempatan, dan "nanti kita pindahkan ke backend" terasa tidak berbahaya. Tetapi apabila seni bina anda sudah memberitahu di mana sumber kebenaran berada, membinanya di tempat lain bukanlah jalan pintas — ia ialah kerja semula yang telah anda jadualkan sendiri. Pengajaran yang melekat: letakkan ia di tempat yang dinyatakan kontrak, pada kali pertama, walaupun versi tempatan lebih pantas disiapkan.

Pepijat yang hanya integrasi dapat temui

Satu lagi bukti, kerana ini ialah corak kegagalan tersendiri bagi keluaran besar. Sebaik sahaja penentukuran dan navigasi baharu disambungkan dan benar-benar berjalan, aplikasi mula mencetuskan had kadar permintaan — HTTP 429 — tanpa sebab yang jelas.

Puncanya ialah integrasi semata-mata. Status penentukuran diambil pada peringkat komponen, jadi setiap navigasi mengambilnya semula — dan strict mode React, yang sengaja memanggil kesan dua kali dalam pembangunan untuk mendedahkan pepijat, menggandakannya sekali lagi. Hasilnya ialah empat hingga lapan permintaan penentukuran yang serupa menembak setiap kali skrin bertukar, cukup untuk mencetuskan penghad kadar pelayan. Pembetulannya menyatukan pengambilan kepada beberapa panggilan semasa mount.

Anda tidak akan dapat menemui pepijat ini dengan menguji penentukuran sahaja, atau navigasi sahaja. Ia hanya wujud pada sambungan — tempat dua ciri yang betul secara bebas bertemu. Itulah cukai yang dikenakan oleh sesuatu keluaran besar: batu terakhir bukanlah membina ciri-cirinya, sebaliknya menemui segala-galanya yang hanya rosak apabila mereka akhirnya berada dalam bilik yang sama.

Tiga perkara yang diajar oleh keluaran besar

  1. Keluaran 127 commit ialah dua atau tiga tema besar, bukan seratus tema kecil. Cari utasnya. Kerjanya — dan risikonya — terletak pada cara ia dijalin bersama, bukan pada bilangannya.
  2. Letakkan sumber kebenaran di tempat yang dinyatakan kontrak, pada kali pertama. Kami memadam 680 baris ketika memindahkan penentukuran daripada client ke backend. Jalan pintas tempatan ialah kerja semula yang telah anda jadualkan lebih awal; seni bina sudah memberi anda jawapannya.
  3. Integrasi mendedahkan kegagalan yang tidak mampu didedahkan oleh pengasingan. Ribut 429 hidup pada sambungan antara dua ciri yang betul dan hanya muncul sebaik sahaja ia berjalan bersama. Peruntukkan masa untuk satu pusingan integrasi, bukan sekadar ujian setiap ciri.

Ini ialah sepupu era v1 bagi sebuah kisah yang akan kami ceritakan semula pada skala yang jauh lebih besar — lihat apa yang sebenarnya diperlukan oleh sesuatu versi 2: 206 commit keadaan yang jujur (v2.0.0), tempat kebenaran yang sama "sesuatu nombor besar sebenarnya beberapa idea besar" terungkap di seluruh penulisan semula v2. Untuk bab sebelumnya dalam kisah v1, cara menstrim laporan langsung tanpa kelipan (v1.6.13); dan untuk keseluruhan lengkoknya, anatomi mengeluarkan perisian hingga ke kesempurnaan.