Admin Portal

Feature Flags

Toggle platform features on or off at the global, organization, or user level — enabling gradual rollouts, A/B tests, and kill switches without a deployment.

intermediate6 min read

Overview

Feature Flags allow DramWell engineers and product managers to control which platform features are active without requiring a code deployment. Flags can gate a feature globally, for a specific set of organizations, or for individual users. Use them to safely roll out new features, run A/B experiments, and instantly disable a misbehaving feature in production.

Key Concepts

Flag — A named boolean or multivariate switch that the codebase checks at runtime to decide whether a feature is enabled.

Flag State — Flags can be in one of three states:

State Description
On Feature is active for all targets (global or scoped)
Off Feature is disabled for all targets
Partial Feature is active for a defined percentage or explicit list of organizations/users

Target — The entity a flag is evaluated against. DramWell flags support three target types: Global (all orgs), Organization, and User.

Override — An explicit flag value set for a specific organization or user that takes precedence over the global flag state. Useful for beta testers, allowlist customers, or blocking a specific account.

Kill Switch — A flag configured to default On, intended specifically to disable a feature instantly if something goes wrong. Kill switches should be created proactively for any feature with an independent failure mode.

How It Works

Viewing All Flags

Go to Feature Flags from the left navigation. The table lists every registered flag with its current state, target type, and the last time it was changed. Use the search bar to find a flag by name or tag.

Toggling a Flag

Click any flag to open its detail panel. Use the State toggle to switch between On, Off, and Partial. Confirm the change in the modal. Changes propagate to all application instances within 30 seconds via the flag refresh mechanism.

Creating a Flag

Click New Flag and fill in:

  • Key — A machine-readable identifier (e.g., drampulse.loyalty_program). Keys follow the format <vertical>.<feature_name> and cannot be changed after creation.
  • Name — A human-readable label.
  • Description — What the flag controls and any context about its intended lifecycle.
  • Default State — On or Off.
  • Tags — Optional. Used to group flags by vertical, team, or release cycle.

Configuring Partial Rollouts

With the flag in Partial state, use the Rollout section to define the rollout scope:

  • Percentage — Enable for a random X% of all organizations. DramWell uses a consistent hash so the same org always resolves to the same side.
  • Org List — Enable for explicitly named organizations only. Useful for beta programs.
  • User List — Enable for specific user IDs.

Partial rollout types can be combined (e.g., a beta list plus 5% of remaining orgs).

Adding an Override

From the flag detail panel, scroll to Overrides and click Add Override. Select the target type (Org or User), enter the ID, and set the override value (On or Off). Overrides are evaluated before the global flag state — if an org has an On override and the global flag is Off, that org sees the feature as enabled.

Archiving a Flag

Once a feature is fully launched and the flag is no longer needed, archive it. Go to the flag detail, click ..., and select Archive. Archived flags remain in the system for audit purposes but no longer appear in the active flags list. The codebase should be updated to remove the flag check in the same release cycle as archiving.

Tips

  • Every new feature should be gated by a flag from day one. Shipping without a flag means you cannot respond to an incident without a rollback deployment.
  • Use a consistent naming convention (vertical.feature_name) from the start — it becomes critical when you have 100+ flags and need to find the right one quickly.
  • Set a flag review cadence (monthly works well). Flags that have been On for 3+ months and are stable should be archived and the code cleaned up.

Related Articles

Was this article helpful?