
Apa yang Sebenarnya Diperlukan oleh Versi 2: 206 Commit Keadaan yang Jujur
GeekBye v2 bukan keluaran ciri. Ia adalah 206 commit yang tertumpu pada satu idea: aplikasi tidak sepatutnya menipu tentang keadaannya sendiri. Inilah kosnya — termasuk kesilapan satu baris pada lockfile yang hampir menghalang kami daripada mengeluarkan apa-apa pun.
Kebanyakan keluaran "versi 2" ialah timbunan ciri baharu dengan nombor yang lebih besar padanya. GeekBye v2 adalah sebaliknya. Ia hampir tidak membawa sebarang keupayaan baharu yang kelihatan kepada pengguna. 206 commit-nya tertumpu pada satu idea yang mudah dan tidak glamor:
Aplikasi tidak sepatutnya menunjukkan kepada anda keadaan yang tidak benar.
Itu kedengaran jelas sehinggalah anda mengira berapa banyak cara sebuah aplikasi desktop menipu secara diam-diam. Ia menunjukkan tanda semak pada muat naik yang masih dalam perjalanan. Ia berkata "bersambung" melalui soket yang telah mati seminit yang lalu. Ia berdiam diri sementara transkrip anda dibuang begitu sahaja. Tiada satu pun daripada ini adalah kerosakan. Ia lebih teruk daripada kerosakan, kerana aplikasi kelihatan baik-baik sahaja sedangkan ia salah — dan anda hanya mengetahuinya kemudian, apabila rakaman yang anda perlukan tiada.
v2 ialah keluaran di mana kami keluar memburu setiap satu daripada penipuan kecil itu.
Penipuan yang paling kami benci: muat naik yang "berjaya"
GeekBye boleh menyandarkan rakaman anda ke Google Drive. Dalam v1, sambungan ke Drive dianggap sebagai butiran latar belakang — jika ia berfungsi, bagus; jika tidak, kegagalan itu hampir tidak kelihatan. Aplikasi akan terus kelihatan bersambung. Anda menganggap rakaman anda selamat. Kadangkala ia tidak.
v2 membina semula ini sekitar status sambungan yang jujur. Drive kini sentiasa berada dalam salah satu daripada beberapa status yang jelas dan benar — bersambung, menyambung semula, terputus — dan aplikasi menyiarkan setiap perubahan status itu ke seluruh antara muka pada saat ia berlaku. Apabila sambungan terputus, sebuah sepanduk sambung semula global memberitahu anda, di mana-mana, dengan jelas. Aplikasi tidak lagi berpura-pura muat naik berjaya sedangkan ia gagal. Jika sandaran anda tidak dapat berlaku sekarang, anda tahu sekarang juga — bukan minggu depan apabila anda pergi mencari failnya.
Di sebaliknya, ini adalah seni bina yang kecil, bukan slogan: satu sumber kebenaran untuk sambungan, satu peristiwa yang menyebar ke setiap bahagian antara muka apabila ia berubah, dan sepanduk yang membaca terus daripada status itu. Tiada laluan di mana sambungan terputus tetapi antara muka kelihatan baik, kerana kedua-duanya membaca daripada fakta yang sama.
Penipuan rakaman yang hilang
Pembaikan kejujuran besar yang kedua ialah pemulihan rakaman. Transkripsi masa nyata memerlukan sambungan langsung. Dalam v1, jika sambungan itu tersekat di tengah sesi — kelipan Wi-Fi, terowong, penyambungan semula VPN — audio semasa jurang itu boleh sahaja hilang. Transkrip akan berlubang, dan tiada apa memberitahu anda.
v2 mengubah kontraknya: audio disimpan secara setempat semasa sambungan terputus dan diselaraskan kemudian. Apabila pautan terputus, GeekBye menyimpan audio dengan selamat pada mesin anda; apabila ia kembali, audio yang ditimbunkan itu dihantar dan dijahit ke dalam transkrip di tempat yang betul. Tiga puluh saat rangkaian yang teruk tidak lagi meragut tiga puluh saat mesyuarat anda. Inilah asas yang dibina terus oleh keluaran kebolehpercayaan kemudian — jentera sambung-semula-dan-timbun dalam mengapa pencatat nota AI anda berhenti apabila Wi-Fi teruk ialah idea yang sama, yang diperkukuh.
Penipuan ribut pop timbul
Terdapat ketidakjujuran yang lebih halus dalam cara aplikasi melaporkan masalah: mereka melaporkannya secara berlebihan. Satu detik rangkaian yang tidak stabil boleh mencetuskan ralat yang sama lima kali, dan tiba-tiba anda mempunyai timbunan pemberitahuan merah yang serupa yang menenggelamkan satu mesej yang penting. Itu juga tidak jujur — ia adalah hingar yang berpura-pura menjadi maklumat.
Maka v2 menambah pengehadan pemberitahuan berkunci kategori dan penghalaan ralat. Ralat dikumpulkan mengikut apa sebenarnya ia, dan setiap kategori dihadkan kadarnya supaya satu masalah asas menghasilkan satu mesej yang jelas, bukan hujan tembakan. Isu had kadar dihalakan ke mesej had kadar; isu sambungan dihalakan ke mesej sambungan. Aplikasi memberitahu anda apa yang benar, sekali sahaja — disiplin yang sama yang kemudiannya menghalang sebuah 429 daripada menyamar sebagai log keluar dalam hari aplikasi kami men-DDoS dirinya sendiri.
Angka 206 itulah maksudnya
Status jujur, sepanduk sambung semula, pemulihan rakaman, penghalaan pemberitahuan — itu empat idea. Keluaran itu 206 commit. Ke mana perginya yang selebihnya?
Ke ekor panjang yang tidak glamor yang sebenarnya dituntut oleh "jangan sekali-kali paparkan keadaan palsu". Setiap tempat di mana antara muka lama boleh tidak segerak dengan realiti perlu dijumpai dan didawaikan semula supaya membaca daripada kebenaran dan bukannya salinan usang. Setiap laluan sambung semula perlu dibuat untuk mengemas kini status kongsi dan bukannya meneka secara setempat. Berpuluh-puluh pembaikan kebolehpercayaan kecil merentasi rakaman, transkripsi, dan muat naik — setiap satunya menutup jurang khusus di mana aplikasi boleh kelihatan betul sedangkan ia salah.
Inilah kos sebuah "versi 2" yang sebenar apabila matlamatnya ialah kepercayaan dan bukannya ciri. Tiada satu commit tajuk utama. Ada 206 commit kecil, dan keluaran itu hanya terasa seperti satu perkara — tenang — kerana kesemua 206-nya menarik ke arah yang sama.
Keluaran hampir tidak dihantar
Inilah kisah perangnya, dan ia kisah yang bagus, kerana ia tentang aplikasi kami sendiri yang menipu kami.
Apabila anda membuat keluaran, sebuah skrip penaikan versi mencap nombor baharu ke seluruh projek. Pada v2.0.0 ia mengemas kini versi aplikasi — tetapi package-lock.json, lejar kebergantungan tepat npm, kekal menunjuk ke versi lama, 1.9.0. Secara setempat, semuanya baik; tiada siapa memasang semula kebergantungan hanya untuk membina. Tetapi CI menjalankan npm ci, dan seluruh tugas npm ci adalah enggan meneruskan jika lockfile tidak sepadan dengan manifes. Ia adalah ciri ketegasan — dan ia melakukan tepat apa yang sepatutnya, dengan menggagalkan binaan untuk keluaran terbesar yang pernah kami buat.
Kemudian muncul yang kedua, lebih licik, di bawahnya. npm yang lebih baharu telah mencantas satu kebergantungan transitif pilihan — pakej encoding yang ditarik oleh node-fetch — daripada lockfile sebagai tidak perlu. Kecuali pemasangan bersih CI kami memang memerlukannya, jadi pemasangan itu rosak dengan cara yang langsung tiada kaitan dengan kod kami dan sepenuhnya berkaitan dengan lejar yang secara halus salah.
Kedua-duanya adalah pembaikan satu baris: segerakkan semula lockfile ke versi sebenar, pulihkan entri yang dicantas. Kedua-duanya juga contoh yang sempurna dan merendah diri tentang tepat perkara yang menjadi inti v2 — satu keadaan yang mendakwa benar padahal tidak. Lockfile sepatutnya menjadi rekod jujur tentang apa yang bergantung pada aplikasi. Apabila ia menyimpang daripada realiti, binaan melakukan tepat apa yang aplikasi kami kini lakukan untuk pengguna: ia enggan berpura-pura semuanya baik-baik sahaja. Ternyata mengeluarkan sebuah keluaran kebolehpercayaan adalah masalah kebolehpercayaan sehingga ke dasarnya.
Tiga perkara yang v2 ajarkan kepada kami
- Kegagalan yang berbahaya ialah yang senyap. Sebuah kerosakan mengumumkan dirinya. Sebuah "bersambung" palsu, sebuah muat naik berjaya yang hantu, sebuah transkrip dengan lubang yang tidak kelihatan — semua itu meragut kepercayaan anda tepat kerana tiada apa yang kelihatan salah. Buru penipuan yang senyap.
- Kejujuran ialah seni bina, bukan mesej. Anda tidak boleh membaut "cakap benar" pada antara muka sebagai sebuah sepanduk. Sepanduk itu mesti membaca daripada satu sumber kebenaran yang sama seperti segala yang lain, atau ia menjadi satu lagi perkara yang boleh salah. Satu fakta, yang disebar — bukan dua salinan yang boleh bercanggah.
- Sebuah versi 2 yang layak dengan nombornya sebahagian besarnya tidak kelihatan. Jika v2 anda ialah senarai ciri, ia adalah v1.5 dengan pemasaran. Sebuah v2 sebenar ialah 206 commit yang tiada siapa boleh tunjuk satu persatu, yang apabila dijumlahkan menjadi sebuah produk yang sekadar berhenti menipu anda.
GeekBye v2.0.0 ialah asas yang telah dibina oleh setiap keluaran sejak itu. Untuk melihat apa yang diangkut oleh asas itu, lihat mengapa pencatat nota AI anda berhenti apabila Wi-Fi teruk, hari aplikasi kami men-DDoS dirinya sendiri (v2.0.1), dan transkripsi langsung apabila firewall menyekat WebSocket (v2.0.8). Untuk ketenangan yang menjadi tujuan segalanya, apa yang baharu dalam GeekBye v2.