Steven
Steven6 menit baca

Apa yang Sebenarnya Dibutuhkan Versi 2: 206 Commit Status yang Jujur

GeekBye v2 bukan rilis fitur. Ini adalah 206 commit yang tertuju pada satu ide: aplikasi tidak boleh berbohong tentang statusnya sendiri. Inilah biayanya — termasuk kesalahan satu baris pada lockfile yang nyaris membuat kami gagal merilis semuanya.

Keandalan
Rekayasa
Rilis
GeekBye Releases
Apa yang Sebenarnya Dibutuhkan Versi 2: 206 Commit Status yang Jujur

Kebanyakan rilis "versi 2" adalah tumpukan fitur baru dengan angka yang lebih besar di atasnya. GeekBye v2 justru sebaliknya. Rilis ini nyaris tidak menghadirkan kemampuan baru yang terlihat pengguna. 206 commit-nya tertuju pada satu ide sederhana yang tidak glamor:

Aplikasi tidak boleh menampilkan status yang tidak benar kepada Anda.

Itu terdengar jelas hingga Anda menghitung berapa banyak cara aplikasi desktop diam-diam berbohong. Ia menampilkan tanda centang pada upload yang masih berlangsung. Ia berkata "terhubung" melalui soket yang sudah mati semenit lalu. Ia diam saja saat transkrip Anda dibuang begitu saja. Tak satu pun dari ini adalah crash. Ini lebih buruk daripada crash, karena aplikasi terlihat baik-baik saja padahal salah — dan Anda baru mengetahuinya kemudian, ketika rekaman yang Anda butuhkan ternyata tidak ada.

v2 adalah rilis di mana kami berburu setiap satu dari kebohongan kecil itu.

Kebohongan yang paling kami benci: upload yang "berhasil"

GeekBye bisa mencadangkan rekaman Anda ke Google Drive. Di v1, koneksi ke Drive diperlakukan sebagai detail latar belakang — jika berhasil, bagus; jika tidak, kegagalannya sebagian besar tak terlihat. Aplikasi tetap tampak terhubung. Anda mengira rekaman Anda aman. Terkadang tidak.

v2 membangun ulang ini di sekitar status koneksi yang jujur. Drive kini selalu berada dalam salah satu dari beberapa status eksplisit dan benar — terhubung, menyambung ulang, terputus — dan aplikasi menyiarkan setiap perubahan status itu ke seluruh antarmuka saat itu juga terjadi. Ketika koneksi mati, sebuah banner sambung ulang global memberi tahu Anda, di mana-mana, dengan jelas. Aplikasi tidak lagi berpura-pura upload berhasil padahal gagal. Jika pencadangan Anda tidak bisa berjalan sekarang, Anda tahu sekarang juga — bukan minggu depan saat Anda mencari file-nya.

Di baliknya, ini adalah arsitektur kecil, bukan slogan: satu sumber kebenaran untuk koneksi, sebuah event yang menyebar ke setiap bagian antarmuka saat berubah, dan sebuah banner yang membaca langsung dari status itu. Tidak ada jalur di mana koneksi mati sementara antarmuka tampak baik, karena keduanya membaca dari fakta yang sama.

Kebohongan rekaman yang hilang

Perbaikan kejujuran besar kedua adalah pemulihan rekaman. Transkripsi real-time membutuhkan koneksi langsung. Di v1, jika koneksi itu tersendat di tengah sesi — Wi-Fi berkedip, terowongan, VPN menyambung ulang — audio selama jeda itu bisa saja hilang begitu saja. Transkrip akan berlubang, dan tak ada yang memberi tahu Anda.

v2 mengubah kontraknya: audio disimpan secara lokal selama koneksi terputus dan direkonsiliasi setelahnya. Ketika sambungan putus, GeekBye menjaga audio tetap aman di mesin Anda; ketika kembali, audio yang di-buffer itu dikirim dan dijahit ke transkrip di tempat yang tepat. Tiga puluh detik jaringan buruk tidak lagi merenggut tiga puluh detik rapat Anda. Inilah fondasi yang langsung dibangun oleh rilis keandalan berikutnya — mekanisme sambung-ulang-dan-buffer di mengapa pencatat AI Anda berhenti saat Wi-Fi buruk adalah ide yang sama, yang diperkuat.

Kebohongan badai pop-up

Ada ketidakjujuran yang lebih halus dalam cara aplikasi melaporkan masalah: mereka melaporkannya berlebihan. Satu momen jaringan yang labil bisa memicu galat yang sama lima kali, dan tiba-tiba Anda punya tumpukan notifikasi merah identik yang mengubur satu pesan yang penting. Itu juga tidak jujur — itu kebisingan yang berpura-pura menjadi informasi.

Maka v2 menambahkan pembatasan notifikasi berbasis kategori dan pengarahan galat. Galat dikelompokkan berdasarkan apa sebenarnya mereka, dan setiap kategori dibatasi lajunya sehingga satu masalah dasar menghasilkan satu pesan yang jelas, bukan rentetan. Masalah batas laju diarahkan ke pesan batas laju; masalah koneksi diarahkan ke pesan koneksi. Aplikasi memberi tahu Anda apa yang benar, sekali saja — disiplin yang sama yang kemudian mencegah sebuah 429 menyamar sebagai logout di hari saat aplikasi kami mem-DDoS dirinya sendiri.

Angka 206 itulah intinya

Status jujur, banner sambung ulang, pemulihan rekaman, pengarahan notifikasi — itu empat ide. Rilisnya 206 commit. Ke mana sisanya?

Ke ekor panjang yang tidak glamor yang sebenarnya dituntut oleh "jangan pernah menampilkan status palsu". Setiap tempat di mana antarmuka lama bisa tidak sinkron dengan kenyataan harus ditemukan dan dikabel ulang agar membaca dari kebenaran alih-alih salinan usang. Setiap jalur sambung ulang harus dibuat memperbarui status bersama alih-alih menebak secara lokal. Puluhan perbaikan keandalan kecil di seluruh rekaman, transkripsi, dan upload — masing-masing menutup celah spesifik di mana aplikasi bisa tampak benar padahal salah.

Inilah biaya sebuah "versi 2" yang sesungguhnya ketika tujuannya adalah kepercayaan alih-alih fitur. Tidak ada satu commit utama. Ada 206 commit kecil, dan rilisnya hanya terasa seperti satu hal — tenang — karena semua 206-nya menarik ke arah yang sama.

Rilisnya nyaris tidak terkirim

Inilah kisah perangnya, dan ini kisah yang bagus, karena ini tentang aplikasi kami sendiri yang berbohong kepada kami.

Ketika Anda membuat rilis, sebuah skrip penaikan versi mencap angka baru ke seluruh proyek. Pada v2.0.0 ia memperbarui versi aplikasi — tetapi package-lock.json, buku besar dependensi npm yang persis, tetap menunjuk ke versi lama, 1.9.0. Secara lokal, semuanya baik-baik saja; tak ada yang menginstal ulang dependensi hanya untuk build. Tapi CI menjalankan npm ci, dan seluruh tugas npm ci adalah menolak melanjutkan jika lockfile tidak cocok dengan manifest. Itu fitur kekakuan — dan ia melakukan persis apa yang seharusnya, dengan menggagalkan build untuk rilis terbesar yang pernah kami buat.

Lalu muncul yang kedua, lebih licik, di bawahnya. npm yang lebih baru telah memangkas sebuah dependensi transitif opsional — paket encoding yang ditarik node-fetch — dari lockfile sebagai tidak perlu. Padahal instalasi bersih CI kami memang membutuhkannya, jadi instalasinya rusak dengan cara yang sama sekali tidak berkaitan dengan kode kami dan sepenuhnya berkaitan dengan buku besar yang secara halus salah.

Keduanya adalah perbaikan satu baris: menyinkronkan ulang lockfile ke versi yang sebenarnya, memulihkan entri yang dipangkas. Keduanya juga contoh sempurna yang merendahkan hati tentang persis hal yang menjadi inti v2 — sebuah status yang mengklaim benar padahal tidak. Lockfile seharusnya menjadi catatan jujur tentang apa yang bergantung pada aplikasi. Ketika ia menyimpang dari kenyataan, build melakukan persis apa yang kini dilakukan aplikasi kami untuk pengguna: ia menolak berpura-pura semuanya baik-baik saja. Ternyata merilis sebuah rilis keandalan adalah masalah keandalan sampai ke dasarnya.

Tiga hal yang diajarkan v2 kepada kami

  1. Kegagalan yang berbahaya adalah yang senyap. Sebuah crash mengumumkan dirinya. Sebuah "terhubung" palsu, sebuah upload sukses hantu, sebuah transkrip dengan lubang tak terlihat — semua itu merenggut kepercayaan Anda justru karena tak ada yang terlihat salah. Buru kebohongan yang senyap.
  2. Kejujuran adalah arsitektur, bukan pesan. Anda tidak bisa membaut "katakan yang sebenarnya" ke antarmuka sebagai sebuah banner. Banner itu harus membaca dari satu sumber kebenaran yang sama seperti semua yang lain, atau ia menjadi satu hal lagi yang bisa salah. Satu fakta, yang menyebar — bukan dua salinan yang bisa saling bertentangan.
  3. Sebuah versi 2 yang layak menyandang angkanya sebagian besar tak terlihat. Jika v2 Anda adalah daftar fitur, itu adalah v1.5 dengan pemasaran. Sebuah v2 sejati adalah 206 commit yang tak seorang pun bisa menunjuknya satu per satu, yang bila dijumlahkan menjadi produk yang sekadar berhenti berbohong kepada Anda.

GeekBye v2.0.0 adalah fondasi yang dibangun oleh setiap rilis sejak itu. Untuk melihat apa yang diusung fondasi itu, lihat mengapa pencatat AI Anda berhenti saat Wi-Fi buruk, hari saat aplikasi kami mem-DDoS dirinya sendiri (v2.0.1), dan transkripsi langsung ketika firewall memblokir WebSocket (v2.0.8). Untuk ketenangan yang menjadi tujuan semuanya, apa yang baru di GeekBye v2.