Saat Kalibrasi Gagal: Apa yang Saya Pelajari Tentang Presisi
Itu malam Desember 2021, ruang lab ber-AC yang hampir kosong, layar laptop saya memantulkan barisan angka yang seharusnya bernilai stabil. Saya sedang menyiapkan demo produksi untuk klien besar: sistem kontrol yang mengandalkan kalibrasi sensor dan model estimasi posisi. Targetnya sederhana di atas kertas — akurasi sub-satu derajat. Kenyataannya, kalibrasi itu gagal total. Angkanya meleset, controller berosilasi, dan di kepala saya muncul pertanyaan sederhana: “Kenapa bisa sampai begini?”
Momen Ketika Kalibrasi Gagal
Saat itu saya merasa panik. Waktu menipis, tim sudah berkumpul, dan demo harus dimulai dalam dua jam. Sensor IMU yang selama ini saya percaya menunjukkan bias berbeda-beda setiap kali reboot. Log menunjukkan parameter kalibrasi terakhir tersimpan, tetapi hasilnya sama buruknya. Ada emosi yang aneh: campuran malu, kecewa, dan rasa ingin tahu yang tajam. “Jangan panik dulu,” saya bilang pada diri sendiri. “Lihat log, bandingkan versi, ulangi langkah terakhir.”
Saya mulai menyisir file konfigurasi. Ternyata masalahnya bukan hanya satu hal kecil — melainkan tumpukan kecil keputusan yang saling memperbesar kesalahan. Pertama, ada perubahan format file JSON yang tidak ditangani oleh pipeline deployment. Kedua, ada asumsi unit (derajat vs radian) pada modul yang diimpor dari pustaka eksternal. Ketiga, CI men-deploy konfigurasi default ketika checksum tidak cocok. Ketika digabungkan, hasilnya adalah kalibrasi yang tampak ‘benar’ di file tetapi salah konteks saat runtime.
Bagaimana Saya Menelusuri Akar Masalah
Pengerjaan akar masalah itu seperti membongkar rangka jam tua: setiap roda gigi saya periksa, satu per satu. Saya menerapkan langkah yang sama ketika debugging sistem perangkat lunak: reprodusibilitas, isolasi, dan tes hipotesis. Pertama, saya membuat reproducer minimal — skrip kecil yang hanya memuat sensor emulator dan modul kalibrasi. Dalam ruang kecil itu masalahnya muncul lagi: kombinasi format dan unit menyebabkan offset konsisten 57.2958 — angka yang familiar bagi setiap pengembang yang pernah salah mengonversi radian ke derajat.
Lalu saya menambahkan validasi parsial: assert pada rentang nilai, checksum file konfigurasi, dan log verbose yang menuliskan versi pustaka yang dipakai setiap kali kalibrasi dimulai. Saya ingat percakapan singkat dengan pemasok sensor pada pagi hari itu — saya bahkan sempat menulis di chat, “Perangkat Anda mengirim quaternion di urutan yang berbeda?” Mereka merespons cepat; berkat itu saya tahu vendor melakukan perubahan protokol minor. (Saya menutupnya dengan catatan untuk tim dan tautan referensi di aeroprecisions yang membantu menjelaskan variasi implementasi sensor.)
Prinsip Presisi yang Saya Pelajari
Dari pengalaman itu saya menyusun beberapa prinsip yang sekarang saya pakai sebagai checklist sebelum mengandalkan kalibrasi pada sistem produksi. Pertama: validasi awal — jangan pernah percayai file konfigurasi tanpa memverifikasi checksum dan versi. Kedua: kontrak eksplisit antara komponen — unit dan urutan data harus dinyatakan dan diuji lewat kontrak, bukan asumsi implisit. Ketiga: buat reproducer minimal sehingga kita bisa mereproduksi masalah tanpa seluruh stack. Keempat: observability; log harus memuat konteks lengkap: versi pustaka, checksum, seed RNG, dan variabel lingkungan.
Satu hal yang saya tekankan pada tim adalah mengubah ekspektasi presisi dari “tepat” menjadi “terukur dan dapat dipercaya.” Presisi bukan hanya angka kecil pada laporan QA; presisi adalah karakteristik sistem yang bisa kita verifikasi, uji, dan monitor secara berkelanjutan.
Apa yang Saya Lakukan Setelahnya (dan Saran Praktis)
Setelah kejadian itu saya mengadakan sesi post-mortem dengan tim. Kami menambahkan gate di pipeline CI: validasi schema, pemeriksaan unit, dan hash file konfigurasi. Kami juga membuat dua environment kalibrasi — satu untuk dry-run dengan simulator, satu untuk hardware nyata — dan menuntut semua kalibrasi melewati keduanya sebelum publikasi. Selain itu, saya menulis dokumentasi singkat berjudul “Kalibrasi: Checklist Sebelum Deploy” dan memaksa diri saya untuk selalu menambahnya ketika menemukan kasus baru.
Ada hal-hal konkret yang bisa Anda terapkan hari ini: gunakan hash untuk file konfigurasi, sertakan versi eksplisit pada setiap artifact kalibrasi, dan bangun test-suite kecil yang memeriksa invariants (mis. rentang nilai, konsistensi unit, dan determinisme dengan seed yang sama). Jangan abaikan komunikasi dengan vendor — perubahan kecil di firmware atau API bisa menjadi penyebab kesalahan paling tak terduga.
Menutup cerita ini, saya ingin bilang: kegagalan kalibrasi itu menyakitkan, tapi itu juga guru terbaik. Malam itu saya pulang jam tiga pagi dengan kantong kopi kosong dan kepala penuh ide perbaikan. Hari berikutnya tim kami lebih cepat menemukan masalah, lebih tenang dalam eksekusi, dan sistem kami lebih bisa dipercaya. Presisi bukan tujuan akhir yang statis; ia adalah praktik berulang yang dibangun lewat disiplin, observasi, dan budaya memeriksa asumsi. Itu pelajaran yang selalu saya bawa ke proyek berikutnya.