Release Train Management Framework
A release train is a fixed schedule on which releases depart whether or not any particular feature is aboard. Predictability replaces negotiation, which is what lets large organisations ship regularly.
How it works
Each cycle follows the same timeline. Development merges to the main branch continuously, with unfinished work behind flags. On cut day, a release branch is created. During stabilisation, only bug fixes with approval are merged. After exit criteria pass, the release manager approves rollout, which may itself be progressive. Anything missing the cut goes on the next train without escalation.
The train model works best when the cadence is short enough that missing a departure is cheap. If a train leaves every two weeks, a team that misses it loses at most two weeks, so there is little incentive to cram risky changes in. If the cadence stretches to a quarter, every departure becomes a high-stakes event and the pressure returns. Tighten the cadence as verification becomes automated, and use the retrospective after each train to remove one manual step from the next.
Implementation steps
- Choose a cadence that matches your verification capability, commonly one to four weeks.
- Publish a calendar with cut, freeze, rollout and retrospective dates for the year.
- Write entry criteria for the branch cut and exit criteria for release, including test pass rates and open blocker count.
- Adopt trunk-based development with feature flags for incomplete work.
- Automate release notes, version bumps and branch creation.
- Rotate the release manager role and document the checklist.
- Define a hotfix path that cherry-picks to the release branch and main.
Pitfalls
- Delaying the train for one important feature, which destroys trust in the schedule.
- Allowing large unreviewed merges after the cut.
- Letting the stabilisation period grow until it is a mini waterfall.
- Treating the train as a reason not to improve test automation.
- Lacking a rollback plan per release.
Metrics to watch
- Percentage of trains that depart on schedule.
- Number of changes merged after branch cut.
- Escaped defects and hotfixes per release.
- Lead time from merge to customer availability.
- Stabilisation duration trend.
Example release calendar
cadence: 14d
phases:
- name: development
days: 1-9
- name: branch_cut
day: 10
action: "create release/YYYY.MM.N from main"
- name: stabilisation
days: 10-12
allowed_changes: "approved bug fixes only"
- name: rollout
day: 13
strategy: "canary 5% then 25% then 100%"
exit_criteria:
critical_bugs_open: 0
regression_suite_pass_rate: 0.99
rollback_tested: true
hotfix:
approval: release-manager
backport_to: main
Key takeaways
- The schedule is fixed; the scope is flexible.
- Feature flags let incomplete work merge without release risk.
- Keep stabilisation short and rules for late changes strict.
- Use the train to build toward continuous delivery, not to avoid it.