Microservices bukan tahap “lebih dewasa” yang wajib dicapai. Ia masuk akal ketika batas domain, kebutuhan scaling, dan struktur tim sudah menuntut deployment independen—dan organisasi siap membayar biaya operasionalnya.
Mulai dengan modular monolith
Pisahkan modul berdasarkan capability bisnis, bukan layer teknis global. Modul Orders tidak boleh membaca tabel Payments secara sembarangan; komunikasi melewati kontrak internal.
src/
Orders/
Application/
Domain/
Infrastructure/
Payments/
Application/
Domain/
Infrastructure/
Identity/
...Pilih service pertama dengan risiko rendah
Kandidat baik memiliki boundary jelas, perubahan terukur, dan sedikit transaksi lintas domain. Image processing, notification, atau reporting sering lebih aman daripada langsung memisahkan checkout inti.
Strangler pattern
- 1Letakkan gateway di depan monolith.
- 2Arahkan satu capability baru ke service terpisah.
- 3Sinkronkan data melalui API atau event yang terdefinisi.
- 4Pantau hasil dan pindahkan traffic bertahap.
- 5Hapus kode lama setelah tidak ada consumer.
Biaya yang sering diremehkan
Trace request lintas service.
Deployment, secret, service discovery.
Contract dan integration environment.
Tidak ada join bebas antar-database.
Kegagalan parsial dan retry.
Versioning dan kompatibilitas API/event.
Ukuran keberhasilan migrasi
Deployment lebih independen, lead time turun, incident dapat diisolasi, dan tim memiliki ownership yang jelas. Jika hasilnya hanya repository bertambah tanpa perbaikan delivery, migrasi belum memberi nilai.
