At Stripe, we had two abstractions for branching logic in production: flags, which were meant to be explicitly temporal (temporarily split-testing traffic; rolling out a new feature or code path; exposing a specific path for a cohort of users during a closed beta) and gates, which were meant to be explicitly permanent (overriding a statement descriptor for a Thingish merchant; preserving historical functionality in a neglected API endpoint).