Infrastructure & Operations › CI/CD & Deployment
Release Train
Shipping on a fixed schedule with whatever is ready.
Also known as: release train, scheduled release, fixed release cadence
A release train ships on a fixed schedule — every day, every two weeks — and leaves on time. Whatever is finished and ready gets on; anything incomplete waits for the next train. The schedule is the promise; the content flexes.
train departs Friday 14:00
✓ feature A (ready) → ships
✗ feature B (half done) → next train, not delayed for
The appeal is predictability. Downstream teams, support and customers can plan around a known cadence, and there’s no debate about “when does it go out”. It also puts a healthy pressure on finishing work rather than starting more, and it can coexist with feature flags — code ships on the train, and features are enabled separately (see deploy vs release).
The classic mistakes:
- Missing the train becoming normal. If features routinely miss, batch sizes grow and each release is riskier. A train should encourage small, finished work, not a last-minute rush.
- Deadline over quality. “It has to be on this train” pushes untested changes out the door. Missing a train should be cheap and normal; a broken release is not.
- Merge chaos before departure. If everyone lands work at the deadline, you get integration pain. Trunk-based development and frequent merges smooth this out.
- Treating it as the only way to fix things. A train doesn’t mean you can’t roll back or hotfix; it’s a release cadence, not a straitjacket.
When it’s useful: when coordination matters more than speed — many teams releasing together, or external dependencies that need a known date. It’s the opposite trade-off from continuous delivery (deployment frequency): fewer, scheduled releases instead of many small ones. Neither is wrong; they suit different organisations. A train with feature flags and good automation gets much of the safety of continuous delivery while keeping the fixed date.