Writing Good Software is Hard

Tanggal 6 Januari 2019 kemarin, kantor dimana gue bekerja menjadi vendor buat pengadaan tryout SBMPTN nasional. Tryout yang dilakukan dengan media komputer dan hp ini disebut tryout CBT, simulasi SBMPTN.

Sampai tanggal 5, jam 8 malam, tidak ada yang aneh. Semua berjalan sesuai ekpektasi.

Tryout akan dilakukan serentak seluruh Indonesia mulai jam 8 sampai 13.

Sofware CBT yang gue tulis ini sudah di tes di berkali-kali di berbagai macam case. Memang ada masalah, tetapi gue fix saat itu juga.

Tingkat ke-PD-an gue dengan software ini di atas 90%. Gue yakin tidak akan ada drama-drama aneh.

Ternyata Ada yang Salah…

CBT tersebut tidak berjalan sesuai ekpektasi gue.. laporan siswa bermasalah. Somehow laporan tersebut jadi error. Jam 9 gue mulai panik, apalagi orang yang bekerja di backend sudah tidak bekerja per tanggal 1 Januari 2019.

Satu-satunya orang yang paling mengerti dan bertanggung jawab atas code itu adalah gue.

Bagaimanapun juga pressure saat itu sangat tinggi. Tryout harus berjalan besok jam 5 pagi. Data murid belum kita bersihkan dan upload.

Stresss lvel 99..

Untungnya, orang yang paling mengerti code backend yang seharusnya sudah tidak bekerja lagi, mau membantu melakukan debugging.

Satu jam berlalu.. dan bugnya ketemu.. Yaitu hash-map kunci jawaban ilang.

Oke, kita sampai saat ini belum tahu kenapa bisa ilang. Yang pasti hash-map itu adalah atribut baru untuk mengganti sistem kunci jawaban lama dengan tipe vector/array.

Kenapa test tidak bermasalah…

Suspect gue dari test-test sebelumnya adalah..

  1. Kode di frontend tidak mengirimkan hash-map kunci jawaban saat membuat soal.
  2. hash-map kunci jawaban memang dibuat di backend, dengan mentransformasi kunci jawaban legacy yang berbentuk vector/array.
  3. Dari dulu report memang bermasalah, tetapi testnya tidak ada, jadi lolos.
  4. Somehow soal dibuat dengan cara yang berbeda, dimana hash-map hanya dibuat di cara tersebut.

Untuk no. 1, gue sangat yakin. Kalo gue memang tidak pernah mengirim kunci jawaban dalam bentuk hash-map.

Itu juga yang menjadi masalah sebenarnya, dan gue solusinya dengan membuat kunci hash-map di depan.

Untuk no. 4, karena kita punya 3 tipe soal. soal gambar, soal yang di generate, dan soal yang ditulis manual. Masing-masing ditulis dari form yang berbeda.

Automatic Deployment is a Must

Selama ini cara gue ngedeploy masih manual, manual tanpa script. Tanpa Continues Delivery.

Iya, gue akuin memang salah..

Saat itu, bug sudah ditemukan, kode sudah gue perbaiki. Tinggal deploy. Waktu deploy yang biasanya habis 15-30 menit, naik jadi 3 jam!

Kok bisa?

Ternyata masalahnya adalah caching yang kelewar agresif. Entah kenapa cache yang biasanya gampang dihapus tidak mau dihapus.

Solusinya adalah dengan cara query-param atau mengganti lokasi asset yang baru. Sehingga dengan cara ini browser yakin melakukan request pada asset paling baru.

Monitoring…

Tepat jam 4.30 pagi, sofware sudah berjalan dengan normal kembali, peserta tryout sudah kita upload..

Ya masih ada beberapa masalah, tetapi masalah tersebut bukan dari sofware. Tetapi memang karena koneksi yang buruk.

Sampai hari minggu jam 2 siang, tryout masih berjalan.. DAN gue belum tidur sama sekali…

Masalah lain: Jam 4 sore, harusnya kita bisa deliver report tryout. Oke, jobdesk membuat report ini adalah orang backend baru.

Ternyatea.. dia sampai jam 15 belum bisa membuat report tersebut.. Gue sebagai senior dia mengambil alih kerjaan dia..

Tetapi..

Setelah gue liat structure datanya, gue mengerti kenapa dia tidak bisa membuar report.

Dalam keadaan normal gue, gue bisa bikin report ini paling cepat kira-kira 2 hari sudah bersih Saat itu gue tolol karena tidak tidur semaleman, tidak bisa mikir jernih.

Pada akhirnya report tidak bisa di delivery hari itu juga… dan tryout selesai. Gue pulang dan langsung tidur dari jam 16.30.

Keesokan harinya, gue bangun jam 3 pagi. Dan saat itu juga yang terlintas di kepala gue adalah report tryout.

Membuka Mac dan menyiapkan segala environment yang diperlukan. Gue mulai bisa berpikir jernih lagi untuk coding. Report selesai, dan ternyata waktu efektif membuat report tersebut kira2 3 jam! wow! bukan 2 hari!

Lesson Learned..

Apapun alasan lo, testing itu harus ada testingnya juga.. testing sebanyak mungkin adalah kewajiban.

Bikin software itu susah, apalagi kalo sudah ada bug-bug aneh. Pastikan kalo input yang lo kasih bener-bener bener. Inget garbage in garbage out.

Inget silogisme dasar p → q dan ~p → ~q

Dengan silogisme itu lo bisa yakin kalo input yang lo kasih bener, outputnya juga bener. Kalo outputnya salah, yang pasti input yang lo kasih gak lo jaga!

Dan satu lagi.. tidur, tidur itu penting.. kalo lo gak tidur jatuhnya tolol.

0 comments… add one

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.