Change Requests in Flagsmith

Change Requests in Flagsmith

Change Requests in Flagsmith

A complete, plain-English guide to the review-and-approve workflow for feature flag changes: what a change request is, who does what, how it works inside, how to schedule and govern changes, and how to keep teams fast and safe at the same time.

Picture a school where any pupil can walk into the headteacher’s office and rewrite tomorrow’s timetable. One morning, someone moves the maths exam to the middle of the lunch break, and nobody finds out until the hungry students arrive. Now picture a school where changes to the timetable are written on a slip of paper, shown to a second teacher, approved, and only then pinned to the notice board. The second school is slower by a few minutes, but it almost never has a lunch-break exam.

That slip of paper is the idea behind change requests in Flagsmith. Flagsmith lets software teams turn features on and off without shipping new code, using switches called feature flags. Because one switch can change what millions of people see, many teams want a second pair of eyes before an important switch moves. A change request is a proposal to change a flag, held back until the right people approve it.

In this guide you will learn what change requests are, why they matter, how a request moves from idea to live change, who may approve what, how scheduling works, how to avoid slowing teams down, and how real companies think about review and control. Everything is explained step by step, with everyday comparisons and examples.

i
Before you start

Flagsmith changes over time. Plan availability, button names, which kinds of changes can be reviewed, and details such as who may approve their own request can differ between versions and plans. Treat this guide as the mental model, and confirm fine details in the official Flagsmith documentation and in your own account.

1Why Changing a Flag Needs Care

Before we talk about approvals, we need to understand how much power one small switch can have.

A flag is a remote control

A feature flag is a small switch kept outside the program’s code. The program asks, “Is this switch on?” and behaves differently depending on the answer. Because the switch lives in Flagsmith and not in the code, anyone with the right access can flip it, and the change takes effect within moments, without a new release.

This is wonderful for speed. A broken feature can be turned off in seconds. A new feature can be shown to ten percent of visitors, then fifty, then everyone. But the same power is dangerous in the wrong hands or at the wrong moment. Flipping the wrong flag in the production environment can switch off payments, show unfinished screens or send customers to the wrong page.

Analogy

A flag is like the main switch in a building’s electrical panel. Flipping it is easy and instant. That is exactly why a building manager might insist that two people agree before anyone touches the switch that powers the hospital wing.

The cost of a bad change

Studies of outages at large technology companies repeatedly find that a large share of incidents follow some kind of change, whether a code release or a configuration edit. Flag changes are configuration edits, so they belong in that family. A flag change takes seconds to make and may take hours to understand, because afterwards nobody remembers who changed what and why.

Two ways to protect production

Teams usually protect important environments in two ways. The first is permissions: only trusted people may edit production. The second is review: even trusted people must have a colleague check their change before it goes live. Permissions answer the question “Who may touch this?” Review answers “Does a second person agree this is a good idea?” Change requests are Flagsmith’s tool for the second question.

Risk

Typing mistakes

A value of 1000 instead of 100 can change how a whole page behaves.

Risk

Wrong environment

A change meant for testing is made in production by accident.

Risk

Bad timing

A launch change is made in the middle of a busy sale or during another incident.

Risk

Missing context

Support and sales teams are surprised because nobody told them a feature was about to appear.

Risk

Single point of failure

One person’s judgement, tired or rushed, decides what customers see.

Risk

No paper trail

Auditors and managers cannot see who approved a risky change.

2What Is a Change Request?

The idea is simple. The details are where it gets interesting.

A plain definition

A change request in Flagsmith is a saved proposal to change one flag in one environment. Instead of the change going live at once, it waits. Other people can read it, discuss it and approve it. Once it has enough approvals, someone publishes it, and only then does the live flag change.

The parts of a change request

  • A title and description. A short name and a few sentences explaining what is changing and why.
  • The proposed change. For example, “turn on the new checkout” or “change the page size from 20 to 50”.
  • The requester. The person who asked for the change.
  • The approvers. The people, or groups of people, who are asked to review it.
  • A status. Where the request is in its life, such as waiting, approved or published.
  • An optional go-live time. A moment in the future when the change should take effect.
Analogy

If you write software, you will know the idea of a pull request, where a developer proposes code changes and colleagues review them before they join the main project. A change request is the same habit applied to flag settings instead of code.

What a change request is not

It is not a chat message and not a ticket in a separate tracking tool, although it is often linked to one. It is not a backup of your settings. It is not a way to schedule everything on your calendar. It is a gate placed in front of selected changes, with a record of who proposed, who approved and when the change went live.

A before-and-after picture

QuestionWithout change requestsWith change requests
Who can make a live change?Anyone with edit permissionOnly after the required approvals
When does it take effect?Immediately on savingWhen published, or at a chosen future time
Is a second person involved?Only if the team agrees to askBuilt into the process
Is there a record?The audit log shows the changeThe request shows the reason, the reviewers and the decision, plus the audit log
How fast is a change?SecondsMinutes to hours, depending on the reviewers
!
Remember

Change requests are switched on per environment. You can require them in production and leave development free, which is how most teams use them.

3Why Teams Use Change Requests

Different teams want review for different reasons. Here are the most common ones.

Use case 1: Protecting production

No surprises for customers

A shop turns on approvals for its production environment. Now any change to the payment flags must be seen by a second engineer. In the first month, a reviewer notices that a value was typed with an extra zero, and the mistake never reaches a customer.

Use case 2: Meeting audit and compliance rules

Proof that a second person approved

A company that handles money or health information must show auditors that important changes are reviewed. The change request record, with names and times, gives them what they need without extra paperwork.

Use case 3: Planned launches

Everything ready the night before

A marketing launch happens at nine in the morning on Monday. The team prepares the flag changes on Friday, gets them approved over the weekend and schedules them to go live at the exact moment. Nobody has to be awake at dawn to press a button.

Use case 4: Sharing knowledge

Reviewers learn what is coming

Support staff, sales teams and operations engineers who are asked to review learn about upcoming changes early. They can prepare answers, adjust staffing or raise concerns.

Use case 5: Training new teammates

Safe practice with a safety net

A new engineer can propose changes to production flags without fear. A senior colleague checks the proposal, explains anything unusual and approves it. The newcomer learns the team’s habits while the production environment stays protected.

Use case 6: Separating duties

One person proposes, another approves

In careful organisations, the person who makes a change must not be the only person who approves it. This idea is called separation of duties, and it is common in banks and public bodies. Change requests make it practical for flag settings.

Review does not slow a team down when it is small, clear and expected. It slows a team down when it is vague, surprising and everywhere.
i
Tip

Start with approvals only in the environment that really matters, normally production. Add them elsewhere only if a clear need appears.

4Where Change Requests Fit in Flagsmith

To understand where the approval gate sits, we need the layout of Flagsmith itself.

Organisations, projects and environments

Flagsmith organises everything in three layers. An organisation is usually a company or team. Inside it live projects, each normally a product. Inside each project are environments, such as Development, Staging and Production. Features, which are the named switches, are defined once per project. What each feature does, on or off and with which value, is stored separately in each environment.

flowchart TD
    ORG["Organisation"] --> PRJ["Project: Shopping App"]
    PRJ --> FEAT["Features and Segments"]
    PRJ --> DEV["Environment: Development"]
    PRJ --> STG["Environment: Staging"]
    PRJ --> PRD["Environment: Production"]
    DEV --> D1["Direct edits allowed"]
    STG --> S1["Direct edits allowed"]
    PRD --> P1["Approvals required"]
    P1 --> CR["Change Requests"]
Figure 1: Approvals are a setting of one environment, not of the whole project

A setting per environment

Change requests are controlled by an environment setting that says how many approvals a change needs. When the number is zero, or the feature is off, people edit flags directly as usual. When a number such as one or two is set, direct edits to the protected kinds of settings are replaced by the change request workflow. Because the setting is per environment, development stays quick while production stays guarded.

Analogy

A theatre lets anyone walk onto the rehearsal stage, but the main stage during a performance is guarded. The guard rule is attached to the room, not to the whole building.

Plans and availability

Change requests, sometimes called approvals or four-eyes review, have generally been offered on paid or higher plans of the hosted service, and in the enterprise offering for self-hosted installations. Exact plan names and limits change, so look at the pricing and plan pages or ask Flagsmith before building a process around the feature.

!
Check your plan

If you cannot find the approval setting in your environment settings, it may not be included in your plan. Do not assume that a missing option means you configured something wrong.

What the feature touches

At its heart, a change request deals with feature states: the on or off setting and the stored value of one feature in one environment. Depending on version and settings, it can also cover the rules that change a feature for particular groups of users, called segment overrides. Which actions are guarded in your version is worth checking once and writing down.

1
environment protected by the setting
2+
people involved: proposer and reviewer
0
live changes until approval and publish

5Core Components and the People Involved

A change request is a small system with a few moving parts. Let us meet each one.

The roles

Person

Requester

Writes the proposal. Needs permission to create change requests in the environment.

Person

Approver

Reviews the proposal and says yes. Needs permission to approve in that environment.

Person

Publisher

The person who presses the final button once the approvals are in. Often the requester.

Group

Approver group

A named team, such as “Payments reviewers”, that can be asked as a whole.

Person

Administrator

Controls the environment setting and the permission list. Rarely approves day-to-day changes.

Observer

Watcher

Someone who can read the request and its history but cannot decide.

The objects

  • The live feature state. What customers see right now.
  • The proposed feature state. What the requester wants it to become, stored beside the live one but not active.
  • The change request record. The title, description, requester, approvers, decisions and status.
  • The approval record. Who said yes, and when.
  • The audit log entry. The permanent note, written when the change finally goes live.

How the pieces connect

flowchart LR
    REQ["Requester"] --> CRQ["Change Request Record"]
    CRQ --> PROP["Proposed Feature State"]
    CRQ --> APP1["Approver 1"]
    CRQ --> APP2["Approver 2"]
    APP1 --> APR["Approval Records"]
    APP2 --> APR
    APR --> PUB["Publish"]
    PROP --> PUB
    PUB --> LIVE["Live Feature State"]
    PUB --> AUD["Audit Log Entry"]
Figure 2: A proposed state waits beside the live state until approvals and publish move it across
Analogy

Think of a newspaper. A reporter writes an article (the proposal). An editor reads it and signs off (the approval). Only then does the printing room put it into tomorrow’s paper (the live change). The article sitting on the editor’s desk is not in the paper until the editor says so.

Why the live and proposed states are kept apart

Keeping the two apart means that the apps reading flags never see half-reviewed changes. The apps keep reading the live state. The proposal is only a draft until it is published. This is the key safety property of the whole feature.

6The Life of a Change Request

Every request moves through stages. Knowing them tells you where to look when something seems stuck.

The stages

1

Drafted

The requester edits the flag and chooses to create a change request instead of saving directly. They add a title, a reason and the list of approvers.

2

Open and waiting

The request is visible in the list of open requests. Approvers are told that it needs their attention.

3

Reviewed

Approvers read the change, ask questions and either approve or leave it waiting. Some teams also discuss it in their usual chat tool.

4

Approved

The number of approvals reaches the required minimum. The request is now allowed to go live.

5

Published, now or later

Someone publishes it, or its scheduled time arrives. The live feature state is replaced by the proposed one.

6

Closed

The request moves out of the open list and into history. It stays there as a record.

stateDiagram-v2
    [*] --> Open: Request created
    Open --> Approved: Enough approvals
    Open --> Deleted: Requester withdraws
    Approved --> Published: Publish now
    Approved --> Scheduled: Go-live time chosen
    Scheduled --> Published: Time arrives
    Approved --> Open: Changes needed
    Published --> [*]
    Deleted --> [*]
Figure 3: The states a change request passes through

What can end a request early

A requester can withdraw a request that is no longer wanted. A request can also become out of date. For example, another change may have been published on the same flag in the meantime, so the proposal is now built on old information. In that case it is wise to close the old request and create a fresh one, rather than publish something that might undo newer work.

Time spent in each stage

In healthy teams most requests are reviewed within minutes during working hours. The longest delay is almost always the waiting stage, when nobody notices the request. Good teams therefore agree on how reviewers are alerted, and on how long a request may wait before somebody chases it.

i
Production habit

Engineering teams often track “time to first review” for code. The same simple number is useful for change requests. If the average climbs past an hour, people start finding ways around the process.

7How Change Requests Work Internally

Let us follow a request through the machinery, from the first click to the live change.

Step by step behind the scenes

1

The dashboard asks for a change request

Because the environment requires approvals, the save button in the dashboard turns into a request button. The edit is sent to the Flagsmith API as a proposal, not as a direct write.

2

Permissions are checked

Flagsmith confirms that you may create change requests in this environment.

3

The proposal is stored

The new flag settings are saved as a pending state attached to a change request record, leaving the live state untouched.

4

Approvers are told

Notifications, such as emails, go to the people or groups chosen, and the request appears in their lists.

5

Approvals are recorded

When an approver says yes, a record is added. Flagsmith checks the permission of the approver each time.

6

The request becomes publishable

Once the count of approvals is high enough, the publish action is unlocked.

7

Publishing swaps the states

The pending state becomes the live state in one all-or-nothing step, and the audit log records who requested, who approved and who published.

8

Read layers are refreshed

Caches and edge copies that answer SDK requests receive the new data, and apps see it within moments.

sequenceDiagram
    participant R as Requester
    participant D as Dashboard
    participant A as Flagsmith API
    participant S as Database
    participant V as Approver
    participant C as Read Cache
    participant P as Apps and SDKs
    R->>D: Edit flag and request approval
    D->>A: Create change request
    A->>S: Store proposal and request record
    A-->>V: Notify approver
    V->>A: Approve request
    A->>S: Store approval record
    R->>A: Publish approved request
    A->>S: Swap live state and write audit entry
    A->>C: Refresh cached flag data
    P->>C: Ask for flags
    C-->>P: Return updated flags
Figure 4: A change request from first edit to updated flags in apps

Why the swap is one step

The final swap is done as a single database transaction, which is a group of writes that either all succeed or all fail. Think of paying in a shop: either the money leaves your account and you receive the goods, or nothing happens. For flags, it means apps never see a half-applied change, such as a switch turned on but its value not yet updated.

The read path stays untouched

Applications that ask Flagsmith for flags are not involved in approvals at all. They keep reading the live state from fast read layers. Approval work happens on the management side, which handles a few actions per minute, not millions. This separation keeps flag reading quick even if reviewers are slow.

Analogy

A restaurant’s menu board is read by hundreds of diners all evening. Changing the menu goes through the head chef and the manager in the office. The diners never wait for office paperwork, and the board only changes when the new menu is fully approved and written out.

8Step by Step: Setting Up and Using Change Requests

This chapter walks through the usual path in the dashboard. Labels can vary a little between versions.

Part A: Switch on approvals for an environment

1

Open the environment settings

Sign in, choose the project and open the settings page of the environment you want to protect, usually Production.

2

Find the approvals option

Look for the setting about requiring change requests or a minimum number of approvals.

3

Choose the number of approvals

One approval is the common starting point. Two is used for sensitive systems. Higher numbers slow work and are rare.

4

Review permissions

Check who can create requests and who can approve. Remove broad rights that would defeat the purpose.

5

Tell the team

Explain the new process before it starts, so nobody is surprised by a changed save button.

Part B: Create a change request

1

Edit the flag as usual

Open the feature in the protected environment and change its setting or value.

2

Choose to create a change request

The usual save action offers a change request instead. Give it a clear title, such as “Enable fast checkout for Staff segment”.

3

Write the reason

Explain what is changing, why now, how to check that it worked, and how to undo it. Link to the ticket if you have one.

4

Pick approvers

Choose people or a group with the right knowledge. Do not pick someone just because they reply fast.

5

Optionally set a go-live time

If the change should happen later, choose the date and time.

Part C: Review and approve

  • Open the request from the list of open change requests.
  • Read the title and reason, then compare the proposed settings with the live ones.
  • Ask yourself: is this the right environment, the right value and the right moment?
  • Check whether another request on the same flag is already open.
  • Approve if you are satisfied, or write back with questions if not.

Part D: Publish and verify

  • When the count of approvals is reached, publish the request or let the schedule do it.
  • Open the live flag and check that it shows the new setting.
  • Watch your monitoring dashboards for a few minutes.
  • If something looks wrong, use your rollback plan, which may be another change request or an emergency path.
!
Do not approve blindly

An approval is a promise that you looked. Clicking approve after glancing at the title defeats the purpose. If you cannot review properly, say so and ask another person.

Doing it through automation

Flagsmith also exposes change request actions through its API, so pipelines and bots can create requests, for example when a release process wants to enable a flag after a successful deployment. The approval step itself still needs people. Automation should propose, and humans should approve.

9Scheduling Changes

Approval answers “should this happen?” Scheduling answers “when?” The two work well together.

Why schedule?

Some changes must happen at a precise time. A sale begins at midnight. A product is announced at a conference keynote. A regulation takes effect on the first day of the month. Scheduling lets you decide the moment in advance and have Flagsmith apply the approved change on time, without anyone logged in.

How it fits with approvals

A scheduled change goes through the usual review. After it is approved, instead of publishing at once, it waits for the chosen time. At that time, Flagsmith applies it just as if somebody had published it. The audit log notes that it was applied by the schedule.

Analogy

Scheduling a change is like programming a lighting cue for a play. The director approves the cue during rehearsal, and the lighting desk fires it at the right line during the show. Nobody needs to run onto the stage with a switch.

Things to think about

Time

Time zones

Write the time zone in the title or reason. “9:00 India time” is much safer than “9:00”.

Time

Daylight saving

Avoid the weekends when clocks change. A launch an hour early or late is easy to cause.

Order

Several changes together

If two flags must change in a certain order, schedule them in that order, and leave time between.

Staleness

Changes in between

If someone changes the flag directly or through another request before the schedule fires, the scheduled one may no longer make sense.

Support

Who is on call

Do not schedule risky changes for times when nobody can react.

Plan

Version and plan support

Scheduling features may depend on your plan or on versioning options in the environment. Check before relying on them.

A scheduled launch from start to end

Monday 09:00 launch

On Thursday, a product manager prepares three requests: enable the new homepage, raise the banner value and switch on an offer. Each carries a go-live time of Monday 09:00 and a note that says who to call if it misbehaves. Reviewers approve on Friday. Over the weekend, nothing happens. On Monday at nine, the changes are applied. The team watches the dashboards, and the audit log shows exactly who proposed and approved each one.

i
Practice

Pair every scheduled go-live with a scheduled “check” on your team calendar, so a real person looks at the result a few minutes later.

10What Is Covered and What Is Not

An approval gate is only useful if you know exactly what it guards. Gaps are where surprises hide.

Generally covered

  • Turning a feature on or off in the protected environment.
  • Changing the stored value of a feature in that environment.
  • Changes to settings for groups of users, in versions that include segment overrides in the workflow.

Things to check in your version

ActionQuestion to ask
Creating a brand-new featureFeatures live at project level. Is creating one gated, or only changing its state per environment?
Deleting a featureWho may delete, and does it need approval?
Segment definitionsSegments are project-wide. Does editing a segment trigger review?
Identity overridesDo per-person special cases go through the workflow?
Multivariate percentagesAre changes to the split guarded like other changes?
Environment settingsWho can turn off the approval setting itself?
API changes with admin keysDo automated callers follow the same rules?

The weakest link: who can switch it off

If anyone can turn off the approval setting, the approval gate is only as strong as that person’s discipline. Limit the right to change environment settings to a small group, and review who is in it from time to time.

Treat the gate as one layer

Analogy

A bank vault has a thick door, but also cameras, guards and a logbook. No single layer is trusted alone. In the same way, approvals sit beside permissions, audit logs, monitoring and good habits.

!
Test it once

After you turn on approvals, try to make a change in the protected environment in the ways your team normally would: through the dashboard, through the API with a normal key and through any automation. Write down which paths are guarded and which are not.

11Permissions and Roles Design

The approval count is only half of the story. Who is allowed to take part matters just as much.

The three kinds of rights

  • Update rights. Who may edit flag states at all.
  • Create change request rights. Who may propose changes to a protected environment.
  • Approve change request rights. Who may say yes.

Flagsmith lets administrators grant permissions at several levels: the organisation, the project and the environment. Permissions can be given to single users or to groups. Using groups is almost always better, because people join and leave teams.

A workable model for most companies

GroupDevelopmentStagingProduction
All engineersEdit freelyEdit freelyCreate change requests
Senior engineersEdit freelyEdit freelyCreate and approve
On-call engineersEdit freelyEdit freelyCreate and approve, plus emergency path
Product managersViewCreate change requestsCreate change requests
Support and salesViewViewView, may comment
AdministratorsSettings onlySettings onlySettings only, rarely approve

Avoiding rubber stamps

If the only person who can approve is the requester’s best friend at the next desk, the approval is a formality. Aim for approvers who have the knowledge to judge the change and enough distance to say no. For high-risk flags, include someone from the team that owns the affected system.

Approving your own request

Whether a person may approve a change they proposed themselves depends on settings and versions. For separation of duties it should not be allowed, or at least it should not count toward the minimum. Check how your version behaves and write the rule in your process document.

Group by responsibility, not by name

Create groups that describe a duty, such as “Checkout reviewers” or “Production approvers”, and put people in them. When someone leaves or changes teams, you update one group instead of dozens of individual settings.

Healthy permission design

  • Groups mapped to duties.
  • Few people able to change environment settings.
  • Approvers with real knowledge.
  • Regular reviews of who is in each group.

Unhealthy permission design

  • Everyone is an administrator.
  • One person approves everything.
  • Old employees still listed as approvers.
  • Shared accounts that hide who did what.

12Security and Compliance

Change requests are often chosen because of rules, not just habits. Here is how they support security and compliance work.

Separation of duties

Many security standards want two different people involved in important changes: one who makes it and one who approves it. Change requests give a built-in way to do this for flag settings, and the record shows both names.

Traceability

Auditors like to ask, “Show me how this change was approved.” A change request holds the requester’s reason, the approvers and the time. The audit log adds the moment the change went live. Together, they answer the question without anyone searching old chat messages.

Least privilege

The idea of least privilege says that people should have only the access they need. In flag terms: engineers who occasionally propose a change get the right to create requests, not to edit production directly.

Protect the approval path itself

  • Use your company’s sign-in system, with multi-step verification, for the Flagsmith dashboard.
  • Protect API keys that can act on production, keep them in a secrets manager and rotate them.
  • Review the list of people who can change environment settings.
  • Log and watch for changes to approval settings.

Privacy

Change request text is stored and visible to reviewers. Do not paste customer data, passwords or private keys into titles, reasons or values. Use ticket numbers and general descriptions instead.

!
Not a security system by itself

Approvals reduce mistakes and misuse. They do not replace sign-in security, key protection, network controls or monitoring. Think of them as one lock among several.

A mapping to common requirements

Typical requirementHow change requests help
Two people for sensitive changesMinimum approvals set to at least one besides the requester
Evidence of reviewRequest record with names, reason and time
Planned maintenance windowsScheduled go-live times
Limits on who can change productionGroup-based permissions per environment
History of changesAudit log plus closed requests
i
Talk to your compliance team

Rules differ by country and industry. Show your compliance or audit team the actual workflow early, and let them tell you what evidence they need.

13Notifications, Audit Log and Monitoring

A request that nobody notices is as bad as no request at all. Visibility is what makes the process work.

Telling approvers

Flagsmith can notify approvers, for example by email, when a request needs their attention. Teams usually add a second route: a message in their chat tool, sent through an integration or webhook. A webhook is an automatic message sent to a web address whenever a chosen event happens. Check which events your version can send and which integrations are available, then connect them to the place where reviewers already spend their day.

Analogy

A doorbell that makes no sound is useless. A review process needs a bell that actually rings where the reviewer is sitting.

The audit log

The audit log is Flagsmith’s record of changes. When a change request is published, the log records the flag change and the people involved. Each environment has its own trail. When something strange happens in production, the audit log is the first place to look: it shows what changed, when and by whom.

Putting changes on the same timeline as everything else

Site reliability engineers, a practice popularised by Google, like to line up every change on one timeline: deployments, configuration changes, flag changes and incidents. When error graphs spike, the first question is “What changed just before?” If flag changes are posted to the same dashboard, the answer arrives in seconds. Integrations with monitoring tools can help here.

Useful measures

Metric

Time to first review

How long a new request waits before somebody looks at it.

Metric

Time to publish

How long from creation to going live.

Metric

Open request count

How many requests are waiting. A growing number means a bottleneck.

Metric

Old requests

Requests open for weeks, usually forgotten and risky to publish.

Metric

Changes after publish

How often a change is quickly reversed. Frequent reversals point to weak reviews.

Metric

Bypass events

How often the emergency path is used. It should be rare.

A short list of questions the records can answer

  • Who proposed the change that turned on the beta page?
  • Who approved it, and what did they see?
  • When exactly did it reach customers?
  • Was a scheduled change applied on time?
  • Which requests are still open and for how long?

14Segments, Experiments and Moving Changes Across Environments

Flags are not always a simple yes or no. Real rollouts use groups, percentages and several environments.

Segments in a request

A segment is a named group of users defined by rules, such as “Beta Testers” or “India Premium”. A segment override changes a feature for that group in one environment. A staged rollout often means a series of requests: first enable for staff, then for beta testers, then for ten percent of everyone. Each step is a separate proposal with its own reviewer and its own pause for watching.

Three small steps instead of one big one

A team plans a new search page. Request one enables it for the Staff segment. Request two adds the Loyal Customers segment two days later. Request three sets a fifty percent split a week after that. Reviewers can approve each small step quickly, because each change is easy to understand and easy to undo.

Percentage splits and experiments

In experiments, a flag may hold several values with a percentage split, for example 50 percent blue, 30 percent green and 20 percent orange. A request that changes those percentages affects who sees what. Reviewers should check that the numbers add up and that the change will not disturb an experiment already running.

The same change in many environments

Teams often move a change through Development, Staging and Production. Change requests belong to one environment, so the same change needs a request in each protected environment. This is by design: each environment has its own risks. To reduce repeated typing, copy the title and reason, and refer to the earlier request, such as “Same as the staging request from last Tuesday”.

flowchart LR
    DEV["Development: edit directly"] --> STG["Staging: edit or one approval"]
    STG --> PRD["Production: change request with approvals"]
    PRD --> WATCH["Watch dashboards"]
    WATCH --> OK["Keep the change"]
    WATCH --> BACK["Reverse with a new request or emergency path"]
Figure 5: A common path for a change through three environments

Related actions

If a project was set up by cloning an existing environment, note that the approval settings may or may not come along with the clone. After cloning a production-like environment, open its settings and check the approval rule, so the new space is guarded in the way you intend.

i
Tip

Promoting a change from staging to production is usually a matter of repeating a small, proven change, not copying a whole environment. Small requests are easy to review.

15Conflicts and Stale Requests

When many people work on the same flag, their proposals can collide. Understanding how helps you avoid nasty surprises.

The classic collision

Two people open requests on the same flag on the same day. The first sets the value to 50. The second, who did not know about the first, sets the enabled switch to on, but their proposal also carries the old value of 20. When both are published in turn, the second one may quietly put the value back to 20.

Analogy

Two colleagues edit the same document from two copies. Each makes sensible changes, but when the second copy is saved over the first, the first person’s changes vanish. Version control tools exist to catch exactly this problem.

How to avoid it

  • Before creating a request, check the list of open requests for the same flag.
  • Name requests clearly, including the flag name, so duplicates are easy to spot.
  • Keep requests small and focused: one purpose per request.
  • Close old requests that are no longer needed.
  • When a request is old, create a fresh one instead of publishing the old one.

What reviewers should check

When reviewing, look at the proposal against the current live state, not against your memory. Ask whether anything has changed on this flag since the request was created. If the answer is yes, ask the requester to refresh the proposal.

Ordering several requests

SituationSafer approach
Two changes touch different flagsPublish in any order, but agree on a plan
Two changes touch the same flagCombine into one request, or publish one and re-check the other
One change depends on anotherPublish in order and wait between steps
A scheduled change and a direct emergency changeAfter the emergency, review all scheduled requests on that flag
!
Old requests are risky

A request that sat open for a month was checked against a world that no longer exists. Treat very old requests like old milk: smell carefully, and usually throw away.

16Performance, Scalability and High Availability

Products serving millions of users need flag systems that stay fast and stay up. Here is how approvals fit into that picture.

Two kinds of traffic

Flagsmith handles flag reading, which is constant and heavy, and management actions, which are occasional. Approval actions belong to the second kind. A busy team might create a few dozen change requests a day, while the apps they serve might read flags millions of times a minute. Good design keeps the two paths separate, so approvals never slow readers.

Millions
flag reads per minute in big products
Dozens
change requests per day in a busy team
Seconds
for a published change to reach apps

Caching and edge copies

Because flags are read far more often than changed, Flagsmith relies on caching, which means keeping ready copies of answers near the place they are needed. The managed service serves reads from a fast layer close to apps. When a request is published, the fresh data is pushed to that layer. Self-hosted installations can add their own caches. SDKs keep results in memory for a short time too. The result is that a published change appears quickly, usually within seconds, though caches can add a short delay.

What a delay means for planning

Do not promise to the second that a scheduled change will reach every user. Plan for a small window, and avoid designs where two flags must change at exactly the same instant. If the order matters, make the app tolerate either order.

What happens if Flagsmith is down

Imagine the flag service has a bad day. Apps should still work. Good teams prepare in three layers. First, SDKs are given default values in code, so features fall back to a safe behaviour. Second, SDKs can keep a recent copy of flags. Third, the service itself can be run with extra copies and a standby database. During such an outage, you will not be able to create or publish change requests, so keep a plan for emergencies that does not rely on a working dashboard.

i
Pick safe defaults

For each flag, decide what the app should do if the flag cannot be read. For risky new features, “off” is usually safest. For a safety switch, think carefully about which direction protects customers.

Scaling the process, not just the software

Software scales more easily than people. If a hundred engineers send requests to three reviewers, the reviewers become the bottleneck. Scale the process by adding approver groups per area, by training more reviewers, by splitting large projects into smaller ones and by reserving requests for changes that really need review.

17Deployment and Cloud: Hosted and Self-Hosted

Where Flagsmith runs changes a few practical details about change requests.

The hosted service

In the hosted service, Flagsmith runs everything. Updates arrive automatically, performance is managed, and the approvals feature depends on your plan. Notifications and integrations are mostly ready to use.

Self-hosting

Because Flagsmith is open source, a team can run it on its own servers or in its own cloud account, using containers or tools such as Kubernetes. Some advanced features, which may include approvals, can depend on an enterprise licence. Check what your self-hosted edition includes.

flowchart LR
    USERS["Engineers and Reviewers"] --> SSO["Company Sign-in"]
    SSO --> LB["Load Balancer"]
    LB --> API1["Flagsmith API Copy 1"]
    LB --> API2["Flagsmith API Copy 2"]
    API1 --> DB[("Primary Database")]
    API2 --> DB
    DB --> STBY[("Standby Database")]
    API1 --> MAIL["Email or Chat Notifications"]
    API2 --> MAIL
    API1 --> WORK["Background Workers for Schedules"]
    APPS["Applications using SDKs"] --> LB
Figure 6: A typical self-hosted layout where background workers apply scheduled changes

Things to watch when self-hosting

  • Background workers. Scheduled changes need workers that are running and healthy. A stopped worker means a late change.
  • Clock accuracy. Servers must agree on the time. A badly set clock makes schedules fire at the wrong moment.
  • Email delivery. If notification emails fail, approvers will not notice requests. Test it.
  • Backups. Requests, approvals and audit entries live in the database. Back it up and practise restoring.
  • Upgrades. After upgrading, create one test request and publish it to confirm the flow still works.
Analogy

The hosted service is like eating in a restaurant. Self-hosting is cooking at home. In both cases you get dinner, but at home you are the one who must check that the oven is on at the right time.

Cost thinking

The software cost of change requests is mainly the plan tier. The larger cost is people’s time. Measure how long reviews take, and tune the process so that review effort goes where the risk is highest.

18Advantages, Disadvantages and Trade-offs

Every control has a price. Change requests are valuable, but they are not free.

Advantages

  • A second pair of eyes catches typing and logic mistakes.
  • Clear record of who proposed and who approved.
  • Supports separation of duties and audit needs.
  • Scheduling allows precise, hands-free launches.
  • Shares knowledge between teams.
  • Reduces fear of making changes in production.

Disadvantages

  • Adds delay to every guarded change.
  • Reviewers can become a bottleneck.
  • Approvals can turn into rubber stamps.
  • Stale and conflicting requests need care.
  • May need a paid plan.
  • Emergencies need a separate, well-controlled path.

The trade-off between speed and safety

Every extra approval slows the change a little and protects it a little more. The aim is to place friction where it pays for itself. A typo fix in a development flag deserves no review. A change to a payment flag in production deserves at least one.

The trade-off between many small requests and few big ones

StyleStrengthWeakness
Many small requestsEasy to read, easy to undo, fast reviewMore notifications and paperwork
Few large requestsLess paperworkHard to review properly, risky to undo
One request per launch stepMatches the rollout planNeeds planning discipline

The trade-off between one approval and two

One approval gives most of the benefit at a modest cost. A second approval adds more delay and is worthwhile for the most sensitive systems, such as payments, safety or legal compliance. Beyond two, approvals tend to create a situation where each reviewer assumes the others will look carefully, so nobody does.

Safety comes from attention, not from the number of signatures.

19Design Patterns and Anti-Patterns

Patterns are habits that other teams have already tested. Anti-patterns are habits that looked clever and then caused pain.

Pattern 1: Guard only what matters

Turn approvals on for production and for any environment that mirrors real customers. Leave development free. This keeps experiments quick and protects what matters.

Pattern 2: The reviewer rota

Create a rota so that on every working day, a few named people are expected to review requests promptly. A rota removes the “someone else will do it” problem.

Pattern 3: Small steps with pauses

Break big launches into small requests with built-in pauses to watch dashboards. Each step is easy to review and easy to undo.

Pattern 4: Template descriptions

Agree on a short template for the request text: what is changing, why, how to check, how to undo, who to call. Templates raise the quality of requests and speed up reviews.

Pattern 5: Scheduled launch with a watcher

For scheduled changes, assign a person to watch the dashboards at go-live time and have a tested undo plan.

ANTI-PATTERN 01 Avoid
What it looks like

A reviewer approves every request within seconds of it appearing, without opening it.

Why it hurts

The record says “reviewed”, but nobody really looked. The company believes it is protected when it is not.

Better approach

Ask reviewers to write one line about what they checked. Sample approvals from time to time and discuss them without blame.

ANTI-PATTERN 02 Avoid
What it looks like

Approvals are turned on in every environment, including development and personal sandboxes.

Why it hurts

Developers wait for approvals to change a value they are only testing. They start using other tools, or turn the setting off.

Better approach

Protect only the environments where a mistake has real cost.

ANTI-PATTERN 03 Avoid
What it looks like

One senior person is the only approver for the whole company.

Why it hurts

When that person is on holiday, work stops. When they are busy, they approve quickly without looking.

Better approach

Build groups of approvers by area, with backups.

ANTI-PATTERN 04 Avoid
What it looks like

People turn off the approval setting “just for a moment” to make a quick change, and forget to turn it on again.

Why it hurts

The gate is silently open for days. Nobody notices until an incident.

Better approach

Limit who can change the setting, monitor changes to it, and use a proper emergency path instead.

ANTI-PATTERN 05 Avoid
What it looks like

Requests are left open for weeks and then published together at the end of a quarter.

Why it hurts

Reviewers approved a world that no longer exists. Conflicts and surprises are likely.

Better approach

Publish soon after approval, or close and recreate.

20Best Practices and Common Mistakes

These are the habits experienced teams build, and the slips beginners make most often.

Best practices

1

Write titles that say what and where

“Enable fast_checkout for Staff in Production” beats “Update flag”.

2

Give the reason and the undo plan

Reviewers can judge risk only when they know how to reverse the change.

3

Keep requests small

One purpose per request makes reviews real.

4

Pick approvers with knowledge

Someone who understands the system, not only someone who is nearby.

5

Agree on response times

For example, first look within one working hour.

6

Check the live state again before publishing

Make sure nothing has changed since approval.

7

Watch after publishing

Stay with the dashboards for a few minutes.

8

Review the process every quarter

Look at the numbers: waiting time, old requests, bypass use. Adjust.

Common mistakes

Mistake

Vague descriptions

Reviewers cannot judge what they cannot understand.

Mistake

Wrong environment

A request for staging approved, then repeated in production by copy-paste without checking.

Mistake

No one notified

Requests sit unseen because notifications go to an unused mailbox.

Mistake

Unclear time zones

A scheduled launch fires hours earlier or later than planned.

Mistake

Approval by habit

Clicking approve without looking at the proposed values.

Mistake

Forgotten clean-up

Old open requests clutter the list and hide the important ones.

Troubleshooting guide

SymptomLikely causeWhat to do
No change request option appearsSetting not enabled, or not included in your planCheck the environment settings and your plan
Cannot approve a requestMissing approval permission, or approving your own request is not allowedAsk an administrator, or ask another reviewer
Publish button is disabledNot enough approvals yetCheck the required number and who has approved
Scheduled change did not happenNot approved in time, or a scheduling worker issueCheck the request status and, if self-hosted, the workers
Published value is not what you expectedConflicting or stale requestCheck the audit log and recent requests on the same flag
Nobody saw the requestNotifications not configuredFix email and chat routes, and add a rota
Approvals are bypassedSetting turned off, or a path outside the workflowReview who can change settings and test each path

21Emergencies, Kill Switches and Failure Scenarios

Approvals are wonderful until the house is on fire. Every good process needs a plan for urgent changes.

The emergency problem

It is two in the morning. A new feature is crashing checkout. The fix is to switch one flag off, which takes a second, but the environment requires an approval and the only other approver is asleep. What now? A rigid process that blocks the fix is as dangerous as no process at all.

Plan the emergency path before you need it

  • Kill switches. Create special flags whose only job is to turn a risky feature off. Give on-call engineers both the right to create and the right to approve changes for them.
  • On-call approvers. Make sure a second approver is always reachable during on-call shifts, with a way to be paged.
  • Break-glass access. A small, tightly watched group can bypass or temporarily relax the rule. Every use is recorded and reviewed afterwards.
  • Review after the event. Whoever used the emergency path writes a short note the next working day explaining what and why.
Analogy

A building’s fire alarm glass says “Break in case of emergency”. Anyone may break it, but doing so rings alarms, is logged and is investigated. Break-glass access for flags should feel the same.

flowchart TD
    I["Incident detected"] --> Q1{"Can a kill switch fix it?"}
    Q1 -- "Yes" --> K["On-call creates and approves a kill switch request"]
    Q1 -- "No" --> Q2{"Is a second approver reachable?"}
    Q2 -- "Yes" --> N["Normal request with fast review"]
    Q2 -- "No" --> B["Use break-glass path and record it"]
    K --> V["Verify on dashboards"]
    N --> V
    B --> V
    V --> R["Write a short review the next day"]
Figure 7: A simple decision path for urgent flag changes

Other things that can go wrong

Failure

Publish fails halfway

Because the swap is one unit, you should see either the old or the new state, not a mixture. Check the live flag and the audit log, then retry or report it.

Failure

Notification emails not sent

Requests sit unseen. Test email and chat routes regularly.

Failure

Scheduled change misses its time

Check the status, check workers if self-hosted, then publish by hand and note the delay.

Failure

Approver leaves the company

Requests assigned to them stall. Use groups, and remove departed staff promptly.

Failure

Dashboard unreachable

Keep a documented backup way to act, such as an approved API route with protected credentials.

Failure

Wrong change published

Reverse it with a new request or the emergency path, and write down how the review missed it.

!
Practise the emergency path

Run a short drill every few months. Pretend a flag must be turned off urgently, and see how long it takes. A path that has never been tried often fails when needed.

22Governance and Team Workflows

As more teams use Flagsmith, habits matter as much as settings. This chapter covers the human side.

Who owns a flag?

Every flag should have an owner: a person or a team who answers questions about it and decides when it is removed. Tags in Flagsmith can show ownership, such as “team-payments”. Reviewers should know which team to ask when a request touches a flag they do not own.

A simple request template

FieldWhat to write
WhatThe flag, the environment and the new setting
WhyThe reason and a link to the ticket
WhenNow, or the exact time with time zone
RiskWhat could go wrong, and how many users it touches
CheckHow to confirm it worked
UndoHow to reverse it
ContactWho is watching, and how to reach them

Response expectations

Agree a reasonable target. For example: normal requests get a first look within one working hour, urgent requests within fifteen minutes during on-call time. Write the target where people will see it, and watch whether it is met.

Different rules for different risks

Not all flags carry the same risk. Many companies classify flags into levels. Low-risk flags, such as a colour or a label, may need no approval in production. Medium-risk flags need one. High-risk flags, such as payment or privacy settings, need two or a named expert. Flagsmith’s approvals are set per environment, not per flag, so teams often handle risk levels through process, tags and reviewer choice.

Onboarding

New teammates should learn four things in their first week: which environments are protected, how to write a good request, how to review one, and what the emergency path is. A one-page guide with screenshots from your own project, in plain words, is worth more than a long manual.

Retrospectives

Learning from the numbers

Once a quarter, a team lead pulls the list of requests and looks at three things: the longest waits, the changes that were reversed soon after publishing and the times the emergency path was used. They discuss each openly, without blame, and adjust the process or the training.

Tools make review possible. Habits make review real.

23A Complete Walkthrough: Launching a New Offer

Let us follow a made-up online shop, “Acme Cart”, through a full launch to see how all the ideas fit together.

The situation

Acme Cart sells home goods to about two million monthly shoppers. It uses Flagsmith with one project and three environments: Development, Staging and Production. Production requires one approval, and two for payment flags. The team plans a festival offer called “festival_offer” that must go live at 08:00 India time on a Saturday.

Stage 1: Plan

Marketing, engineering and support agree on the plan. There will be three requests in Production: enable the offer for staff first, then for loyal customers, then for everyone at the scheduled time. A kill switch, “festival_offer_kill”, already exists and is known to all on-call engineers.

Stage 2: Build and test

Developers create the new flags, which appear in every environment, switched off. In Development, they switch the offer on and test freely. In Staging, one reviewer checks the offer pages.

Stage 3: Write the requests

On Thursday, a product manager writes three requests in Production using the team’s template. Each says what, why, when, risk, check, undo and contact. They pick the “Checkout reviewers” group as approvers.

flowchart LR
    A["Plan the launch"] --> B["Test in Development and Staging"]
    B --> C["Write three change requests"]
    C --> D["Reviewers check and approve"]
    D --> E["Staff step published"]
    E --> F["Loyal customers step published"]
    F --> G["Everyone step scheduled for 08:00 Saturday"]
    G --> H["Watcher monitors dashboards"]
    H --> I["Close requests and note lessons"]
Figure 8: The Acme Cart launch from plan to review

Stage 4: Review

A senior engineer opens the first request and compares the proposed settings with the live ones. She notices that the banner value in the second request still uses last year’s text. She writes a comment, the product manager corrects it, and she approves. A second reviewer approves the payment-related flag after checking that the discount is capped. The third request is approved on Friday.

Stage 5: Publish in steps

On Friday afternoon, the staff step is published. Staff test the offer in the real shop and report two typing errors in the text, which are fixed with a tiny request. On Friday evening, the loyal customers step is published. A watcher checks the error rate and checkout success graphs for twenty minutes.

Stage 6: The scheduled step

At 08:00 on Saturday, the scheduled change is applied. The watcher on duty sees the spike in traffic and a small, expected rise in checkout time. Nothing breaks. The audit log shows each person and each time.

Stage 7: Learn and clean up

The team writes down what went well and what did not. Two weeks after the offer ends, they remove the old code and delete the flag. The kill switch stays in place for the next offer.

Worked well

  • A reviewer found outdated text before customers did.
  • The staged steps made each change easy to review.
  • The scheduled step needed no one awake at dawn.
  • The record answered every later question.

Could be better

  • The first request waited three hours for a reviewer.
  • One reviewer was out of office and no backup was set.
  • The time zone was missing from one title.
DECISION RECORD 01 Accepted
Context

Acme Cart wants launches that are safe, traceable and do not need late-night work.

Decision

Require one approval in Production, two for payment flags. Break large launches into small requests, schedule the final step, and assign a named watcher.

Consequences

Launch preparation takes more planning, but incidents during launches fall sharply. Reviewer response times must be watched, and backups named for every group.

24Writing Excellent Change Requests

The quality of a review depends on the quality of the request. A clear request can be approved in two minutes. A vague one can waste an hour of everyone’s time.

What reviewers really need

Reviewers are usually busy people looking at many things. They need to answer four questions quickly: What is changing? Why? What is the risk? How do we undo it? If your request answers those four questions in plain words, you are already ahead of most teams.

A weak request and a strong request

PartWeak versionStrong version
TitleUpdate flagEnable fast_checkout for Staff segment in Production
ReasonAs discussedFirst step of the checkout rollout planned in the launch ticket. Staff will test the new page for two days.
RiskNoneOnly staff accounts are affected, about 300 people. Payment code is unchanged.
CheckNot mentionedStaff open the shop and see the new layout. Error rate on the checkout graph stays flat.
UndoNot mentionedDisable the same flag for the Staff segment. Takes under one minute.
TimingSoonPublish on Thursday at 11:00 India time, when the on-call engineer is at their desk.

Habits of good requesters

  • Be specific. Name the flag, the environment and the exact new value.
  • Be short. Five clear lines beat a page of rambling.
  • Link to context. Point to the ticket, the plan or the design document, but also summarise the key point, since reviewers may not click.
  • Admit uncertainty. If you are not sure about something, say so. Reviewers can help only with what they know about.
  • Give a time and a time zone. Even for “now”, say when you plan to publish.
  • Say who is watching. Name the person who will check the dashboards afterwards.
Analogy

A good request is like a clear luggage label. The person at the airport has a few seconds to read it and must know exactly where the bag is going. A label that says “somewhere sunny” gets the bag lost.

Habits of good reviewers

  • Open the request, not just the notification.
  • Compare against the live state.
  • Write back with specific questions, not “looks odd”.
  • Say what you checked when you approve, even in one line.
  • Say no politely when something is unsafe, and offer a better path.

Examples of good comments

A useful question

“The new value is 500, but the staging request used 50. Is the extra zero intended?” This kind of question has saved many teams from expensive typos.

A useful approval note

“Checked that only the Staff segment is touched and that the undo path works. Approved for Thursday 11:00.” This tells future readers exactly what the reviewer looked at.

A useful refusal

“Please wait until after the sale on Friday. Our payments team is on reduced cover until then. Could we move this to Monday morning?” A refusal that proposes a solution keeps work moving.

i
Tip

Keep a short template in your team wiki. Copying a template makes it far easier to write a complete request, and reviewers learn where to look for each fact.

25Change Requests Compared With Other Controls

Approvals are one of several ways to keep flag changes safe. Understanding the others helps you choose a sensible mix.

Option 1: Permissions only

You decide who may edit production and trust them. This is simple and fast. It works well in small teams where everybody knows everybody. It fails when a trusted person is tired, new or simply mistaken, because nothing else catches the error.

Option 2: Change requests

A second person reviews each guarded change, and the record is kept. This adds a few minutes to a change and removes many mistakes. It also provides evidence for audits.

Option 3: Settings kept in files and reviewed like code

Some teams keep their desired flag settings in files stored in a code repository, and apply them with a script. Every change is then a code change, reviewed in the team’s usual code review tool. This gives strong history and review, and fits teams who like working this way. It needs more effort to build, and changes made directly in the dashboard may fall out of step with the files.

Option 4: Formal change boards

Larger organisations may have a change advisory board that meets on a schedule to approve planned changes. This offers wide visibility but is slow, so it suits large, rare changes more than daily flag edits. Many companies now accept a lighter approval for flag changes, under the board’s general policy.

Option 5: Automation and guardrails

Monitoring tools can watch key numbers and automatically turn a feature off if errors rise. This does not replace review, but it adds a second line of defence after a change goes live.

ControlCatches mistakes before they go live?SpeedRecord of approval
Permissions onlyNoVery fastAudit log only
Change requestsYes, by a humanFastRequest plus audit log
Settings in files with code reviewYes, by a humanMediumRepository history
Formal change boardYes, by a groupSlowMeeting records
Automatic guardrailsNo, catches afterwardsInstantMonitoring logs
Analogy

Driving safely uses several layers: a driving licence, a seatbelt, road rules, airbags and a good mechanic. No single layer is perfect. Together they make accidents rarer and less serious.

A sensible mix

Many teams combine permissions, change requests in production, automatic guardrails on key metrics and a short written process. That mix keeps normal changes fast, makes risky ones safe and gives a clean record.

26Rehearsing and Testing the Workflow

A process that has never been tried will surprise you at the worst moment. Rehearsal turns surprises into small, safe lessons.

Test the setup in a quiet environment

Before you rely on approvals in production, try them in a staging environment. Turn on the setting, create a request, approve it as a second user and publish. Look at the audit log. Try a scheduled change. This costs an hour and tells you exactly how your version behaves.

1

Create a harmless test flag

Make a flag with no effect on any real feature, named so everyone knows it is a test.

2

Turn on approvals in staging

Set the number of approvals to one and confirm that direct editing is replaced by the request workflow.

3

Run the happy path

Create a request, approve it with a different account and publish it. Check the audit log and the live flag.

4

Run the awkward paths

Try approving your own request, publishing without enough approvals, deleting a request and creating two requests on one flag.

5

Test scheduling

Schedule a change a few minutes ahead and confirm that it fires on time.

6

Test notifications

Confirm that approvers receive the messages where they will actually see them.

7

Write down what you learned

Turn the results into a short guide for the team.

Test the emergency path

Pretend that a flag must be turned off urgently. Time how long it takes from the first alert to the live change. If it takes longer than the team is comfortable with, simplify the path: add approvers on call, pre-build kill switches or write clearer instructions.

Run a game day

A game day is a planned practice where a team pretends that something has gone wrong and works through the response. For flags, a game day might cover a bad flag change in production, a missed schedule or an approver who cannot be reached. The point is to learn about weak spots in a relaxed setting.

!
Keep tests away from customers

Use staging or a clearly named test environment, harmless flags and fake users. Never rehearse by changing real production flags.

Retest after changes

After upgrading Flagsmith, changing plans, adding integrations or changing permissions, run the short happy-path test again. It takes minutes and catches surprises early.

27Scaling Across Teams and Automating Around the Workflow

What works for ten people may not work for two hundred. This chapter looks at growth and at the helpful automation that grows around change requests.

Many teams, many projects

Large companies usually give each product or major system its own Flagsmith project, with its own environments, permissions and approver groups. This keeps teams from reviewing things they know nothing about, and prevents one team’s rules from slowing another.

One project per product

  • Reviewers know the product well.
  • Simple permissions.
  • Fewer collisions between teams.

Costs to expect

  • Shared standards must be written down and kept in step.
  • Cross-product launches need coordination.
  • More places to audit.

Approver groups that match ownership

Instead of one big list of reviewers, create groups that match who owns which areas: checkout, search, accounts, payments. Each group has several members so that holidays and illness do not stall work. Keep group membership in line with your company’s team lists.

Chat-based workflows

Teams often connect Flagsmith to their chat tool so that new requests appear in a channel, and reviewers can discuss them in the thread. Check which integrations your version offers. The goal is to bring the request to where people already are, not to build a second inbox.

Linking requests to tickets

Include the ticket number in the title or reason, so anyone can jump from the request to the plan and back. Some teams add rules in their ticketing tool that require a linked request before a ticket can be closed.

Bots that propose, humans that approve

A release pipeline can create a change request automatically after a successful deployment, for example to enable a flag for staff. The pipeline writes the description from the release notes. A human then reviews and approves. This keeps the speed of automation and the judgement of people.

flowchart LR
    CODE["Code merged and deployed"] --> BOT["Release pipeline"]
    BOT --> CRQ["Creates change request in Flagsmith"]
    CRQ --> CHAT["Posts to team chat channel"]
    CHAT --> REV["Reviewer opens and checks the request"]
    REV --> APR["Approves"]
    APR --> PUB["Publish or schedule"]
    PUB --> MON["Monitoring watches key numbers"]
    MON --> BOT
Figure 9: Automation proposes, people approve, monitoring watches

Measuring and improving

As you grow, keep an eye on three numbers: how long requests wait, how many are open and how often the emergency path is used. If waits grow, add reviewers or split projects. If emergency use grows, simplify the normal path. If open requests pile up, run a clean-up.

Culture beats configuration

The best setting in the world will not help if people see review as a chore to dodge. Teams where reviewers are thanked, where requests are short and clear, and where mistakes are discussed without blame tend to keep the process healthy for years.

A good process feels like a helpful colleague, not like a locked door.

28Data Flow: From an Idea to a Change Seen by Customers

Let us follow one flag change all the way from a thought in someone’s head to a different screen in a customer’s hand. Seeing the whole path helps you find where delays and mistakes can appear.

The full journey

flowchart TD
    IDEA["Idea or ticket"] --> DRAFT["Requester drafts the change"]
    DRAFT --> REQ["Change request stored as proposal"]
    REQ --> NOTE["Approvers notified by email or chat"]
    NOTE --> REVIEW["Review and questions"]
    REVIEW --> APPROVE["Approvals recorded"]
    APPROVE --> WAIT{"Scheduled?"}
    WAIT -- "No" --> PUBNOW["Publish now"]
    WAIT -- "Yes" --> HOLD["Hold until go-live time"]
    HOLD --> PUBNOW
    PUBNOW --> SWAP["Live state replaced in one step"]
    SWAP --> LOG["Audit log written"]
    SWAP --> REFRESH["Read caches refreshed"]
    REFRESH --> SDK["SDKs fetch new flags"]
    SDK --> USER["Customer sees new behaviour"]
Figure 10: The path of a flag change through the approval workflow to the customer

Where time is spent

StageTypical timeWhat makes it slower
DraftingMinutesMissing information about the plan
Waiting for a reviewerMinutes to hoursNo notification, no rota, reviewers away
ReviewMinutesVague descriptions, large requests
Holding for a scheduleAs chosenNot applicable, it is deliberate
PublishingSecondsRarely a problem
Reaching customersSeconds to a minuteCaches, SDK refresh intervals, app restarts

The last mile: how apps pick up changes

After a change is published, apps do not always notice at the same moment. Some apps ask Flagsmith for flags every time a page opens. Others keep a copy for a few minutes. Server programs using local evaluation download the whole environment and refresh it on a timer. Mobile apps may hold flags until they restart. This means that a change is not one instant but a short spread of moments.

Analogy

When a city changes a speed limit sign, the new limit is law at the moment the sign goes up. But drivers notice at different times, depending on which road they are on. A published flag change works a bit like that: the setting changes at once, and people meet it as they come to it.

What this means for planning

  • Allow a few minutes of settling time before judging a change by the numbers.
  • If two changes must happen together, design the app to cope when they arrive a little apart.
  • For mobile apps, remember that very old versions may keep behaving as they did for days.
  • For big launches, ask a person to test from outside your own office network, as a customer would.

What is recorded along the way

Every stage leaves a footprint. The request holds the story and the decisions. The approval records say who agreed. The audit log shows the exact change and its moment. Monitoring shows the effect. If you keep these four footprints together, you can reconstruct any change after the fact.

i
Habit

After any important change, write one line in your team’s launch log: the request link, the time it went live, and what the dashboards showed ten minutes later. These lines become a precious history within a year.

29Everyday Scenarios and How to Handle Them

Real life produces situations that guides rarely mention. Here are common ones, with sensible ways to respond.

Scenario 1: A reviewer is on holiday

The group has only one expert

A request waits because the one person who knows the payments system is away. The fix is not to ask someone else to click approve without understanding. Instead, name a deputy in advance, and write short system notes so a second person can learn the essentials. The team should treat a one-person group as a risk to be fixed.

Scenario 2: A request is approved, but the plan changed

Do not publish stale approval

On Monday, a request was approved. On Tuesday, product management delays the launch. On Wednesday, somebody sees the approved request and publishes it. Customers see a half-ready feature. The fix is simple: when a plan changes, withdraw or update the request immediately, and check the status of approved requests before every launch.

Scenario 3: Two teams want the same flag

Shared flags need an owner

Search and recommendations teams both change the flag that controls the number of results per page. Their requests collide. The fix is to decide on a single owner for the flag, and ask other teams to request changes through the owner or through a shared review.

Scenario 4: An approver is the requester’s manager

Authority can silence questions

A junior engineer hesitates to question a change proposed by their manager, and just approves it. This is a very human problem. The fix is cultural: encourage questions from everyone, and require at least one approver who is not in the requester’s reporting line for risky changes.

Scenario 5: The business wants a change this minute

Urgent does not mean unchecked

A senior executive asks for a banner to be turned off immediately because of a news story. The request goes through quickly with a short review by whoever is on call, who checks only the essentials: right flag, right environment, right setting. A two-minute review is still a review.

Scenario 6: The audit asks for evidence

Records answer the questions

An auditor asks, “How do you ensure changes to payment settings are approved?” The team shows the environment setting, the permission groups, a sample of closed requests and the matching audit log lines. Because titles, reasons and names are in order, the conversation takes thirty minutes instead of three days.

Scenario 7: A noisy week

Too many requests

During a big release, forty requests appear in two days, and reviewers get tired. Tired reviewers approve carelessly. The fix is to plan ahead: bundle related changes into fewer requests, add extra reviewers for the week, and spread work across more days.

Scenario 8: A request must be reversed

Undo is also a change

A published change causes problems, and the team wants to go back. In a guarded environment, going back is another change. Use the kill switch or emergency path if it is urgent. If it is not, create a request that restores the earlier setting, and mention the earlier request in the description so history stays easy to follow.

A short decision guide

If this happensThen do this
Request is waiting too longChase through chat, then use the rota
Plan changes after approvalWithdraw or update the request at once
Two requests collideCombine, or publish one and re-check the other
Incident in progressUse the kill switch or the emergency path
Someone asks to skip reviewOffer a fast review instead of no review
Approvals are always instantSample and discuss them to check they are real
Most process failures are not about the tool. They are about people, timing and forgotten details.

30Advanced Topics: Versioning, Settings and Long-Term Care

Once the basics feel comfortable, a few deeper ideas decide how well change requests age as your company grows.

Feature versioning

Some versions of Flagsmith keep numbered versions of each flag’s settings in an environment. With versions, you can see earlier states, compare them and prepare a future state that goes live at a chosen time. Scheduling and approvals may rely on this option in some editions. Because behaviour differs by version, test how requests, versions and schedules work together in a staging environment before you build a launch plan around them.

Environment settings that matter to review

  • The number of approvals. The heart of the process.
  • Hiding sensitive values. Some environments can hide flag values from certain people. Reviewers need to see enough to judge a change, so decide who needs the view.
  • Who can edit settings. The person who can change the approval rule is the real owner of the gate.
  • Trait and identity handling. These affect how groups of users are matched, and therefore what a segment change really does.

Segments are shared, requests are not

A segment is defined at the project level and reused by every environment. A change request is about one environment. If someone edits the definition of a segment, they may change who is affected in all environments at once, even though the approval setting guards only one. Treat edits to segment definitions as sensitive, and decide in advance who may make them and who must review them.

!
A quiet gap

People often protect production flags carefully and forget that a shared segment can quietly change who sees a feature. Ask your administrator exactly how edits to segments are guarded in your version.

Keeping flags healthy over time

Flags are not meant to live forever. A healthy flag moves through stages: created, tested, rolled out, fully on, removed from code, deleted. Old flags that nobody removes become clutter, and every request must then be reviewed against a long list of unfamiliar switches. Add flag removal to your normal definition of “done” for a feature.

stateDiagram-v2
    [*] --> Created
    Created --> Testing: Switched on in Development
    Testing --> RollingOut: Request approved for small groups
    RollingOut --> FullyOn: Request approved for everyone
    FullyOn --> CodeRemoved: Old code deleted
    CodeRemoved --> Deleted: Flag removed from project
    Deleted --> [*]
    RollingOut --> Testing: Problem found
Figure 11: The life of a feature flag, with requests marking each step forward

Planning for people moving on

Every quarter, compare your approver groups with your real team lists. Remove people who have left, add new joiners who have been trained, and check that every group has at least three members. Assigning approvals to groups rather than individuals means that this regular tidy-up is quick.

Keeping documentation alive

Write your process in one short page: which environments are protected, how many approvals are needed, who the reviewers are, how to write a request, how to use the emergency path and whom to ask for help. Review the page whenever you change the setup. A page that is two years old is worse than no page, because people trust it.

Questions to ask yourself once a year

  • Does approval still protect us from the mistakes that actually happen?
  • Are we spending review effort where the risk is highest?
  • Has any team found ways around the process, and why?
  • Do new joiners understand the process within their first week?
  • Would we be comfortable showing our records to an auditor tomorrow?

31Real-World and Industry Examples

Review before change is an old idea in engineering. The descriptions below reflect what these organisations have discussed publicly, as patterns, not details of private systems.

GitHub and code review

The pull request, popularised by GitHub, is the best-known example of “propose, review, then merge”. Teams that already work this way find change requests natural: the same habits of describing, reviewing and approving apply to flag settings.

Google: change as the usual suspect

Google’s reliability writing emphasises that most outages follow some kind of change. Recording changes, reviewing risky ones and being able to roll back quickly are central habits. A flag change with a recorded reviewer fits that approach.

Netflix: gradual exposure

Netflix has talked about canary releases and gradual rollouts, where a change reaches a small share of traffic first and is compared with the old behaviour. Staged change requests, a small group first and then more, reflect the same careful path.

Facebook: gates for features

Facebook has described an internal gating system used to release features to employees first and then to growing parts of the public. Reviewing who sees what, and when, is part of that culture.

Amazon: two-person thinking

Large cloud and commerce companies commonly require a second person to look at risky operational changes, particularly for actions that could affect many customers at once. The reasoning is the same as in change requests: a single mistaken command should not reach everyone.

Banks and public bodies: change advisory boards

Banks, hospitals and government bodies often run formal change processes, where a group reviews planned changes and approves them for set windows. Change requests with scheduling are a light, faster version for flag settings, with a record that satisfies many of the same needs.

i
Takeaway

None of these organisations treats review as an end in itself. They use it to make fast change safe enough that people dare to make changes often.

1
reviewer catches a typo before customers do
3
small steps instead of one big launch
0
midnight button-pressing needed

32Reusable Checklists

Experienced pilots do not trust memory for routine steps, and neither should you. Copy these into your team wiki.

Before you create a request

  • Confirm the environment. Read its name twice.
  • Check the list of open requests for the same flag.
  • Decide whether this change really needs to be in production now.
  • Write the reason, the check and the undo plan.
  • Choose approvers who understand the system.
  • Write the time and time zone for scheduled changes.

When you review a request

  • Compare the proposed settings to the live ones, not to memory.
  • Check the environment, the flag name and the value.
  • Think about which users are affected and how many.
  • Ask what happens if it goes wrong, and whether undo is easy.
  • Check that the timing is safe: no sale, no other incident.
  • Approve only when you would be comfortable defending the change.

Before you publish

  • Check that the required approvals are in.
  • Check that nobody has changed the flag since approval.
  • Tell the people who need to know.
  • Open the dashboards you will watch.

After you publish

  • Check the live flag shows the new setting.
  • Watch the dashboards for a few minutes.
  • Record anything unusual.
  • Close the request and clean up anything temporary.

Every quarter

  • Review who can approve and who can change environment settings.
  • Remove people who left or changed teams.
  • Look at waiting times, old requests and emergency path use.
  • Run an emergency drill.
  • Retire flags that have finished their job.
Analogy

A tidy kitchen has a place for every tool and a routine for closing at night. These checklists are the labels on the shelves and the closing routine for your flag workshop.

33Plain-English Glossary

A short reference for the words used in this guide.

Term

Feature flag

A switch outside the code that turns a behaviour on or off.

Term

Environment

A separate set of flag settings for one stage, such as production.

Term

Feature state

The on or off setting and value of one feature in one environment.

Term

Change request

A saved proposal to change a flag, held until approved and published.

Term

Approval

A reviewer’s recorded yes to a request.

Term

Publish

The step that turns an approved proposal into the live setting.

Term

Scheduled change

An approved change set to take effect at a future time.

Term

Segment

A group of users defined by rules.

Term

Segment override

A different setting of a feature for a segment in one environment.

Term

Audit log

The record of who changed what and when.

Term

Separation of duties

The rule that the person who makes a change is not the only one who approves it.

Term

Least privilege

Giving people only the access they need.

Term

Kill switch

A flag made to turn off a risky feature quickly.

Term

Break-glass access

A tightly watched emergency way around a rule.

Term

Webhook

An automatic message sent to a web address when something happens.

Term

Transaction

A group of database writes that all succeed or all fail.

Term

Cache

A nearby stored copy of popular answers for speed.

Term

Canary release

Giving a change to a small share of traffic first to see how it behaves.

Term

Rubber stamp

An approval given without real review.

Term

Runbook

A step-by-step checklist for a repeated task.

34Frequently Asked Questions

Quick answers to the questions that come up most often.

Q1Does a change request change my live flag right away?
No. It stores a proposal. The live flag changes only after the required approvals are in and the request is published or its scheduled time arrives.
Q2Can I require approvals only in production?
Yes. Approvals are an environment setting, so you can guard production and leave development free.
Q3How many approvals should I require?
One is a good starting point. Use two for the most sensitive systems. More than two usually adds delay without adding real attention.
Q4Can I approve my own request?
This depends on your version and settings. For separation of duties, it should not count. Check how your account behaves and write the rule down.
Q5Can I schedule a change for later?
Yes, in versions and plans that support it. The request is approved first and then applied at the chosen time. State the time zone clearly.
Q6What happens if two requests touch the same flag?
The later one published may overwrite parts of the earlier one. Check the list of open requests, keep requests small and re-check the live state before publishing.
Q7Do change requests slow down my apps?
No. Apps read live flags from fast read layers. Approvals happen on the management side and do not touch that path.
Q8What if I need to turn something off urgently?
Plan for it. Use kill switches that on-call engineers can approve quickly, keep a second approver reachable and define a recorded break-glass path.
Q9Is the audit log still needed if I use change requests?
Yes. The request record explains why and who approved. The audit log records the exact change and when it took effect. They complement each other.
Q10Are change requests available on every plan?
Not necessarily. They are generally part of paid or enterprise offerings. Check your plan.
Q11Does cloning an environment copy its approval rules?
Do not assume it does. After cloning, open the new environment’s settings and check the approval rule yourself.
Q12Can automation create change requests?
Yes, through the API, for example after a successful deployment. People should still do the approving.
Q13What if an approver leaves the company?
Requests assigned only to them can stall. Assign approvers through groups and remove departed people promptly.
Q14Should every flag need approval?
No. Match review to risk. Guard the environments and flags where a mistake would be costly, and keep the rest quick.

35Summary and Key Takeaways

Let us pull the story together in a few lines you can remember.

Key Takeaways

  • A change request is a reviewed proposal. The live flag stays untouched until approvals are in and the change is published or scheduled.
  • It is set per environment. Guard production and other costly spaces, and keep development free and quick.
  • Proposed and live states stay separate. Apps keep reading the live state, and the final swap happens in one all-or-nothing step.
  • People make it work. Clear titles, reasons and undo plans, approvers with real knowledge and fast response times matter more than the number of signatures.
  • Plan for conflicts and emergencies. Keep requests small, avoid stale ones, and prepare kill switches and a recorded break-glass path before you need them.
  • Use it for compliance and learning. The record supports separation of duties and audits, and reviews share knowledge across teams.
  • Verify the details. Plan limits, scheduling support and exactly which actions are guarded can differ by version, so test your own setup and check the documentation.