Scaling Trunk-Based Development untuk enterprise: feature flags management system (LaunchDarkly, Unleash), branch by abstraction, parallel change (expand & contract pattern), CI/CD pipeline untuk TBD, dan integrasi TDD untuk memastikan setiap commit ke main aman.

Setelah di episode 14 kita memahami perbedaan long-lived vs short-lived branches — dan mengapa branch pendek lebih disukai — pada episode ini kita membahas bagaimana Trunk-Based Development (TBD) bisa di-scale untuk tim besar. TBD di episode 3 dibahas untuk tim kecil-menengah; sekarang kita lihat bagaimana enterprise mengadaptasinya.
Kunci scaling TBD: feature flags menggantikan long-lived branches, CI/CD pipeline memastikan kualitas, dan TDD memberikan confidence untuk commit ke main setiap hari.
Untuk tim besar, feature flags bukan sekadar if statement — diperlukan sistem manajemen yang terpusat:
| Tool | Tipe | Fitur Utama |
|---|---|---|
| LaunchDarkly | SaaS | Targeting, A/B testing, analytics |
| Unleash | Self-hosted | Open source, SDK lengkap |
| Flagsmith | Self-hosted/SaaS | Open source, remote config |
| DIY | Custom | Simple toggle via config/DB |
import { init, variation } from 'launchdarkly-node-server-sdk'
const client = init(process.env.LD_SDK_KEY!)
async function isNewCheckoutEnabled(userId: string): Promise<boolean> {
return await variation(client, 'new-checkout-flow', userId, false)
}Feature flag memungkinkan kode baru di-deploy ke production tetapi tidak aktif sampai flag diaktifkan. Ini menggantikan kebutuhan long-lived feature branch.
Ketika kalian perlu mengganti dependensi lama (misal library A ke library B) tanpa memecahkan kode, gunakan branch by abstraction:
// Layer abstraksi
interface PaymentGateway {
charge(amount: number): Promise<Result>
}
// Implementasi lama
class StripeGateway implements PaymentGateway { ... }
// Implementasi baru
class MidtransGateway implements PaymentGateway { ... }
// Switching via feature flag
const gateway = featureFlags.isEnabled('use-midtrans')
? new MidtransGateway()
: new StripeGateway()Pattern ini memungkinkan perubahan API tanpa breaking change dalam satu commit:
Setiap tahap bisa di-deploy secara terpisah. Tidak perlu branch panjang untuk perubahan API.
Pipeline TBD harus cepat dan reliable:
main harus passing semua tests.Test-Driven Development memastikan setiap commit ke main aman:
Dengan TDD, setiap commit ke main punya test yang memvalidasi. Confidence untuk commit meningkat drastis.
Tip
TBD + TDD + Feature Flags adalah kombinasi paling powerful untuk tim besar yang ingin continuous deployment. TDD memastikan kualitas, TBD memastikan integrasi berkelanjutan, feature flags memastikan safety.
Pada episode 15 ini, kalian telah memahami TBD untuk Tim Besar:
main aman dan teruji.Di episode 16 selanjutnya kita akan mempelajari GitHub/GitLab Branch Protection & Rulesets — bagaimana mengamankan branch utama dengan status checks, approval requirements, dan rulesets modern. Sampai jumpa di episode 16!