Steven
Steven5 menit baca

Apa sebenarnya rilis 127 commit itu

GeekBye v1.7.0 adalah 127 commit dalam sebelas hari. Dari luar, itu tampak seperti ratusan hal kecil. Dari dalam, itu adalah dua fitur besar yang dijalin bersama di akhir — dan salah satunya dibangun di tempat yang salah, lalu dicabut dan dibangun ulang di tengah rilis. Inilah anatomi sebuah rilis besar.

Engineering
Rilis
Arsitektur
GeekBye Releases
Apa sebenarnya rilis 127 commit itu

Ada satu versi dari tulisan blog ini yang sekadar mendaftar semua hal di GeekBye v1.7.0 — layar beranda yang didesain ulang, alur kalibrasi, bilah sisi yang bisa dilipat, pengaturan baru, dan seterusnya. Itu akan akurat dan tidak mengajarkan apa pun kepada Anda. Karena kisah jujur dari sebuah rilis 127 commit bukanlah daftarnya. Melainkan bentuknya.

Inilah bentuknya. Seratus dua puluh tujuh commit terdengar seperti seratus dua puluh tujuh hal kecil. Hampir tidak pernah begitu. v1.7.0 adalah dua fitur besar, dibangun secara paralel di branch berumur panjang selama sekitar sebelas hari, dijalin bersama di akhir. Memahami rilis besar berarti memahami kedua untai itu — dan satu tempat di mana kami membangun sesuatu di titik yang salah dan harus mencabutnya kembali di tengah jalan.

Untai satu: kalibrasi

Untai pertama adalah kalibrasi — penilaian suara bertenaga AI atas keterampilan komunikasi Anda. Anda memulai panggilan langsung dengan seorang "pelatih karier" AI, menjalani serangkaian fase terstruktur (pemanasan, perilaku, komunikasi teknis, respons di bawah tekanan, penetapan tujuan), dan di akhir Anda dinilai pada enam dimensi: kepercayaan diri, kejelasan, spesifisitas, keterlibatan, ketenangan, relevansi. Di baliknya, ia juga mengukur metrik bicara yang konkret — kecepatan bicara Anda, frekuensi kata pengisi, apakah jeda Anda terbaca sebagai strategis atau ragu-ragu.

Keluarannya bukan nilai, melainkan sebuah titik awal. Kalibrasi menghasilkan kekuatan Anda, area pertumbuhan Anda, dan — yang terpenting — tingkat kesulitan yang direkomendasikan untuk mulai berlatih. Ia mengalibrasi di mana produk seharusnya menemui Anda. Setiap keterampilan kembali sebagai kartu umpan balik yang bisa diperluas dengan ringkasan, saran konkret, dan sebuah kalimat yang benar-benar dikutip dari panggilan Anda sendiri sebagai contoh. Inilah fitur yang di atasnya sisa pengalaman latihan dibangun.

Untai dua: sebuah jendela yang sama sekali baru

Untai kedua adalah desain ulang premium — dan menyebutnya desain ulang meremehkannya. Ini bukan pergantian tampilan dari layar-layar yang ada; ini secara efektif adalah sebuah jendela aplikasi kedua, yang dibangun dalam enam fase eksplisit: bilah sisi yang bisa dilipat bergaya Notion, dropdown header yang menggantikan daftar sesi lama, navigasi bergaya peramban dengan riwayat dan breadcrumb, serta pembangunan ulang premium untuk Beranda, Profil, Rapat, dan Pengaturan.

Dua fitur besar. Itulah 127 commit yang sebenarnya. Dan bagian tersulit dalam merilisnya bukanlah menulis salah satu dari keduanya — melainkan penjalinannya. Kedua branch saling bergantung; satu di-merge ke dalam yang lain, dan branch kalibrasi harus menarik branch main sebanyak empat kali terpisah hanya untuk tidak menyimpang dari sinkronisasi sementara desain ulang bergerak di bawahnya. Jumlah commit bukanlah biaya dari rilis besar. Branch berumur panjang dan urutan integrasilah biayanya.

Bagian yang layak dibaca: kami membangun kalibrasi di tempat yang salah

Inilah kesalahannya, dan ini kesalahan yang bagus karena begitu umum.

GeekBye memiliki aturan arsitektur yang tegas: semua operasi AI berada di backend. Client adalah cangkang tipis yang berbicara dengan server. Semua orang tahu ini.

Namun kalibrasi pertama-tama dibangun di basis data lokal client. Sebuah tabel khusus, migrasi basis data, repository 254 baris, handler IPC, dan bank 515 baris pertanyaan penilaian — semuanya berada di mesin pengguna. Ia berfungsi. Ia juga diam-diam melanggar kontrak yang menjadi dasar seluruh aplikasi.

Tiga hari kemudian, satu commit menghapus 680 baris di delapan berkas untuk memindahkan semuanya ke backend, di mana data kalibrasi menjadi model sisi server yang semestinya, dan logika pertanyaan serta penilaian menjadi urusan server. Commit lain menghapus bank pertanyaan client 515 baris itu sepenuhnya. Diff-nya hampir lucu: satu penyisipan, enam ratus delapan puluh penghapusan.

Tak seorang pun berniat menulis 680 baris kode sekali pakai. Itu terjadi seperti biasanya hal ini terjadi: jalan pintas client ada tepat di sana, lebih cepat membuat prototipe secara lokal, dan "nanti kita pindahkan ke backend" terasa tidak berbahaya. Tetapi ketika arsitektur Anda sudah memberi tahu di mana sumber kebenaran berada, membangunnya di tempat lain bukanlah jalan pintas — itu adalah pekerjaan ulang yang telah Anda jadwalkan sendiri. Pelajaran yang membekas: letakkan di tempat yang dikatakan kontrak, sejak awal, bahkan ketika versi lokal lebih cepat disiapkan.

Bug yang hanya bisa ditemukan oleh integrasi

Satu bukti lagi, karena ini adalah mode kegagalan khas dari rilis besar. Begitu kalibrasi dan navigasi baru terhubung dan benar-benar berjalan, aplikasi mulai memicu batas laju permintaan — HTTP 429 — tanpa alasan yang jelas.

Penyebabnya murni integrasi. Status kalibrasi diambil pada tingkat komponen, sehingga setiap navigasi mengambilnya lagi — dan strict mode React, yang sengaja memanggil efek dua kali dalam pengembangan untuk memunculkan bug, menggandakannya lagi. Hasilnya adalah empat hingga delapan permintaan kalibrasi identik yang menembak per perpindahan layar, cukup untuk memicu pembatas laju server. Perbaikannya mengonsolidasikan pengambilan menjadi beberapa panggilan saat mount.

Anda tidak akan bisa menemukan bug ini dengan menguji kalibrasi saja, atau navigasi saja. Ia hanya ada di jahitan — tempat dua fitur yang secara independen benar bertemu. Itulah pajak yang dikenakan oleh rilis besar: mil terakhir bukanlah membangun fitur-fiturnya, melainkan menemukan segala sesuatu yang baru rusak ketika mereka akhirnya berada di ruangan yang sama.

Tiga hal yang diajarkan rilis besar

  1. Rilis 127 commit adalah dua atau tiga tema besar, bukan seratus tema kecil. Temukan untainya. Pekerjaannya — dan risikonya — berada pada bagaimana mereka dijalin bersama, bukan pada jumlahnya.
  2. Letakkan sumber kebenaran di tempat yang dikatakan kontrak, sejak awal. Kami menghapus 680 baris saat memindahkan kalibrasi dari client ke backend. Jalan pintas lokal adalah pekerjaan ulang yang telah Anda jadwalkan; arsitektur sudah memberi Anda jawabannya.
  3. Integrasi memunculkan kegagalan yang tak bisa dilakukan isolasi. Badai 429 hidup di jahitan antara dua fitur yang benar dan hanya muncul begitu mereka berjalan bersama. Anggarkan waktu untuk sesi integrasi, bukan sekadar pengujian per fitur.

Ini adalah sepupu era v1 dari sebuah kisah yang akan kami ceritakan lagi dalam skala yang jauh lebih besar — lihat apa yang sebenarnya dibutuhkan sebuah versi 2: 206 commit keadaan yang jujur (v2.0.0), tempat kebenaran yang sama "angka besar sebenarnya beberapa gagasan besar" terungkap di seluruh penulisan ulang v2. Untuk bab sebelumnya dalam kisah v1, cara menyiarkan laporan langsung tanpa kedipan (v1.6.13); dan untuk keseluruhan busurnya, anatomi merilis perangkat lunak hingga kesempurnaan.