GitScrum / Docs
All Best Practices

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                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related Solutions