Trunk-Based Development
Also Known As
trunk-based development
TBD
main branch development
TL;DR
All developers integrate small, frequent commits directly into a single shared branch (trunk/main), avoiding long-lived feature branches.
Explanation
Trunk-Based Development (TBD) requires developers to commit to the main branch at least once per day, keeping branches short-lived (hours, not weeks). This forces continuous integration — conflicts surface immediately rather than at merge time. Incomplete features are hidden behind feature flags. TBD reduces merge conflicts, improves team visibility, and enables true continuous deployment. It requires a comprehensive automated test suite and discipline around feature flags. Google, Facebook, and Netflix use variants of TBD at scale. It contrasts with GitFlow, where feature branches can live for weeks.
Common Misconception
✗ Trunk-based development means committing untested code directly to main. TBD requires short-lived feature branches (hours, not days) merged via CI with passing tests — feature flags hide incomplete work from users. It demands higher testing discipline than long-lived branches, not less.
Why It Matters
Trunk-based development keeps all developers on a single main branch with short-lived feature branches — eliminating merge conflicts from long-lived branches and enabling continuous integration.
Common Mistakes
- Feature branches that live longer than 1-2 days — divergence makes merges painful.
- Not using feature flags to hide incomplete work — trunk-based requires deploying incomplete features safely.
- Skipping code review for small changes — small changes still need review; pair programming is an alternative.
- Confusing trunk-based development with no branching — short-lived branches are fine; long-lived ones are not.
Code Examples
✗ Vulnerable
# Long-lived feature branch — anti-pattern:
git checkout -b feature/new-payment-system
# 6 weeks of development
# 847 files changed
# Merge conflict hell with main
# Trunk-based:
git checkout -b feature/payment-step-1 # 1 day max
# Small, releasable increment behind a feature flag
git merge main # Easy — only 1 day of divergence
✓ Fixed
# Trunk-based: all devs commit to main (or short-lived branches <1 day)
# Feature in progress but not ready → hide behind a flag
# 1. Create branch, work, push small commits daily
git checkout -b feat/new-checkout
# 2. Merge to main within a day — feature flag hides incomplete work
git checkout main && git merge feat/new-checkout
# Feature flag keeps it off for users until complete
if (\$this->flags->isEnabled('new_checkout', \$user)) {
return \$this->newCheckout->handle(\$cart);
}
return \$this->legacyCheckout->handle(\$cart);
# CI runs on every push to main — must stay green
# If you break main, fix forward or revert immediately
References
Tags
🤝 Adopt this term
£79/year · your link shown here
Added
15 Mar 2026
Edited
22 Mar 2026
Views
26
🤖 AI Guestbook educational data only
|
|
Last 30 days
Agents 1
No pings yesterday
Amazonbot 6
Perplexity 6
Google 3
SEMrush 3
Ahrefs 2
ChatGPT 1
How they use it
crawler 20
crawler_json 1
Related categories
⚡
DEV INTEL
Tools & Severity
🔵 Info
⚙ Fix effort: High
⚡ Quick Fix
Commit directly to main (or short-lived branches <2 days) and use feature flags to hide incomplete work — this eliminates merge conflicts and keeps CI green at all times
📦 Applies To
any
web
cli
🔍 Detection Hints
Long-lived feature branches >1 week; complex merge ceremonies; large merge conflicts from diverged branches
Auto-detectable:
✗ No
git
github
launchdarkly
⚠ Related Problems
🤖 AI Agent
Confidence: Low
False Positives: Medium
✗ Manual fix
Fix: High
Context: File
Tests: Update