A feature flag is a branch that ships and must be removed

A flag decouples deploying from releasing, which is genuinely valuable, and it doubles the number of code paths — permanently, unless somebody deletes it.

if (Feature::enabled('new_checkout', $user)) {
    return $this->newCheckout($request);
}

return $this->legacyCheckout($request);

// the part that is not code: a ticket, created WITH the flag,
// with a date, to delete the flag and the losing branch.

Two flags interacting is four paths and nobody has tested all four, which is why a codebase with forty long-lived flags has a combinatorial space no suite covers. Creating the removal ticket at the same time as the flag is the only mechanism I have seen work; a monthly review of flag age is the backstop. A flag at a hundred percent for three months is dead code with a configuration entry.