Banyak aplikasi modern dirancang dengan asumsi yang naif: bahwa internet selalu stabil, cepat, dan tersedia setiap detik. Namun ketika kita turun langsung ke lapangan—seperti fasilitas logistik gudang berpendingin (*cold storage*), basement perkantoran, atau area perkebunan terpencil—asumsi tersebut seketika runtuh.
1. Masalah Lapangan: Kegagalan Paradigma "Cloud-First"
Saat mengembangkan Sesaat Segari untuk buruh harian lepas, saya menyaksikan bagaimana aplikasi berbasis server-first gagal total. Ketika seorang picker selesai membongkar palet buah pada pukul 03.00 dini hari di dalam ruangan bersuhu -5°C dengan dinding panel baja peredam sinyal seluler, request HTTP ke server akan mengalami timeout. Akibatnya, jam lembur pekerja tidak tercatat, dan hak upah mereka terpotong.
2. Skema SQLite Lokal & Audit Trail
Untuk menjamin bahwa data presensi dan lembur tidak dapat dimanipulasi atau hilang saat aplikasi ditutup paksa (*force close*), kita merancang tabel SQLite dengan *audit trail* yang ketat:
3. Strategi Conflict Resolution: Queue Mutasi & Idempotensi
Tantangan terbesar sistem offline-first terjadi saat koneksi internet kembali pulih (*reconnection*). Jika pengguna melakukan mutasi data secara offline di dua sesi berbeda, bagaimana server menentukan versi mana yang sah?
- Client-Side Outbox Queue: Seluruh aksi mutasi (INSERT/UPDATE) disimpan dalam antrean antarmuka terenkripsi lokal.
- Idempotent API Endpoints: Setiap mutasi dikirim dengan UUID unik. Jika request terkirim berulang akibat *network retry*, server tidak akan membuat entri ganda.
- Deterministic Merge: Untuk data presensi, timestamp lokal bersertifikat kriptografi dijadikan dasar kalkulasi penalti yang adil bagi pekerja.
4. Hasil Terukur & Pelajaran Berharga
Dengan arsitektur offline-first ini, Sesaat Segari berhasil mencapai 100% ketersediaan operasional (*zero-downtime*). Bahkan ketika gudang mengalami pemadaman BTS provider, pekerja tetap dapat melihat estimasi upah harian secara presisi, mencetak slip format PDF terenkripsi, dan mengekspornya langsung via Bluetooth atau WhatsApp saat sinyal kembali hadir.