Saya Terus 'Memperbaiki' Bug yang Tidak Saya Pahami
Dulu saya merayakannya setiap kali sebuah bug menghilang. Sebuah masalah menyiksa saya, saya mengubah sesuatu, masalahnya lenyap, dan saya merasakan hangatnya kemenangan lalu melanjutkan pekerjaan. Butuh waktu lama dan banyak rasa sakit bagi saya untuk belajar bahwa sebuah bug yang menghilang dan sebuah bug yang benar-benar diperbaiki adalah dua peristiwa yang sama sekali berbeda — dan bahwa mencampuradukkan keduanya diam-diam mengisi sistem saya dengan masalah-masalah yang sama sekali belum saya pecahkan. Saya hanya menyembunyikannya dari diri saya sendiri.
Ini adalah salah satu pelajaran yang terdengar gamblang ketika diucapkan secara polos, tetapi luar biasa sulit untuk benar-benar dijalani, karena segala sesuatu tentang momen itu mendorong Anda ke arah yang salah.
Godaan ketika gejalanya lenyap
Ketika sebuah masalah menghilang tepat setelah Anda mengubah sesuatu, setiap insting berteriak bahwa Anda telah memperbaikinya. Kelegaannya nyata, langsung terasa, dan bersifat kimiawi. Tekanan untuk segera beralih ke hal berikutnya sangat besar. Siapa yang mau terus mengutak-atik sebuah masalah yang, sejauh yang Anda lihat, sudah berhenti menjadi masalah?
Tetapi inilah kebenaran yang tidak nyaman yang bersembunyi di balik kelegaan itu: gejala yang lenyap hanya membuktikan bahwa gejala itu lenyap. Itu tidak memberi tahu Anda apa-apa — sama sekali tidak apa-apa — tentang apakah Anda benar-benar menangani penyebab di baliknya atau hanya mengganggunya cukup untuk membuatnya diam untuk sementara. Kedua hasil itu tampak identik pada saat itu. Keduanya terasa identik. Keduanya sama sekali tidak sama.
Perbaikan yang tidak bisa saya jelaskan
Polanya, dalam kasus saya, sangat lazim hingga memalukan. Saya akan membuat sebuah perubahan — menukar urutan beberapa operasi, menambahkan sebuah penjaga, menyesuaikan sesuatu di dekatnya — dan error-nya berhenti muncul. Dan jika Anda menghentikan saya saat itu juga dan meminta saya menjelaskan secara persis mengapa perubahan saya menyelesaikan masalah itu, saya tidak akan bisa melakukannya. Saya sebenarnya tidak tahu. Saya hanya tahu bahwa saya telah menyentuh sesuatu, dan keburukan itu menjadi senyap.
Saya menyebut itu memperbaiki. Tetapi itu sama sekali bukan debugging. Itu lebih mirip mempersembahkan sesaji di sebuah altar dan menyadari bahwa para dewa tampaknya, untuk saat ini, telah reda amarahnya. Saya telah mengubah sesuatu, alam semesta berhenti menghukum saya, dan saya memilih untuk menafsirkan korelasi itu sebagai pemahaman. Itu bukan pemahaman. Itu takhayul dengan sebuah pesan commit.
Bug yang tidak Anda pahami tidak mati — ia bersembunyi
Masalah mendalam dari sebuah perbaikan yang tidak bisa Anda jelaskan adalah bahwa Anda tidak punya gambaran tentang apa yang sebenarnya Anda lakukan. Apakah Anda menghilangkan bug itu, atau Anda hanya memindahkannya ke suatu tempat yang saat ini tidak bisa Anda lihat? Anda benar-benar tidak tahu, dan ketidakpastian itu tidak tanpa bahaya. Karena jika penyebabnya masih ada di sana, tak tersentuh, ia akan kembali. Ia akan muncul lagi nanti, mengenakan kostum yang berbeda, di suatu sudut lain dari sistem, sangat mungkin sudut yang lebih buruk — dan ketika itu terjadi, Anda tidak akan punya ingatan bahwa ia adalah musuh yang sama yang Anda kira telah Anda kalahkan berbulan-bulan lalu.
Inilah hal yang paling saya remehkan. Perbaikan yang tak terjelaskan sebenarnya tidak mengurangi jumlah bug dalam sebuah sistem. Mereka hanya memindahkannya, dan mereka merampas dari Anda pengetahuan yang akan memungkinkan Anda mengenalinya lagi. Anda tidak sedang memenangkan pertarungan. Anda hanya mencerai-beraikan lawan yang sama ke dalam berbagai penyamaran.
Rumah hantu yang perlahan Anda bangun
Setelah cukup lama, sebuah sistem yang dipelihara dengan cara ini akan terisi penuh dengan perubahan-perubahan yang tidak benar-benar dipahami oleh siapa pun, termasuk penulisnya sendiri. Sebuah penjaga yang ditambahkan “karena tanpa itu rusak”. Sebuah urutan yang dipertahankan semata-mata karena rasa takut. Ritual-ritual kecil yang tujuan aslinya sudah benar-benar terlupakan, tetapi yang kini semua orang terlalu cemas untuk menghapusnya.
Basis kode itu lambat laun menjadi sebuah rumah hantu berisi takhayul — penuh dengan hal-hal yang tidak Anda sentuh karena Anda tidak yakin apa yang sedang mereka topang. Dan bagian yang paling kejam adalah apa yang ini lakukan terhadap kemampuan Anda untuk mengubah apa pun. Ketika Anda tidak tahu mana yang menjadi penopang dan mana yang sekadar hiasan, Anda sama sekali tidak bisa bergerak dengan percaya diri. Setiap perubahan menjadi sebuah taruhan melawan kekuatan-kekuatan yang tidak Anda pahami, di dalam sebuah struktur yang Anda bangun tetapi tidak lagi Anda mengerti.
Disiplinnya: jangan percaya sebuah perbaikan yang tidak bisa Anda jelaskan
Aturan yang akhirnya saya paksakan pada diri sendiri sederhana untuk diucapkan tetapi sungguh sulit untuk dijaga: sebuah masalah belum diperbaiki sampai saya bisa menjelaskan baik mengapa ia terjadi maupun mengapa perubahan saya menangani penyebab itu. Kedua bagiannya. Jika gejalanya telah lenyap tetapi saya tidak bisa menceritakan kisah lengkap itu, maka saya belum memperbaiki apa pun — saya hanya kehilangan jejak masalahnya, yang merupakan keadaan yang jauh lebih berbahaya daripada masalah yang masih bisa saya lihat.
Ini lebih lambat. Godaan untuk melewatinya selalu ada, dan godaan itu paling kuat justru pada momen yang paling buruk: ketika gejalanya sudah hilang dan semuanya tampak baik-baik saja dan pekerjaannya tampak, berdasarkan semua tanda yang terlihat, sudah selesai. Itulah persisnya saat disiplin ini paling penting, dan persisnya saat ia terasa paling tidak perlu. Mempertanyakan sebuah perbaikan yang datang gratis terasa tidak alamiah. Namun itulah seluruh pekerjaannya.
Mengapa ini bahkan lebih penting di domain yang penuh derau
Ada alasan mengapa jebakan ini sangat ganas di domain seperti ini. Lingkungannya sangat penuh derau, yang berarti ia memberi Anda konfirmasi palsu terus-menerus. Anda membuat sebuah perubahan, run berikutnya tampak lebih baik — tetapi apakah itu karena perubahannya, atau itu hanya keberuntungan? Di dalam sebuah sistem yang hasilnya berayun naik-turun dengan sendirinya, “ia membaik setelah saya melakukan X” adalah bukti yang sangat lemah bahwa X melakukan apa pun.
Takhayul tumbuh subur justru di tempat hasilnya penuh derau, karena derau itu terus memberi imbalan pada ritual-ritual acak cukup sering untuk membuatnya terasa nyata. Keacakan yang sama yang membuat segalanya sulit dievaluasi juga membuatnya begitu mudah untuk secara berbahaya memercayai perbaikan-perbaikan yang sebenarnya tidak melakukan apa-apa, karena sesekali dadu jatuh menguntungkan Anda tepat setelah gestur tak bermakna Anda, dan otak Anda dengan bersemangat mencatatnya sebagai sebuah sebab.
Pelajaran yang lebih dalam: pemahaman adalah satu-satunya perbaikan yang sejati
Apa yang akhirnya saya yakini adalah bahwa satu-satunya perbaikan yang tahan lama adalah perbaikan yang Anda pahami sampai ke akar penyebabnya. Segala sesuatu selain itu adalah berutang pada masa depan. Bug yang Anda tutup-tutupi tanpa memahaminya tidak hilang; ia hanya menjadi senyap, dan pinjaman itu jatuh tempo nanti, dengan bunga, pada saat ketika Anda sudah benar-benar lupa bahwa Anda pernah mengambilnya.
Maka kini, ketika sesuatu mulai bekerja dan saya tidak tahu mengapa, saya telah melatih diri untuk tidak merasa lega. Saya berusaha untuk merasa curiga sebagai gantinya. Sebuah keberhasilan yang tak terjelaskan bukanlah kemenangan; ia adalah sebuah misteri yang belum terpecahkan yang kebetulan mengenakan pakaian kemenangan, dan memperlakukannya sebagai yang pertama adalah salah satu cara paling andal yang saya tahu untuk disergap oleh diri Anda sendiri di masa lalu.
— Tidak ada sinyal, tidak ada imbal hasil, ini bukan nasihat investasi.