Comparisons

Pairs that get conflated in real conversations. Neither column wins — what decides is the situation. Each record leads with the confusion, because the confusion is the reason the record exists.

Feature flag vs long-lived branch

What people get wrong about this pair

A branch feels safer because nothing is "live". It is the opposite: the code is invisible until the biggest possible launch, the merge is the riskiest moment of the quarter, and nobody can turn it off. A flag makes the small, reversible launch the default.

Feature flag
Use it when

When the feature should reach real users gradually, be turned off in a minute, and never block the trunk.

Long-lived branch
Use it when

Almost never for product work; for a spike you will throw away, or a migration that cannot be partial.

AspectFeature flagLong-lived branch
Who sees itWhoever you choose: you, a cohort, everyoneNobody until the merge
UndoFlip the flagRevert the merge, hope nothing depended on it
CostFlag cleanup, two code paths for a whileMerge conflicts, a big-bang launch
What it teaches youReal usage, earlyNothing until it is everything