Home Blog Series B B04
Series B: System Design for Indonesian Developers · B04 Indonesia Tech 22 September 2025 8 min read

Designing for Indonesia: Latency, Payment, WhatsApp & Compliance

CDN edge di Jakarta, ekosistem payment yang terfragmentasi, WhatsApp sebagai primary channel, dan UU PDP — konteks lokal yang harus jadi keputusan arsitektur dari hari pertama.

RM
Ryan Muliadi
Digital Systems Architect · Ryzen Digital Systems

Tutorial sistem desain dari luar negeri biasanya mengasumsikan infrastruktur yang berbeda: latency rendah ke AWS us-east-1, Stripe sebagai payment, dan email sebagai channel komunikasi utama.

Indonesia berbeda — dan perbedaan ini mempengaruhi setiap keputusan arsitektur. Berikut yang perlu Anda pertimbangkan yang tidak ada di tutorial internasional.

Latency dan CDN — Edge di Indonesia

Realita Latency Indonesia
Tanpa CDN, user di Papua bisa mengalami 200–400ms latency ke server di Jakarta — apalagi ke us-east-1 yang bisa 300–600ms. Untuk SaaS yang butuh responsiveness, CDN bukan optional.
Opsi CDNEdge di IndonesiaHargaCocok Untuk
Cloudflare (free/Pro)Jakarta, Surabaya, Medan, BaliFree tier memadaiStatic assets, API caching, DDoS protection
AWS CloudFrontJakarta PoPPay per useSudah pakai AWS stack
Cloudflare WorkersEdge compute Indonesia100k req/hari gratisAPI gateway, auth, rate limiting di edge
GCP Cloud CDNJakarta regionPay per useSudah pakai GCP stack

Untuk majority usecase, saya default ke Cloudflare Workers sebagai edge API gateway — route request ke origin server di Railway/GCP, tapi handle auth, rate limiting, dan caching di edge. Ini yang saya pakai untuk GiziKu.

TypeScript · Cloudflare Worker sebagai API Gateway
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url)

    // 1. Rate limiting di edge — sebelum hit origin
    const ip = request.headers.get('CF-Connecting-IP')
    const rateLimitKey = `rl:${ip}`
    const requests = await env.KV.get(rateLimitKey)
    if (Number(requests) > 100) {
      return new Response('Too Many Requests', { status: 429 })
    }

    // 2. Auth check di edge
    const token = request.headers.get('Authorization')?.replace('Bearer ', '')
    if (!token || !await validateJWT(token, env.JWT_SECRET)) {
      return new Response('Unauthorized', { status: 401 })
    }

    // 3. Forward ke origin — request sudah validated
    return fetch(`${env.ORIGIN_URL}${url.pathname}`, {
      method: request.method,
      headers: request.headers,
      body: request.body
    })
  }
}

Payment — Ekosistem Lokal yang Wajib Didukung

Internasional: Stripe cukup. Indonesia: minimal perlu 5 kategori payment method.

KategoriPlatformMarket Share EstimasiTarget Segment
E-walletGoPay, OVO, DANA, ShopeePay~45%Millennial, Gen-Z urban
Virtual AccountBCA, BNI, Mandiri, BRI~35%Semua segment, B2B
QRISSemua bank via Midtrans~10%, growingWarung, retail kecil
Credit CardVisa, Mastercard~7%Upper middle class, B2B
CODVia JNE, J&T logistics~3%, decliningNon-bankable, daerah 3T
💡 QRIS adalah Masa Depan

Bank Indonesia mendorong QRIS secara agresif — satu QR code yang bisa dibayar dari wallet apapun. Untuk target market UKM dan warung, implementasi QRIS via Midtrans atau DOKU lebih efektif dari GoPay standalone.

WhatsApp sebagai Channel Utama

Di Indonesia, WhatsApp bukan alternatif dari email — ini adalah primary channel. Open rate WhatsApp ~90% vs email ~20%. Ini implication-nya untuk arsitektur:

01
Notifikasi transaksi via WhatsApp, bukan email
Order confirmation, OTP, reminder payment — semua lebih efektif via WhatsApp. Gunakan Fonnte (lebih murah) atau WhatsApp Business API langsung (untuk volume tinggi dan branding).
02
Login via WhatsApp OTP
Banyak user Indonesia tidak punya atau tidak ingat password email. Login via nomor HP + OTP WhatsApp memiliki conversion rate lebih tinggi untuk segment non-tech-savvy.
03
Support via WhatsApp, bukan ticket system
Ticket system berbasis email sering diabaikan user Indonesia. WhatsApp-based support (dengan triage chatbot + human handoff) memiliki first response time yang jauh lebih baik secara persepsi user.

PDPA Indonesia — Checklist Minimum

UU PDP (Perlindungan Data Pribadi) berlaku sejak Oktober 2024. Ini bukan formalitas — ada sanksi pidana dan denda. Checklist minimum untuk developer:

Checklist · PDPA Minimum Compliance
✓ Data Inventory
  - Catat data pribadi apa yang dikumpulkan
  - Catat tujuan penggunaan setiap data
  - Catat pihak ketiga yang menerima data

✓ Consent
  - Consent eksplisit sebelum collect data
  - Bukan pre-checked checkbox
  - Mudah dicabut (unsubscribe, delete account)

✓ Data Minimization
  - Hanya collect yang benar-benar dibutuhkan
  - Review: apakah perlu birth date? Atau cukup age range?

✓ Data Retention
  - Tentukan berapa lama data disimpan
  - Implement auto-delete setelah periode tertentu

✓ Security
  - Enkripsi data sensitif at rest (nama, email, telp)
  - HTTPS wajib untuk semua endpoint
  - Audit log untuk akses data sensitif

✓ Breach Notification
  - Prosedur notifikasi ke user jika ada breach
  - Laporan ke Kominfo dalam 14 hari kerja
⚠️ Nomor HP adalah Data Pribadi yang Sangat Sensitif

Di Indonesia, nomor HP sering digunakan sebagai single point of identity — untuk WhatsApp, GoPay, mobile banking, dan OTP. Perlakukan nomor HP setara dengan password: enkripsi di database, tidak pernah di-log dalam plain text, dan audit akses.

Kesimpulan

Sistem yang bekerja di Indonesia perlu dirancang dengan mempertimbangkan konteks lokal dari awal: CDN edge di Jakarta, ekosistem payment yang terfragmentasi, WhatsApp sebagai primary channel, dan compliance UU PDP. Bukan afterthought — ini adalah keputusan arsitektur pertama.

Jangan desain untuk "user global" lalu lokalisasi di akhir. Desain untuk pengguna Indonesia dari awal — jauh lebih mudah dibanding re-architect setelah production.