Pertama kali “itu berhasil di sistem saya” berhenti menjadi kalimat yang dapat diterima, itu terjadi pada hari Selasa yang seharusnya tenang.
Sudah sore, saat di mana kantor mulai lembut di tepinya. Pendingin udara telah menetap dalam getarannya yang stabil. Beberapa orang sudah mulai mengemas, melepaskan laptop dari dok dengan ketidaksabaran kecil yang terlatih untuk ingin berada di tempat lain. Di meja saya, secangkir kopi telah mendingin seperti kopi ketika Anda mulai menjawab pesan “sangat cepat” dan kehilangan jejak waktu.
Kami sedang merilis perubahan yang terdengar sepele ketika Anda mengatakannya dengan keras. Sebuah bidang baru dalam formulir internal, beberapa validasi, penyesuaian pada cara template email mengambil nama. Sebuah patch, bukan desain ulang. Jenis pekerjaan yang sebagian besar tidak terlihat ketika berjalan dengan baik, dan sangat jelas ketika tidak.
Dalam thread permintaan tarik, salah satu pengembang menulis, “Diuji secara lokal, berjalan di mesin saya.” Mereka tidak ceroboh. Mereka telah begadang minggu sebelumnya memperbaiki sesuatu yang lain. Mereka cepat, responsif, dan biasanya benar. Saya juga pernah menjadi orang itu, menjalankan langkah yang sama tiga kali di laptop saya sendiri sampai saya cukup bosan untuk mempercayai mereka.
Kami tetap menggabungkan.
Pada pukul 4:53 sore, saluran dukungan kami menyala. Pesan pertama samar—“Pengiriman formulir gagal?”—kemudian lebih tepat. Setiap upaya untuk mengirimkan formulir mengembalikan kesalahan. Tidak intermiten. Tidak satu departemen. Semua orang.
Pengembang yang membuat perubahan memposting lagi: “Aneh. Saya tidak bisa mereproduksi. Berhasil di sistem saya.”
Ada rasa sakit tertentu dalam kalimat itu ketika Anda menatap daftar pengguna yang semakin bertambah yang tidak dapat melakukan pekerjaan mereka. Itu bukan niat jahat. Itu adalah kesenjangan antara dunia pribadi dan dunia bersama. Di laptop, Anda adalah dewa. Di produksi, Anda adalah tamu.
Kami membuka log. Kesalahan itu jelas, hampir menghina dalam kesederhanaannya: pelanggaran batas database. Bidang baru ditulis sebagai null dalam beberapa kasus, tetapi kolom di produksi ditandai tidak null. Di mesin pengembang, database lokal dibuat bulan lalu, setelah migrasi yang berbeda digabungkan. Skema mereka tidak cocok dengan kami. Di staging, yang seharusnya menangkapnya, migrasi gagal dua hari sebelumnya karena masalah izin yang tidak ada yang menyadari. Staging diam-diam ketinggalan zaman, seperti alarm asap dengan baterai mati.
Jadi ya, itu berhasil di sistem mereka. Sistem mereka adalah pameran museum dari satu.
Kami segera melakukan rollback, tetapi “segera” tetap berarti dua puluh menit orang menekan refresh dan mendapatkan spanduk merah yang sama. Dua puluh menit bukanlah apa-apa jika Anda berbicara tentang karier. Itu waktu yang lama jika Anda seorang manajer kantor yang mencoba menutup penggajian, atau seorang koordinator yang mencoba menjadwalkan pengiriman sebelum jendela tertutup. Setelah itu, kami menulis catatan insiden standar. Penyebab utama. Faktor penyebab. Item tindakan. Semua orang sopan, karena semua orang pernah berada di sana. Namun, frasa itu menggantung di tepi percakapan seperti bau.
Kemudian malam itu, saya duduk di ruang konferensi kecil dengan dinding kaca yang kami gunakan untuk panggilan, laptop terbuka, ruangan yang memantulkan kembali kepada saya seperti akuarium. Saya membandingkan riwayat migrasi pengembang dengan produksi. Saya memeriksa izin pengguna database staging. Saya melihat versi tepat dari runtime bahasa yang berjalan di server. Kemudian saya melihat mesin saya sendiri dan menyadari saya tidak bisa mengatakan, dengan percaya diri, apa itu sistem saya.
Itulah hal tentang “sistem saya.” Itu tidak pernah hanya kode. Itu adalah pembaruan sistem operasi yang telah Anda推迟 karena Anda sedang dalam tengah sesuatu. Itu adalah paket yang Anda instal enam bulan yang lalu untuk proyek yang berbeda dan terlupakan. Itu adalah ketergantungan yang di-cache yang hanya ada karena Anda menjalankan perintah dalam urutan tertentu. Itu adalah variabel lingkungan yang Anda atur sekali, dalam sesi terminal, dan dibawa seperti jimat keberuntungan. Itu adalah database lokal yang diisi dengan catatan uji yang kebetulan menghindari kasus pinggiran yang akan merusak segalanya.
Kami mulai mengencangkan tali dengan cara kecil yang tidak romantis.
Pertama, kami membuat staging menjadi penting lagi. Itu berarti memberikannya izin migrasi yang sama dengan produksi, dan memantau seperti produksi alih-alih memperlakukannya sebagai sandbox di mana kegagalan adalah hal yang normal. Kami mengatur pemeriksaan yang membandingkan tabel migrasi di staging dan produksi dan memberi tahu kami ketika mereka menyimpang. Bukan alat besar. Hanya skrip yang berjalan dan mengeluh dengan keras.
Kemudian kami menambahkan tes otomatis yang tidak melakukan hal yang rumit: itu membuka aplikasi, menerapkan migrasi ke database yang bersih, dan menjalankan beberapa tindakan dasar. Tujuannya bukan untuk membuktikan perangkat lunak itu benar dalam setiap cara. Tujuannya adalah untuk membuktikan bahwa itu bisa diinstal dari awal dan masih bernapas. Jika tidak, itu adalah fakta yang layak dipelajari lebih awal.
Kami juga mulai peduli tentang versi tepat dari ketergantungan. Bukan karena menetapkan versi itu menyenangkan—itu tidak menyenangkan—tetapi karena “terbaru” adalah sasaran yang bergerak yang tidak pernah mengirim undangan kalender sebelum berubah. Kami menuliskan cara mengatur lingkungan dev dan menjaga dokumen itu tetap hidup, yang lebih sulit daripada menulisnya di tempat pertama. Orang-orang mengubah mesin mereka. Orang-orang melupakan langkah-langkah. Dokumen itu menjadi, dengan caranya sendiri, cermin yang dipegang untuk asumsi kami.
Beberapa bulan kemudian, insiden lain tiba, lebih kecil tetapi lebih tajam. Fitur berjalan baik untuk semua orang di kantor dan gagal untuk seorang kontraktor jarak jauh. Kode yang sama. Cabang yang sama. Lokasi sistem operasi yang berbeda. Mesin mereka memformat tanggal sebagai hari-bulan-tahun. Mesin kami tidak. Bug bukanlah kasus pinggiran yang jarang dari logika bisnis. Itu ada dalam imajinasi kami tentang bagaimana “normal” terlihat.
Yang satu ini tidak membuat siapa pun melewatkan tenggat waktu, tetapi itu membuat pelajarannya lebih sulit untuk diabaikan. “Sistem saya” bahkan tidak tunggal. Itu adalah kerumunan kecil sistem, masing-masing dengan cuaca mereka sendiri.
Ada godaan, setelah Anda terbakar, untuk melangkah terlalu jauh ke arah yang berlawanan. Mengunci semuanya sampai tidak ada yang bisa bergerak tanpa komite. Membangun sebuah benteng alat dan aturan dan menyebutnya keamanan. Kami menggoda dengan itu, sebentar, dan kemudian menemukan biayanya: eksperimen yang lebih lambat, onboarding yang lebih sulit, kebencian diam-diam yang tumbuh ketika orang merasa bahwa proses tidak mempercayai mereka.
Jadi kami menetap pada sesuatu yang lebih realistis. Kami tidak mencoba menghilangkan kalimat “itu berhasil di sistem saya.” Kami mencoba membuatnya kurang relevan.
Kami membuatnya lebih mudah untuk menjalankan proyek dengan cara yang sama di mesin mana pun, karena konsistensi adalah kenyamanan sebelum itu menjadi kebajikan. Kami membuat tes cukup cepat sehingga orang benar-benar akan menjalankannya. Kami menjaga staging cukup dekat dengan produksi sehingga bisa mengatakan kebenaran, tetapi tidak begitu berharga sehingga semua orang takut menyentuhnya. Dan kami terus mengingatkan diri kami, lembut dan sering, bahwa keberhasilan lokal hanyalah sinyal awal.
Setiap kali, seseorang masih mengatakannya—biasanya ketika mereka lelah, biasanya ketika perubahannya terasa kecil. Perbedaannya sekarang adalah apa yang terjadi selanjutnya. Alih-alih mengangguk dan melanjutkan, seseorang bertanya, “Oke. Tapi apakah itu berhasil di lingkungan yang bersih? Apakah itu berhasil dengan skema database yang sama yang akan kita miliki besok? Apakah itu berhasil tanpa cache dan tanpa rahasia yang tersembunyi di shell Anda?”
Pertanyaan-pertanyaan itu tidak menjamin apa pun. Mereka hanya memaksa percakapan keluar dari dunia pribadi dan ke dalam dunia bersama. Dan itu, lebih dari alat apa pun yang kami adopsi setelah Selasa itu, adalah momen “itu berhasil di sistem saya” berhenti menjadi cukup baik.
\u003ct-54/\u003e\u003cc-55/\u003e\u003cm-56/\u003e