Rabu sore, telepon dari nomor tak dikenal masuk saat aku baru selesai deploy perbaikan kecil. Yang menelepon seorang product manager dari sebuah agensi digital yang mengelola langganan software untuk belasan klien kecil-menengah mereka sendiri. Tawarannya jelas dari kalimat pertama: kontrak tahunan senilai Rp180 juta, jauh di atas total pendapatan tracker langganan yang kubangun sendiri ini selama enam bulan terakhir digabung. Aku sempat diam beberapa detik, bukan karena bingung, tapi karena mencoba menahan diri supaya suaraku tidak terdengar terlalu antusias di telepon.
Angka yang Bikin Aku Berhenti Sebentar
Skema yang mereka tawarkan sederhana di permukaan: agensi itu akan mendaftarkan seluruh klien mereka di bawah satu akun tracker langgananku, lalu membayar satu tagihan tahunan flat alih-alih belasan langganan bulanan terpisah yang selama ini mereka urus manual lewat spreadsheet. Buat aku, ini setara dengan mengunci lebih dari separuh target pendapatan tahunan dalam satu kontrak, dari satu klien, ditandatangani minggu itu juga kalau aku setuju. Tidak ada proyek sampingan lain yang pernah menawarkan kepastian sebesar itu dalam satu percakapan telepon.
Tapi ada satu syarat yang mereka sebut belakangan, nadanya seperti detail administratif kecil: setiap klien di bawah akun mereka harus bisa melihat dashboard dengan logo dan domain masing-masing, bukan logo tracker langgananku. "White-label saja, seperti kebanyakan tools lain," katanya, seolah itu satu baris konfigurasi.
Satu Baris di Proposal yang Ternyata Membelah Fondasi
Aku buka lagi arsitektur autentikasi yang sudah kubangun sejak hari pertama: satu akun sama dengan satu tenant, satu skema permission, satu identitas brand yang tampil di seluruh dashboard, email notifikasi, dan halaman status publik yang pernah kutulis di sini. Semuanya diasumsikan flat, satu lapis, karena memang begitu kebutuhan setiap pelanggan individual selama ini.
White-label per sub-klien di bawah satu akun agensi bukan soal ganti logo di CSS. Itu berarti menambah lapisan tenant baru di atas model yang sudah ada — isolasi data antar sub-klien, hak akses berjenjang supaya sub-klien satu tidak bisa mengintip milik sub-klien lain, domain kustom per sub-klien, sampai template email terpisah untuk tiap brand. Aku hitung kasar di kertas coretan malam itu: paling cepat dua bulan penuh kerja, dan sesudahnya aku wajib merawat dua jalur kode selamanya — jalur akun biasa untuk pengguna individual, dan jalur multi-tenant untuk satu agensi ini. Setiap fitur baru yang kutambahkan sesudahnya harus dicek dua kali: apakah tetap jalan di kedua jalur.
Yang bikin aku benar-benar berhenti bukan estimasi waktunya, tapi menyadari siapa yang akhirnya menanggung biaya perawatan itu. Bukan agensi yang membayar Rp180 juta setahun, tapi ratusan pengguna individual lain yang membayar jauh lebih kecil per bulan — fitur mereka jadi antre di belakang permintaan satu klien besar, dan setiap bug di jalur multi-tenant berpotensi menyita waktu yang seharusnya untuk memperbaiki keluhan mereka.
Aku teringat insiden webhook nge-charge dobel yang pernah kutulis di sini — waktu itu, dengan satu model data flat, aku masih butuh semalaman penuh untuk melacak akar masalahnya di log worker. Kalau saat itu ada lapisan tenant tambahan di atasnya, setiap query debugging harus difilter dulu per sub-klien sebelum aku bahkan bisa mulai membaca pola errornya, dan waktu pemulihan yang sudah mepet itu gampang berlipat dua. Bukan hipotesis abstrak; itu gambaran konkret dari jenis insiden yang sudah pernah benar-benar terjadi di sistem ini.
Menolak Tanpa Menutup Pintu
Aku telepon balik dua hari kemudian, bukan lewat email supaya jelas ini bukan penolakan sepihak yang dingin. Aku jelaskan apa adanya: aku bisa kasih mereka satu akun besar dengan diskon volume untuk belasan klien yang mereka kelola — itu solusi yang sudah ada, tinggal aku aktifkan multi-seat di paket eksisting. Yang tidak bisa kuberikan tahun ini adalah white-label per sub-klien, karena itu berarti membangun ulang model data inti demi satu pelanggan, dengan risiko separuh basis pengguna lain ikut menanggung akibatnya.
Reaksinya tidak seburuk yang kukhawatirkan. Mereka tanya apakah diskon volume itu bisa dihitung ulang supaya mendekati nilai kontrak awal yang mereka tawarkan, dan aku setuju — angkanya turun ke sekitar Rp95 juta setahun, jauh dari Rp180 juta yang pertama disebut, tapi tanpa aku harus menyandera roadmap satu tahun ke depan untuk satu klien. Kami sepakat, dan minggu berikutnya mereka onboarding lewat akun multi-seat yang memang sudah kupunya.
Takeaway
Godaan terbesar dari kontrak besar bukan angkanya, tapi cara ia diam-diam mengubah siapa sebenarnya yang produk ini layani. Kalau aku menerima syarat white-label itu, aku tidak sedang menjual fitur ke satu agensi — aku sedang menjadikan satu agensi itu prioritas roadmap di atas semua pengguna lain, tanpa mereka pernah diberi suara. Menolak fitur kustom bukan berarti menolak pendapatan; sering kali itu berarti menawar ulang di sekitar apa yang sudah dibangun dengan benar, dan membiarkan angka kontraknya menyesuaikan diri dengan kenyataan itu, bukan sebaliknya.
Sumber gambar: Tim van der Kuip di Unsplash Sumber gambar: Chris Ried di Unsplash Sumber gambar: Ales Nesetril di Unsplash
The conversation 0
No comments yet. Start the conversation.