1 poin oleh GN⁺ 2023-12-01 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2023-12-01
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

    • Saya agak kecewa karena akhirnya berakhir dengan “karena tidak bisa melihat bagian dalam Grammarly atau Chrome, kami tidak tahu kenapa decoding/rendering GIF membuatnya crash”
      Banyak masalah bisa dipersempit sampai kombinasi tertentu, tetapi kalau tidak tahu kenapa, rasanya kurang memuaskan
    • Hari ini juga saya men-debug regex yang bisa membuat backend masuk kondisi denial-of-service jika pengguna memasukkan nilai yang salah ke form
      Jadi sekarang saya sedang membaca tentang regex engine: https://swtch.com/%7Ersc/regexp/regexp1.html
    • Sekitar 5 tahun lalu saya mengalami hal serupa pada perangkat lunak pengawasan video berbasis web
      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
    • Kalau bug situs web sulit dipecahkan, langkah pertama seharusnya menonaktifkan semua ekstensi
      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

  • 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_stackwalk dari Chromium untuk membuat stack trace tanpa simbol dan mengunggahnya ke bug
    Dengan 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...

    • Saya juga pernah melihat kasus yang nyaris kebalikannya
      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
    • Hal serupa juga pernah terjadi ke arah sebaliknya. Kalau reboot dari Linux, Windows 10 mengalami blue screen saat boot
    • Saya penasaran apakah mematikan fast user switching tidak menyelesaikannya
    • Beberapa tahun lalu saya juga pernah melihat perilaku serupa pada perangkat Bluetooth
  • 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 animasi

    • Mengharapkan semua pengembang bisa menambal binary, kalau dikatakan dengan sopan, tidak realistis
      Dunia 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
    • Bahkan ketika open source tersedia, secara umum tampaknya kurang ada kemauan untuk benar-benar membaca kodenya
      Apalagi membuka disassembler atau memasang debugger; keterampilan seperti itu sepertinya sekarang tidak banyak diajarkan
    • Kemungkinan akan ada network request untuk mengambil opsi menu
      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

    • Setelah menemukan bug yang membuat Chrome merusak halaman, saya menambahkan pengaturan terkait ke semua halaman di single-page web app
      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
    • Ini benar-benar menyebalkan
      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
    • Saya penasaran apakah itu menerjemahkan bahasa Inggris menjadi bahasa Amerika atau entah apa
    • Cerita ini cukup lucu untuk dikirim ke tempat seperti DailyWTF
  • 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 hipotesis ini benar, apakah artinya Grammarly desktop melihat GIF, entah bagaimana memanggil fungsi aksesibilitas browser, lalu Chrome tidak bisa menanganinya dan crash?
  • 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 engineer, Firefox memang solusi yang bagus
      Dari sudut pandang PM, rasanya seperti: kita sudah menghabiskan 4 bulan untuk membuat onboarding mudah, lalu sekarang mau menyuruh orang memasang browser baru?
    • Di artikel yang ditautkan, ini sudah disebutkan sebagai workaround
    • Chrome menguasai lebih dari separuh pasar
      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