Penemuan bug aneh dan proses penyelesaiannya
- Saat menjalani giliran on-call di tim alat internal, para pengguna yang memakai perangkat lunak internal Gusto mengalami masalah browser Chrome crash.
- Masalah ini menimbulkan berbagai gangguan pada layanan pelanggan.
- Untuk menyelesaikannya, mereka meminta bantuan rekan yang berpengalaman, tim infrastruktur produk, dan tim IT.
Petunjuk pertama
- Mereka mencoba mencari kesamaan di antara para pengguna yang terdampak.
- Tidak semua karyawan Gusto terdampak, dan perangkat lunak yang berhadapan langsung dengan pelanggan tidak mengalami masalah.
- Halaman web perangkat lunak internal lainnya berfungsi normal.
- Crash terjadi secara tidak konsisten, dan masalah tidak muncul di Safari maupun Firefox.
Petunjuk kedua
- Muncul hipotesis bahwa versi Chrome mungkin menjadi penyebab masalah.
- Saat sebagian pengguna memperbarui versi Chrome, masalah tampak teratasi, tetapi ternyata tidak sepenuhnya hilang.
- Mereka juga menduga ekstensi Chrome mungkin menjadi penyebab, tetapi masalah tetap bisa direproduksi tanpa ekstensi.
Sulitnya mereproduksi bug
- Tim infrastruktur meminta semua engineer untuk mencoba mereproduksi masalah.
- Kecuali dua engineer di Turki, tim engineering tidak melaporkan crash.
- Fitur pelaporan crash Chrome dinonaktifkan demi keamanan, sehingga penyelesaian masalah menjadi lebih sulit.
Titik balik yang beruntung
- Seorang engineer di Denver melaporkan bahwa masalah mulai muncul setelah mengunduh aplikasi desktop Grammarly.
- Mereka menemukan bahwa menghapus aplikasi Grammarly dan me-restart komputer dapat menyelesaikan masalah.
Kemajuan
- Setelah debugging menjadi memungkinkan, mereka mencoba berbagai cara untuk menemukan penyebab masalah.
- Aplikasi internal utama dibangun di atas ActiveAdmin, tetapi bagian yang lebih baru yang menggunakan React tidak mengalami crash.
- Saat menyelidiki bagian kode yang sama, mereka menemukan bahwa menu dropdown 'My History' adalah penyebab masalah.
Penyelesaian masalah
- Dikonfirmasi bahwa file gambar 'loader-spinner.gif' menyebabkan masalah.
- Setelah GIF tersebut diganti dengan gambar lain, halaman tidak lagi crash.
- Tidak jelas apakah Grammarly atau Chrome yang akhirnya memperbaiki masalah, karena sekarang GIF aslinya tidak lagi membuat Chrome crash.
Kesimpulan
- GIF animasi yang tak terduga ternyata menjadi kunci penyelesaian debugging.
- Mereka menyelesaikan masalah melalui rasa ingin tahu dan kolaborasi.
- Gusto menawarkan kesempatan untuk bekerja bersama orang-orang yang kolaboratif dan penuh rasa ingin tahu.
Opini GN⁺
Hal terpenting dari tulisan ini adalah penjelasan rinci tentang proses menemukan dan menyelesaikan bug yang disebabkan oleh faktor tak terduga. Tulisan ini menunjukkan kompleksitas dan ketidakpastian dalam rekayasa perangkat lunak, sekaligus menekankan betapa pentingnya kerja tim dan kemampuan memecahkan masalah dengan gigih. Ini memberikan contoh menarik tentang bagaimana tim engineering berkolaborasi untuk menyelesaikan masalah yang sulit dipahami, dan akan menjadi kisah yang sangat menarik bagi orang-orang yang tertarik pada bidang engineering.
1 komentar
Komentar Hacker News
Saat membaca, saya sempat berpikir ini mungkin masalah terkait Grammarly; dulu saya pernah mengalami bug dengan pola serupa, tidak bisa direproduksi, tetapi memengaruhi banyak orang di satu departemen tertentu
Pada akhirnya kesamaannya adalah mereka memasang ekstensi Grammarly, dan masalahnya hanya terjadi di URL pratinjau staging, bukan di situs produksi
Penyebabnya adalah regex yang keliru di ekstensi Grammarly, dan ketika nama domain melebihi sekitar 100 karakter, halaman menjadi hang
Kalau kasus kali ini benar-benar terjadi karena aplikasi desktop, rasanya lebih menyeramkan
Banyak masalah bisa dipersempit sampai kombinasi tertentu, tetapi kalau tidak tahu kenapa, rasanya kurang memuaskan
Jadi sekarang saya sedang membaca tentang regex engine: https://swtch.com/%7Ersc/regexp/regexp1.html
Dalam proses upgrade Windows 10 di seluruh perusahaan, kami mengganti laptop lama milik seorang manajer; prosedurnya sudah rapi, termasuk pengecekan kebutuhan software dan jaringan, serta backup profil pengguna dan dokumen
Di lembar evaluasi perangkat tertulis ThinkPad berusia 10 tahun, RAM 4GB, dan catatan bahwa laptop akan mati kalau kabel daya dicabut; saya merasa kesabarannya memakai itu luar biasa
Setelah laptop baru dibagikan, hampir semuanya normal, hanya transfer lisensi Grammarly yang belum berhasil sehingga kami mengajukan permintaan; seminggu kemudian license key diterapkan dan Grammarly juga dipastikan normal
Namun kemudian pada hari itu ia menghubungi karena halaman web kamera keamanan crash; helpdesk sudah mencoba reboot, hapus cache, instal ulang browser, sampai membuat ulang profil, tetapi tidak terselesaikan sehingga diteruskan ke saya
Saya memeriksa jaringan, log firewall, PC lain, akses dari lokasi maupun dari luar, tetapi dari sisi saya semuanya normal dan tidak ada orang lain yang bermasalah
Saat saya bertanya “apakah belakangan ada yang berubah di PC atau kantor?”, ia bercanda, “Hari ini saya memasang Grammarly, apa mungkin itu?”; karena ide saya sudah habis, saya benar-benar mencoba menghapusnya, dan ternyata berfungsi
Saat Grammarly dinyalakan lagi dan tautan dibuka, jelas gagal
Software kamera itu sangat tua, dan tautan homepage kustomnya berbentuk seperti URL hasil generate PHP yang sangat panjang; karena dia satu-satunya orang di lokasi yang memakai Grammarly, masalah itu hanya pernah terlihat sekali
Developer sering lupa bahwa ekstensi bisa menjadi penyebabnya, padahal ekstensi bisa melakukan macam-macam hal pada halaman web
Seorang profesor kampus sedang menulis makalah dan bilang garis bawah tidak bertahan, jadi saya kira itu sekadar kesalahan pengguna dan bisa saya bantu dalam 5 menit
Namun setelah lebih dari 3 jam, baru ketahuan bahwa kombinasi versi driver kartu video tertentu dan versi driver printer tertentu mencegah hanya output garis bawah
https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
Meskipun pelaporan crash dimatikan, ada kemungkinan file .dmp dibuat di suatu tempat dalam direktori profil pengguna
Jika file itu diunggah manual ke bug di https://crbug.com/new, developer Chrome bisa men-debug-nya
Jika dump tidak bisa dibagikan karena alasan yang mirip dengan alasan mematikan pelaporan crash, Anda bisa membangun
minidump_stackwalkdari Chromium untuk membuat stack trace tanpa simbol dan mengunggahnya ke bugDengan begitu developer Chrome bisa menambahkan simbolnya
Detailnya ada di https://www.chromium.org/developers/decoding-crash-dumps/
Kombinasi teknologi yang menghasilkan bug ini menarik. Inilah wajah web pada 2023
Saya ingin tahu apakah bug Chromium-nya sudah diperbaiki, tetapi daftar ini tidak mudah dijelajahi: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
Saya juga suka kesan bahwa Gusto menerbitkan tulisan ini untuk menunjukkan “ini bukan salah kami” sambil sedikit menyindir Grammarly
Ada masalah suara yang kadang tidak keluar setelah boot ke Linux, dan ternyata terkait dengan pengaturan dual boot Windows
Saat restart dari Windows, perangkat audio Realtek tidak benar-benar dimatikan sepenuhnya, hanya dibiarkan dalam mode hemat daya, sehingga Linux tidak bisa memulai perangkat itu
Solusinya hanyalah selalu mematikan Windows lalu menyalakannya dengan menekan tombol daya, dan masalahnya masih ada: https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...
Seseorang yang dual boot Windows dan Linux hanya bisa membuat Wi-Fi berfungsi jika boot ke Windows lalu restart ke Linux
Karena instalasi Linux tidak punya paket firmware untuk kartu Wi-Fi itu, perangkat sudah dalam keadaan siap jika reboot dari Windows, tetapi tidak berfungsi jika cold boot langsung ke Linux
Saya setuju akhirnya benar-benar antiklimaks
Katanya karena tidak bisa mengakses kode sumber Chrome maupun kode sumber Grammarly, yang bisa dilakukan hanya menebak-nebak; saya jadi bertanya-tanya apakah ini hasil dari gerakan “open source”
Tanpa kode sumber, ada pengembang yang benar-benar kehilangan arah dan menolak menggali lebih dalam, dan bagi perusahaan yang tidak ingin kebenarannya terungkap, sikap seperti ini tentu sangat menyenangkan
Dulu banyak orang yang mendisassemble program tanpa sumber, memahaminya, lalu menambalnya, dan cukup banyak dari mereka bahkan bukan pengembang profesional
Mereka hanya punya motivasi untuk membuat perangkat lunak berjalan sesuai keinginan, lalu secara alami belajar sejauh yang diperlukan
Tulisan ini juga menyinggung betapa gilanya kompleksitas seluruh stack. Melihat framework demi framework bermunculan di atas framework lain, rasanya sebagian besar masalah ini dibuat sendiri
Katanya setelah
loader-spinner.gif, yaitu placeholder yang ditampilkan saat opsi menu dimuat, dihapus, crash halaman berhenti; saya juga bertanya-tanya apakah pemuatan opsi menu memang perlu waktu selama itu sampai membutuhkan animasiDunia rekayasa perangkat lunak sangat luas, dan sudah lama hampir mustahil mengetahui semua bagian dari stack
Selain itu, rekayasa perangkat lunak adalah perjalanan pembelajaran, dan setiap orang berada di titik yang berbeda dalam perjalanan itu
Apalagi membuka disassembler atau memasang debugger; keterampilan seperti itu sepertinya sekarang tidak banyak diajarkan
Biasanya memang selesai hampir seketika, tetapi masuk akal memasang loading spinner untuk berjaga-jaga kalau memakan waktu lama
Yang paling aneh adalah kejadian ketika seorang pengguna bilang teks yang ia masukkan ke formulir tertentu berubah setelah disimpan
Awalnya saya mengira ada orang lain yang mengedit formulir yang sama secara bersamaan, tetapi log menunjukkan bukan begitu, dan di komputer saya teksnya terlihat benar
Lalu dari screenshot saya menyadari beberapa teks menu juga aneh, dan penyebabnya adalah opsi “Translate this page” di Chrome sedang aktif
Setelah saya memberi tahu cara mengganti bahasa dengan benar di dalam aplikasi, masalahnya hilang
Sepertinya inilah perintah baru yang bisa diterapkan ke aplikasi atau elemen. Mungkin bukan CSS karena tidak ingin mendukung perubahan dinamis, dan tampilannya jelek: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
Kadang saat melihat meta tag di aplikasi single-page besar, dalam proses mencari tahu mengapa tag itu diperlukan, saya menemukan kengerian baru
Saya sering mengandalkan Google Translate saat membaca situs web berbahasa Jepang, dan semua situs web yang memakai React jadi rusak
Karena React dan Google Translate sama-sama mencoba memperbarui DOM node tanpa saling mengetahui
Saya bahkan pernah serius melihat implementasi Google Translate untuk melihat apakah nantinya bisa membuat ulang web widget yang tidak mengalami masalah ini
[1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
Ini masalah yang terlalu familier
Dulu saya pernah melihat alat aksesibilitas Chrome menyebabkan masalah seperti ini pada menu dropdown, bahkan bisa direproduksi hanya dengan HTML yang sangat kecil
Bug spesifik yang saya alami 2 tahun lalu ada di Chromium-Edge, tetapi gejala dan penyebabnya sangat mirip
Grammarly hampir pasti bergantung pada sebagian alat aksesibilitas Chrome
Alat seperti ini sedikit berbeda di tiap turunan Chromium seperti Edge, Brave, dan Chrome
Kalau hal seperti ini terjadi lagi, saya sarankan minta mereka memakai browser lain saja
Khususnya Firefox sekarang jauh lebih baik dalam mengimpor bookmark, kata sandi, dan sebagainya dari Chrome
Semesta sudah mengirim sinyal bahwa sekarang waktunya pindah, dan kita tidak bisa menolak sinyal itu
Sebagai catatan, saya engineer Firefox, tetapi itu sama sekali tidak ada hubungannya dengan saran ini
Dari sudut pandang PM, rasanya seperti: kita sudah menghabiskan 4 bulan untuk membuat onboarding mudah, lalu sekarang mau menyuruh orang memasang browser baru?
Produk berbasis browser yang tidak berfungsi dengan baik di browser yang paling banyak dipakai di dunia bukan pertanda baik
Saya benar-benar menyukai kebijakan keamanan perusahaan yang memblokir laporan crash Chrome demi alasan keamanan, tetapi tetap mengizinkan karyawan menginstal Grammarly