Skip to content

Feature Flag Migration Playbook#95

Open
mintlify[bot] wants to merge 11 commits into
mainfrom
amymadden-ffmigration
Open

Feature Flag Migration Playbook#95
mintlify[bot] wants to merge 11 commits into
mainfrom
amymadden-ffmigration

Conversation

@mintlify

@mintlify mintlify Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

This update introduces a new guide for migrating feature flags and experiments from other platforms to Mixpanel. It outlines a five-part process to ensure a smooth transition, covering exposure events, configurations, and verification.

Changes

  • Added guides/strategic-playbooks/feature-flag-migration-playbook.mdx.
  • Included new images: images/FeatureFlagSetup.png, images/ExperimentSetup.png, and images/ExperimentSetupMetrics.png.
  • Integrated the new playbook into the docs.json navigation structure.

Mintlify

10 threads from 1 user in Mintlify

  • guides/strategic-playbooks/feature-flag-migration-playbook.mdx
    • Russell Loube: "feature gate" here instead, since these are all flag types view comment
    • Russell Loube: Main risk IMO is that it's impossible for us to maintain the same variant assignment for visitors in the third-party ... view comment
    • Russell Loube: Would be good to link to [https://docs.mixpanel.com/docs/experiments#implementation-for-experimentation](https://docs... view comment
    • Russell Loube: Looks like they do have dynamic configs as well: [https://docs.growthbook.io/features/configs](https://docs.growthboo... view comment
    • Russell Loube: They released ability to track decisions events for "Targeted Deliveries" (non-experiment rollouts, optionally with f... view comment
    • Russell Loube: You can add "variables" to your flag in Optimizely and define data types, including JSON: [https://support.optimizely... view comment
    • Russell Loube: Since "key" is a loaded term, would recc rewording this view comment
    • Russell Loube: Would be great to also link to relevant API doc pages for more details: [https://docs.mixpanel.com/reference/overview... view comment
    • Russell Loube: Would change to "will result" b/c there's no way we could maintain variant assignments Every vendor uses some hashing... view comment
    • Russell Loube: IMO it'd be good to add link to our MCP server with commentary that it can help with flag implementation. LLM with ou... view comment

Open in Mintlify Editor

- Updated docs/what-is-mixpanel.mdx
- Created images/FeatureFlagSetup.png
- Created images/ExperimentSetup.png
- Created images/ExperimentSetupMetrics.png
- Created guides/strategic-playbooks/feature-flag-migration-playbook.mdx
- Updated docs.json

Mintlify-Source: dashboard-editor
Comment thread docs/what-is-mixpanel.mdx

@kurbycchua kurbycchua left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall comment is we need to make sure we fact check these as we do not want a customer ending up in messing up their experiment / FF data in mixpanel. Migrating the exposure of $experiment_started I find it the easy part, the challenging part is the Experiment report and the FF report of which underlying drives the analysis and the gates

Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx
Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx
Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx
Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx
Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx
mintlify Bot added 2 commits July 16, 2026 10:04
- Updated docs/what-is-mixpanel.mdx
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
Comment thread docs.json
"guides/strategic-playbooks/onboarding-playbook/beyond-onboarding"
]
},
"guides/strategic-playbooks/feature-flag-migration-playbook",

@kurbycchua kurbycchua Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@amymadden-bit more of a nitpick on this... depending on how we want to position this the actual content has a title of "Migrating Your Feature Flags and Experiments to Mixpanel" but the menu says "Feature Flag Migration Playbook" Also since the content is also covering feature flag that are NOT related to experiments - that's another angle to consider.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kurbycchua fair point, it's a bit long but I updated to "Feature Flag & Experiments Migration Playbook" (I think.... I did it in mintlify so hopefully it pulled over)

Comment thread guides/strategic-playbooks/feature-flag-migration-playbook.mdx Outdated
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor
- Updated guides/strategic-playbooks/feature-flag-migration-playbook.mdx

Mintlify-Source: dashboard-editor

## Step 1. Migrate past experiment exposure events

An exposure event records that a user was enrolled in an experiment, and was bucketed into an experiment variant. To keep your historical data, export your existing exposure events from your current vendor and ingest them to Mixpanel as `$experiment_started` events.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit nitpick: This statement "An exposure event records that a user was enrolled in an experiment, and was bucketed into an experiment variant." might imply to readers that exposure events (ie feature gate, dynamic config) not related to experiments need not be migrated.

sidebarTitle: "Feature Flag & Experiments Migration Playbook"
---

This guide walks through migrating your feature flags and experiments to Mixpanel from another platform. It's for teams currently running flags and experiments on a third-party vendor who want to consolidate that work in Mixpanel instead.

@kurbycchua kurbycchua Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@amymadden-bit does this read better: This guide walks through migrating your feature flags and experiments hosted in another platform into Mixpanel.

As Customer Education we should envision to review para / sentences to help easy reading, an idea for a claude skill perhaps?


### Export exposure events from your vendor

Most vendors have a dedicated exposure event you can export. You can usually export them directly from the UI or by using the vendor API.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit We should state that Mixpanel minimally requires these 4 information for an exposure event?


#### E**quivalent events**

Each vendor's exposure event corresponds to a different Mixpanel event depending on whether it came from a feature gate, an experiment, or a dynamic config. Use this table to find the equivalent for your setup:

@kurbycchua kurbycchua Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit so are we saying here "corresponds to a different Mixpanel event" that there are different exposure events on Mixpanel side? Can be confusing perhaps?

Should we just say "Each vendor has its own definition of exposure event and they can be mapped to Mixpanel's exposure event depending on the Mixpanel Feature Flag type (i.e., feature gate, an experiment, or a dynamic config)

By the end of this, your flags and experiments will be set up in Mixpanel, your historical results will carry over, and your application code will be evaluating flags through Mixpanel rather than your old provider.

<Note>
This guide is a reusable template. The steps below are vendor-agnostic. To migrate from a provider (Statsig, LaunchDarkly, Optimizely, Firebase Remote Config, VWO, GrowthBook, or any OpenFeature setup), substitute that vendor's export API in each "Export" step — the Mixpanel side stays the same.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit Don't think we covered Firebase Remote Config, VWO although it is mentioned here


Each vendor's exposure event corresponds to a different Mixpanel event depending on whether it came from a feature gate, an experiment, or a dynamic config. Use this table to find the equivalent for your setup:

| Mixpanel Feature Flag Type | Statsig Equivalent | LaunchDarkly Equivalent | Optimizely Equivalent | GrowthBook Equivalent |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp In all honesty this table with the exception of Statsig is quite confusing to me, but since unless I try to validate where this is coming from I have no way of knowing their correctness.

Example what are we saying in the following
For LaunchDarkly

  • feature event within Experiment=true (streaming); evaluation_events rows with experiment_iteration_id (warehouse)
  • feature event (boolean flag eval)
  • feature event (multivariate/JSON flag eval)

I use Gemini in an attempt to try to understand what these are saying, linking here for reference:
-Statsig: https://docs.statsig.com/integrations/event_webhook#event-format
-LaunchDarkly: https://launchdarkly.com/docs/integrations/data-export/warehouse-schema-reference#evaluation-events and https://launchdarkly.com/docs/integrations/data-export/schema-reference#feature-events


Transform each exported exposure row into a Mixpanel `$experiment_started` event and send it through the **Mixpanel Import API**.

The two required properties are **Experiment name** and **Variant name**. Keep the original exposure timestamp so historical analysis is accurate, and include a unique `$insert_id` so re-runs don't create duplicates.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit this can be confusing: Under "
Export exposure events from your vendor" we list 4 bullets and here we say "The two required properties are Experiment name and Variant name" which means distinct_id, timestamp, $insert_id can be optional? We need to make sure we are careful with how to word things in a playbook

"properties": {
"distinct_id": "alice@example.com", // enrollment ID
"time": 1709275888, // Timestamp
"$insert_id": "exp_4821_alice_1709275888",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp maybe a comment like //prevent re-run duplicates


### Export configurations from your vendor

Use your vendor's management API to export each configuration. Ensure you list and fetch definitions for feature gates, experiments, and dynamic configurations.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit Are we sure that all vendors can provide "management API to export each configuration."

"status": "enabled",
"data_group_id": null,
"serving_method": "client",
"experiment_id": 12345,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit We didn't really explain these? My guess is they should be tied to the id returned when creating the experiment? This is why I think it's important to have an engineer review these examples?

  • experiment_id
  • is_experiment_active

}
```

## Step 3. Continue setup in the Mixpanel UI

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xinlintanmp @amymadden-bit I personally feel this section is confusing, we suddenly jump to the UI without linking how those API calls from the previous section are related to this section. Example

  1. Do I search for the experiment that I created using the API and then do the UI configuration - unclear if I am someone reading this that has no idea yet how MIxpanel UI for experiments + FF works
  2. This "Once you have imported the $experiment_started events into Mixpanel, you need to create a corresponding Mixpanel Experiment report" Didn't I create an Experiment and FF already using API does this mean I am creating another duplicate?

@kurbycchua kurbycchua left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See additional comments, I have resolved those that were updated. This is a more detailed read from me and I literally took a longer time trying to push my shoes into someone who is reading this for the first time and trying to figure out how to migrate. It's a good start but I feel it needs more meet to be a playbook

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants