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.
Outcome vs outputFirst version vs prototypeDecision record vs one-pagerSuccess metric vs guardrailReversible vs irreversible decisionsFeature flag vs long-lived branchNumbers vs conversationsIncident vs bug
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.
| Aspect | Feature flag | Long-lived branch |
|---|---|---|
| Who sees it | Whoever you choose: you, a cohort, everyone | Nobody until the merge |
| Undo | Flip the flag | Revert the merge, hope nothing depended on it |
| Cost | Flag cleanup, two code paths for a while | Merge conflicts, a big-bang launch |
| What it teaches you | Real usage, early | Nothing until it is everything |