Mengapa modular monolith mendominasi diskusi arsitektur 2026: bukti industri yang berbalik arah, anatomi monolith yang benar-benar modular, pola komunikasi dan transaksi lintas modul, serta roadmap evolusi bertahap ke services tanpa big-bang rewrite

Setelah di episode 14 kalian merancang cloud-native architecture — 12-factor, container, Kubernetes, dan serverless — pada episode ini kita kembali ke keputusan style dari episode 3 dengan kedalaman penuh: modular monolith, style yang justru mendominasi narasi industri 2026.
Ini bukan episode pengulangan. Episode 7 membahas mekanika boundary (cohesion, coupling, fitness function); kali ini kita bahas siklus hidupnya: mengapa industri yang sepuluh tahun memuji microservices mulai berbalik, bagaimana monolith modular bekerja sehari-hari di tim yang bertumbuh, dan bagaimana jalur evolusinya menuju services tanpa rewrite besar.
Beberapa kasus terkenal menandai pergeseran ini:
| Organisasi | Keputusan | Pelajaran |
|---|---|---|
| Segment | Microservices → monolith | Infrastruktur menyita mayoritas waktu engineer; refactor balik memulihkan produktivitas |
| Amazon Prime Video | Microservices → monolith (1 workload) | Biaya orkestrasi puluhan service untuk satu fitur tak masuk akal |
| Shopify | Modular monolith skala raksasa | Ruby monolith melayani traffic kelas dunia lewat disiplin modul |
| Basecamp/37signals | Keluar dari cloud kompleks | Kesederhanaan operasional = kecepatan bisnis |
Perhatikan polanya dengan hati-hati: ini bukan anti-microservices. Prime Video tetap menjalankan ratusan service di tempat lain; mereka hanya menyadari satu workload tidak butuhnya. Pelajaran architect-nya: style adalah alat, bukan identitas tim.
Mengapa gelombang balik ini terjadi? Karena generasi pertama adopsi microservices membayar tagihannya: distributed debugging, biaya platform, koordinasi rilis lintas tim, dan konsistensi data yang sulit. Banyak organisasi membayar harga terdistribusi tanpa menerima manfaatnya — karena masalah mereka sebenarnya adalah boundary yang buruk, bukan deployment yang bersatu.
Important
Rumusan 2026 yang sehat: modular monolith adalah default awal yang cerdas; microservices adalah keputusan sadar saat pemicunya nyata (episode 12). Yang gagal bukan yang memilih salah satu, melainkan yang memilih karena tren tanpa menghitung harganya.
Modular monolith ≠ monolith biasa dengan folder rapi. Bedanya ada tiga lapis disiplin:
Zona publik eksplisit dan larangan import internal (episode 7) dipaksa lewat tooling — ESLint boundaries, compiler visibility, atau module system. Tanpa enforcement otomatis, struktur folder hanyalah niat baik.
Tim dewasa melangkah lebih jauh: setiap modul punya suite test sendiri yang bisa dijalankan independen, dan pipeline mengeksekusi hanya test modul yang terdampak perubahan. Manfaatnya ganda: feedback cepat seperti multi-repo, tetapi tanpa biaya sinkronisasi versi antar repos.
PR menyentuh ordering + catalog?
→ jalankan test ordering, test catalog,
plus contract-test antara keduanya
→ modul lain dilewati: CI tetap <10 menit
walau codebase tumbuhSatu database cluster boleh, tetapi schema terpisah per modul dengan DB user berbeda-beda: user ordering secara teknis tidak bisa SELECT dari schema inventory — pelanggaran boundary data mustahil dilakukan diam-diam. Ini versi murah dari "database per service", dan jembatan migrasinya mulus: pindahkan satu schema ke instance baru tanpa menyentuh kode selain connection string.
Tiga pola resmi, dipilih sadar per aliran:
| Pola | Kapan Dipakai | Catatan |
|---|---|---|
| Panggilan langsung via public API | Jalur butuh jawaban sinkron | Type-safe, cepat; coupling tersedia tapi terkontrol |
| In-process event bus | Side-effect non-kritis | Semafor async; mudah dimigrasi ke broker nanti |
| Outbox + broker eksternal | Aliran yang sudah lintas sistem | Untuk modul yang sudah diekstrak |
Kekuatan evolusi ada di pola kedua: ketika modul inventory diekstrak menjadi service, konsumennya yang sudah mendengarkan event StockReserved tidak perlu berubah — hanya transport-nya berganti dari bus in-process ke Kafka. Desain ulang minim inilah hadiah dari disiplin sejak awal.
Transaksi lintas modul tetap satu keuntungan besar monolith: reservasi stok + pembuatan order bisa satu transaksi ACID lokal. Jangan sia-siakan sebelum waktunya — saga hanya dibayar saat boundary sudah menjadi jaringan.
Evolusi yang sehat adalah pull, bukan push — ditarik oleh masalah nyata, bukan didorong ambisi diagram:
Profil scale menyimpang tajam → ekstrak modul tsb
Kebutuhan compliance/isolasi (PCI, PII) → ekstrak
Tim ownership mulai bentrok rilis → ekstrak
Semua profil serupa, tim masih kecil → TAHANUrutan ekstraksi yang aman:
Dan setiap ekstraksi membawa checklist wajib dari episode 12: observability siap, kontrak dijaga test, saga menggantikan transaksi lintas, dan ADR baru mencatat pemicu beserta batas waktunya.
Mari susun rencana tiga tahun e-commerce kita secara eksplisit:
tahun_1:
state: modular monolith penuh
fokus:
- fitness function + schema-per-module enforcement
- in-process event bus untuk side-effects
- observability OTel dari hari pertama
pemicu_tahun_2: [tim >15 dev, flash sale >5x proyeksi]
gelombang_ekstraksi:
- modul: shipping
alasan: integrasi kurir, latensi tak menentu
transport: outbox -> kafka
- modul: payment
alasan: isolasi audit PCI
catatan: scope sempit, risiko rendah
tahun_3_kandidat:
- modul: inventory
syarat: profil scale menyimpang (episode 11)
tahankan: [ordering, catalog]
alasan: inti transaksional ACID; pecah belakangan
atau tidak sama sekali bila pemicu tak munculCatat sifat dokumen ini: ia bersyarat, bukan janji. Setiap gelombang menunggu pemicunya terukur — persis filosofi ADR-0002 dengan revisinya.
Tip
Ukuran sehat monolith modular juga punya batas praktis: build time dan boot time. Ketika satu aplikasi butuh >15 menit build atau >5 menit start lokal, iterasi tim melambat bahkan jika semuanya masih modular — itu juga sinyal evolusi, hanya beda jenisnya.
Inti yang harus dibawa pulang:
Di episode 16 selanjutnya kita masuk resilience & reliability design — circuit breaker, retry dengan backoff dan jitter, bulkhead, timeout budget, hingga chaos readiness dan error budget untuk menjaga janji availability 99,95% jalur checkout kita. Sampai jumpa!