Get started
Back to blog

Feature flag naming conventions that scale

A flag name gets read a thousand times and written once. Spend the extra minute on the name.

Here’s the scheme we use at Flagify and the reasoning behind each rule.

Rule 1: kebab-case, always

new-checkout-flow       ✓
newCheckoutFlow         ✗
NEW_CHECKOUT_FLOW       ✗
new_checkout_flow       ✗

Kebab-case is readable at a glance. It matches the way URLs are written. Every other casing style invites typos — isNewCheckoutFlow vs isnewcheckoutflow vs is_new_checkout_flow. Pick kebab-case and move on.

Rule 2: start with the area, then the specific thing

checkout-new-flow       ✓
new-checkout-flow       also ✓, but less sortable
checkout-express-lane   ✓

When you have 50 flags, alphabetical sorting is how you navigate the list. If all your checkout flags start with checkout-*, they cluster together. If they start with adjectives (new-checkout, fast-checkout), they scatter.

Some teams prefer verb-first (enable-checkout-new). That works too if you apply it consistently. The important thing is that the area is somewhere in the prefix.

Rule 3: describe what the flag does, not when it was created

new-search-engine       ✓
search-v2               OK (acceptable)
search-2026-redesign    ✗ (dates are noise)
sprint-47-search        ✗ (who cares about sprint numbers)

The version numbers in v2, v3 are borderline. They are fine when the old and new coexist. They are annoying when v3 has been live for two years and nobody remembers what v1 or v2 were.

Rule 4: encode the type in the name when it matters

Some teams prefix flag types so you can tell at a glance what category they are:

release-new-checkout    (release flag, temporary)
kill-payment-processing (kill switch, permanent)
exp-pricing-page        (experiment)
plan-csv-export         (entitlement by plan)

This is optional. Most flag tools let you tag flags by type in the dashboard, so you don’t need to encode it in the name. But if your team doesn’t use tags, the prefix helps.

Rule 5: make intent obvious

The name should answer “what happens when this flag is true?”

Good: enable-dark-mode — on means dark mode is on Confusing: dark-mode-override — on means what, exactly?

Good: show-beta-banner — on means the banner appears Confusing: beta-banner-suppress — double negative

Avoid flags where the meaning depends on context. The person reading the code should not have to look up the flag definition to know what “true” does.

Rule 6: keep names stable

Once a flag is live in production, renaming it is a coordinated change: code, tests, dashboard, docs. It is usually not worth it. Spend the extra minute when you create the flag so you don’t regret the name later.

If you do need to rename, create the new flag, wire it up in parallel with the old one, let them run together for a deploy cycle, then remove the old flag. Don’t rename in place.

Rule 7: no secrets, no PII

Flag names end up in logs, dashboards, git history, and (if you’re unlucky) screenshots shared in Slack. Don’t put anything in a flag name that you wouldn’t want visible.

internal-policy-override   ✓
customer-x-special-deal    ✗ (names real customer)
bypass-fraud-check-acme    ✗ (exposes internal workaround)

Examples across flag types

Release flags (temporary):

checkout-new-flow
search-elasticsearch-backend
dashboard-redesign-2026

Kill switches (permanent):

enable-email-sending
enable-payment-processing
enable-llm-suggestions

Entitlements (business rules):

feature-csv-export-pro
feature-sso-enterprise
feature-unlimited-workspaces

Experiments (temporary):

exp-pricing-page-headline
exp-onboarding-flow
exp-checkout-cta-copy

Scaling past 50 flags

Once you have more than about 50 flags, a flat namespace gets painful. Options:

Projects. Split by product area. Flagify supports multiple projects per workspace. Flags in project checkout can have simpler names because checkout- is implicit.

Tags. Tag flags in the dashboard (area, team, flag type). Use tags to filter, not to name.

Prefixes. Within a project, prefix by team: team-payments-new-gateway, team-growth-referral-banner. Helps with ownership.

What we do internally

We have about 40 active flags across three projects. Our convention:

  • Kebab-case
  • Start with the area when it exists: cli-, api-, dashboard-
  • Use enable- prefix for kill switches
  • Use exp- prefix for experiments
  • Don’t use date or sprint numbers

It’s simple enough that new engineers pick it up in their first week.


Read feature flag best practices for the broader context, or the What are feature flags guide for flag types and lifecycles. Flagify enforces kebab-case automatically — you can’t create a flag with invalid casing.

Start for free — no credit card required.