Trunk-Based Development | Faster Integration Guide
Implement trunk-based development with short-lived branches and continuous integration. GitScrum supports rapid feedback workflows for faster delivery.
9 min read
Integrate continuously. GitScrum supports trunk-based development workflows where teams integrate frequently to the main branch for faster feedback and delivery.
Understanding Trunk-Based Development
Core Concepts
TRUNK-BASED DEVELOPMENT:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THE CONCEPT: β
β ββββββββββββ β
β Everyone integrates to main/trunk frequently β
β Short-lived branches (hours, not weeks) β
β Continuous integration to shared codebase β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β TRUNK-BASED: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β main ββββββββββββββββββββββββββββββββββββββ ββ
β β β²β± β²β± β²β± β²β± β²β± ββ
β β ββ ββ ββ ββ ββ ββ
β β (short branches - hours/day) ββ
β β ββ
β β β’ Small, frequent merges ββ
β β β’ Conflicts are small and easy ββ
β β β’ Always shippable ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β VS GITFLOW: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β main ββββββββββββββββββββββββββββββββ ββ
β β develop βββββββββββββββββββββββββββββββ ββ
β β β² β± ββ
β β feature ββββββββββββββββββββββββ ββ
β β (weeks/months) ββ
β β ββ
β β β’ Big merges at end ββ
β β β’ Integration pain ββ
β β β’ "Merge hell" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β KEY DIFFERENCE: β
β Trunk-based = Integrate often, small batches β
β GitFlow = Integrate at end, big batches β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
How It Works
The Workflow
TRUNK-BASED WORKFLOW:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β DAILY FLOW: β
β βββββββββββ β
β β
β 1. PULL LATEST β
β git checkout main β
β git pull β
β β
β 2. CREATE SHORT BRANCH β
β git checkout -b add-login-button β
β (Branch lives hours, not weeks) β
β β
β 3. MAKE SMALL CHANGE β
β - Implement small, complete piece β
β - Add tests β
β - Keep it focused β
β β
β 4. PUSH AND PR β
β git push origin add-login-button β
β - Create PR β
β - Get quick review β
β β
β 5. MERGE SAME DAY β
β - Merge to main β
β - Delete branch β
β - Start next piece β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β BRANCH LIFESPAN: β
β ββββββββββββββββ β
β β
Hours β Ideal β
β β
1 day β Good β
β β οΈ 2-3 days β Getting long β
β β 1 week+ β Not trunk-based β
β β
β RULE: "If branch lives past end of day, something's wrong"β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Breaking Down Work
SMALL, COMPLETE CHANGES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BAD: BIG FEATURE BRANCH β
β βββββββββββββββββββββ β
β β
β "Implement user authentication" β
β β’ Login form β
β β’ Password reset β
β β’ OAuth integration β
β β’ Session management β
β β’ 2FA β
β β
β β 3 weeks of work β Big merge β Conflicts β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β GOOD: SERIES OF SMALL CHANGES β
β βββββββββββββββββββββββββββββ β
β β
β Day 1: β
β βββ "Add User model" (1 hour) β
β βββ "Add login form UI" (2 hours) β
β βββ "Add login API endpoint" (3 hours) β
β β
β Day 2: β
β βββ "Connect login form to API" (2 hours) β
β βββ "Add session token storage" (2 hours) β
β βββ "Add logout functionality" (2 hours) β
β β
β Each merge: Small, easy to review, easy to rollback β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β SLICING TECHNIQUES: β
β βββββββββββββββββββ β
β β
β HORIZONTAL: β
β Backend first, then frontend β
β DB first, then API, then UI β
β β
β VERTICAL (Better): β
β Thin slice through all layers β
β "User can log in" end-to-end β
β β
β INCREMENTAL: β
β Basic version first, enhance later β
β "Login works" β "Add remember me" β "Add 2FA" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Feature Flags
Hiding Incomplete Work
FEATURE FLAGS FOR TRUNK-BASED:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THE PROBLEM: β
β ββββββββββββ β
β Feature takes 2 weeks to complete β
β But we're merging to main daily β
β How to hide incomplete features? β
β β
β THE SOLUTION: FEATURE FLAGS β
β βββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β // Code is on main, but hidden behind flag ββ
β β ββ
β β if (featureFlags.isEnabled('new-checkout')) { ββ
β β return <NewCheckoutFlow />; ββ
β β } else { ββ
β β return <OldCheckoutFlow />; ββ
β β } ββ
β β ββ
β β // Incomplete code is safe in production ββ
β β // Enable flag when feature is complete ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ROLLOUT PROCESS: β
β β
β Week 1: Merge UI changes (flag OFF for everyone) β
β Week 2: Merge backend changes (flag OFF) β
β Week 3: Feature complete β
β β Enable for internal users β
β β Test in production β
β Week 4: Enable for 10% of users β
β Week 5: Roll out to 100% β
β Week 6: Remove flag and old code β
β β
β SEPARATION: β
β ββββββββββββ β
β DEPLOY: When code goes to production (daily) β
β RELEASE: When users see feature (when ready) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CI/CD Requirements
Keeping Main Healthy
TRUNK-BASED CI/CD:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β REQUIREMENTS: β
β βββββββββββββ β
β Trunk-based needs strong CI/CD β
β Main must always be deployable β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PRE-MERGE CHECKS: β
β βββββββββββββββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β PULL REQUEST: add-login-button ββ
β β ββ
β β AUTOMATED CHECKS: ββ
β β β
Lint passing ββ
β β β
Unit tests passing (423 tests) ββ
β β β
Integration tests passing (87 tests) ββ
β β β
Build successful ββ
β β β
Security scan clean ββ
β β β
Code coverage >80% ββ
β β ββ
β β HUMAN CHECKS: ββ
β β β
Code review approved (2) ββ
β β ββ
β β [Merge when ready] ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β POST-MERGE: β
β βββββββββββ β
β β’ Full test suite runs β
β β’ Deploy to staging automatically β
β β’ Smoke tests β
β β’ Deploy to production (or queue) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β IF BUILD BREAKS: β
β ββββββββββββββββ β
β β
β π¨ STOP THE LINE π¨ β
β β
β 1. All hands: Fix the build β
β 2. No new merges until fixed β
β 3. Revert if can't fix quickly β
β β
β Rule: "If you break the build, fixing it is your #1 job" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Code Review
Fast Reviews
TRUNK-BASED REVIEWS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SMALL PRS = FAST REVIEWS: β
β βββββββββββββββββββββββββ β
β β
β TRADITIONAL: β
β PR: 50 files, 2000 lines β
β Review: "I'll look at it later..." (3 days later) β
β β
β TRUNK-BASED: β
β PR: 3 files, 50 lines β
β Review: "Done in 15 minutes" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β REVIEW EXPECTATIONS: β
β ββββββββββββββββββββ β
β β
β TEAM AGREEMENT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β’ PRs reviewed within 2 hours ββ
β β β’ Small PRs prioritized ββ
β β β’ Async review is default ββ
β β β’ Pair programming = pre-reviewed ββ
β β β’ Blocking comments rare ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β PAIR PROGRAMMING ALTERNATIVE: β
β βββββββββββββββββββββββββββββ β
β If you paired on the code: β
β β’ Already reviewed during pairing β
β β’ Fast merge, maybe just 1 reviewer β
β β’ Shared ownership β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β REVIEW SIZE GUIDE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β LINES TIME TO REVIEW DEFECT FIND RATE ββ
β β βββββ ββββββββββββββ ββββββββββββββββ ββ
β β 50 15 min High ββ
β β 100 30 min Good ββ
β β 200 1 hour Medium ββ
β β 500+ 2+ hours Low (reviewer fatigued) ββ
β β ββ
β β TARGET: <200 lines per PR ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Adoption Tips
Getting Started
ADOPTING TRUNK-BASED:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β PREREQUISITES: β
β ββββββββββββββ β
β β Fast CI pipeline (<10 min) β
β β Automated testing (good coverage) β
β β Feature flag infrastructure β
β β Team commitment β
β β
β TRANSITION PATH: β
β ββββββββββββββββ β
β β
β STEP 1: SHORTER BRANCHES β
β From: week-long branches β
β To: 2-3 day branches β
β β
β STEP 2: MORE FREQUENT MERGES β
β From: Merge at feature complete β
β To: Merge daily β
β β
β STEP 3: FEATURE FLAGS β
β Add flags for incomplete features β
β Practice hiding work behind flags β
β β
β STEP 4: FULL TRUNK-BASED β
β Branch lives hours, not days β
β Multiple merges per developer per day β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β COMMON CHALLENGES: β
β ββββββββββββββββββ β
β β
β "Our tests are too slow" β
β β Invest in faster CI (parallel, better tests) β
β β
β "Reviews take too long" β
β β Smaller PRs are faster to review β
β β Team commitment to fast reviews β
β β
β "Features need long branches" β
β β Learn to slice smaller β
β β Use feature flags β
β β
β "Main might break" β
β β Better pre-merge checks β
β β Fast rollback capability β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ