Sehari penuh: lima backup dan satu portal
Mulai tengah malam membereskan cadangan data yang ternyata bolong, selesai sore hari dengan satu portal yang menyatukan empat sistem. Beberapa pelajaran ikut terbawa.
- Tanggal
- Lokasi
- Makassar
- Peran
- Direktur
Hari ini dimulai lewat tengah malam dan berakhir sore. Bukan karena ada yang gawat, tapi karena satu pertanyaan sederhana yang saya ajukan ke diri sendiri: kalau server itu mati malam ini, apa saja yang hilang?
Jawabannya lebih buruk dari dugaan saya.
Tiga sistem tanpa jaring pengaman
Dari lima aplikasi internal yang kami jalankan, dua sama sekali tidak punya cadangan. Bukan cadangan yang jarang, bukan cadangan yang basi — memang tidak ada sama sekali. Yang satu menyimpan data registrasi peserta acara, yang satu lagi menyimpan transaksi penjualan.
Satu lagi punya cadangan, tapi disimpan di server yang sama dengan aslinya. Kalau servernya yang hilang, cadangannya ikut hilang bersamanya. Lucunya, alasan kenapa itu salah sudah saya tulis sendiri berbulan-bulan lalu di skrip aplikasi lain — dan saya tidak menerapkannya di sini.
Yang paling menggelikan: aplikasi kasir kedai kopi kami ternyata sudah punya skrip cadangan yang benar, lengkap dan rapi, sejak beberapa hari sebelumnya. Hanya tidak pernah dijadwalkan. Seseorang menyiapkan pemadam kebakaran lalu lupa memasangnya di dinding.
Cadangan yang berhasil, dilaporkan gagal
Bagian paling berharga hari ini justru datang dari sebuah kegagalan.
Saat menambahkan pemeriksaan otomatis pada cadangan — supaya sistem tidak sekadar menyalin berkas, tapi juga memastikan hasilnya benar-benar bisa dibuka — pemeriksaan pertamanya langsung gagal. Padahal datanya sehat.
Penyebabnya satu baris perintah yang terlihat wajar. Perintah pencarian berhenti begitu menemukan yang dicari, dan penghentian itu justru dianggap sebagai kegagalan oleh perintah sebelumnya. Jadi: semakin cepat sesuatu ditemukan, semakin pasti dilaporkan tidak ditemukan.
Bug yang sama ternyata sudah mengendap di skrip lain, belum meledak hanya karena datanya masih kecil.
Pelajarannya bukan soal teknis. Pemeriksaan yang tidak pernah gagal sama saja dengan tidak ada pemeriksaan. Saya baru percaya pemeriksaan itu bekerja setelah sengaja merusak beberapa berkas dan melihat semuanya ditolak.
Portal yang hanya boleh melihat
Sorenya, hal yang berbeda: menyatukan angka dari empat sistem ke satu halaman, supaya saya tidak perlu membuka satu per satu tiap pagi.
Satu aturan saya tetapkan sejak awal dan tidak saya langgar sekali pun: portal ini hanya boleh membaca. Tidak menyimpan salinan, tidak menulis apa pun ke sistem lain. Aturannya bukan sekadar niat baik — akses ke setiap sumber memang dibatasi sampai ke tingkat database, sehingga percobaan menulis akan ditolak walaupun kodenya salah tulis.
Untuk data penggajian, aturannya lebih ketat lagi: portal hanya menampilkan angka gabungan. Tidak pernah baris per orang. Yang butuh detail membuka aplikasinya langsung dengan haknya sendiri.
Yang tidak saya buat
Rencana awalnya ada kartu pencapaian KPI. Tidak jadi.
Waktu datanya diperiksa, hampir semua nilai realisasinya sama persis dengan targetnya. Artinya kartu itu akan menampilkan pencapaian sempurna — bukan karena kami hebat, tapi karena datanya belum benar-benar diisi.
Angka yang salah tapi terlihat meyakinkan lebih berbahaya daripada kolom yang kosong. Yang kosong membuat orang bertanya; yang salah membuat orang mengambil keputusan.
Hal yang sama untuk grafik tren: seluruh datanya baru berumur satu minggu. Tidak ada yang bisa dibandingkan. Grafik tren tanpa riwayat cuma hiasan.
Dua sistem, dua zona waktu
Satu jebakan kecil yang layak dicatat. Dua aplikasi kami menyimpan waktu dengan cara berbeda — yang satu memakai waktu universal, yang satu memakai waktu setempat. Dua-duanya menampilkan jam yang benar ke pengguna, jadi dari layar tidak ada yang aneh.
Bedanya baru terasa saat ada yang membaca datanya langsung untuk membuat laporan. Selisihnya delapan jam — cukup untuk membuat transaksi tanggal 1 pagi terhitung masuk bulan sebelumnya. Jenis kesalahan yang tidak akan ketahuan sampai ada yang mempertanyakan angka laporan bulanan.
Yang saya bawa pulang
Tiga hal.
Cadangan belum jadi cadangan sampai pernah dipulihkan. Menyalin berkas itu gampang. Memastikan berkas itu bisa dibuka kembali adalah pekerjaan yang berbeda, dan itulah pekerjaan yang sebenarnya.
Verifikasi yang longgar sama saja dengan tidak verifikasi. Hari ini ada satu kesalahan yang lolos ke tangan saya karena diperiksa dengan cara yang terlalu mudah — memeriksa apakah sesuatu ditandai tersembunyi, bukan apakah benar-benar tidak terlihat. Keduanya terdengar sama. Ternyata tidak.
Menolak membuat sesuatu juga sebuah keputusan. Dua kartu batal dibuat hari ini, dan saya lebih puas dengan yang batal itu daripada beberapa yang jadi.