---
title: Impressions after migration
slug: feature-experimentation/docs/impressions-after-migration
docTags: 
createdAt: 2026-08-05T20:39:53.000Z
---

After migrating to Feature Experimentation from Full Stack Experimentation (Legacy), if you are running [A/B tests](docId:6_ik6SSz-WyJLWuCQw7BT) and use the [\`getEnabledFeatures\`](docId:6_ik6SSz-WyJLWuCQw7BT) SDK method, action *is* required to ensure [impressions](docId\:SzVcfUMHk3IKycnEjgjbq) are counted accurately after migrating.

## Impressions in Full Stack Experimentation (Legacy)

In Full Stack Experimentation (Legacy), there are two different types of experiments you can run:

- [A/B test](docId:6_ik6SSz-WyJLWuCQw7BT) – Experiment not tied to a specific feature. You can define variations and use the Optimizely Full Stack Experimentation SDK's `activate` method to return the appropriate variation for a user in the experiment.
- [Feature test](docId:6_ik6SSz-WyJLWuCQw7BT) – Experiment built on top of a feature. You can group [feature variables](docId:6_ik6SSz-WyJLWuCQw7BT) into experiment variations and use the Optimizely Full Stack Experimentation SDK's `isFeatureEnabled` method to return the appropriate variables for a user. You can also use the `getEnabledFeatures` method to make decisions for the enabled features.

:::hint{type="info"}
**Note**
You can find more details on the differences between an A/B test and a feature test in the [Simplified data model](docId\:FViViXLykNCxooeRY-eyw) documentation.
:::

Optimizely triggers an [impression](docId:6_ik6SSz-WyJLWuCQw7BT) for a user that qualifies for a running experiment when you call the `activate` method for A/B tests or the `isFeatureEnabled` or `getEnabledFeatures` methods for feature tests, respectively.

Calling the `isFeatureEnabled` or `getEnabledFeatures` methods only return variables and send impressions for feature tests. Impressions are *not* sent for A/B tests with these methods.

## Impressions in Feature Experimentation

In Feature Experimentation, experiments are flag rules built on a feature flag. More details are in the [Simplified data model](docId\:FViViXLykNCxooeRY-eyw) documentation.

Optimizely Experimentation triggers an [impression](docId\:SzVcfUMHk3IKycnEjgjbq) when a user is exposed to a flag variation as part of an Optimizely experiment. The legacy methods listed above (`activate`, `isFeatureEnabled`, `getEnabledFeatures`) are still fully supported after you migrate a project to Feature Experimentation.

## Changes with impressions after migrating

If you use both the `activate` and `getEnabledFeatures` methods in an A/B test, you will see an increase in the number of impressions that Optimizely triggers after migrating.

After migrating to Feature Experimentation, your A/B test from Full Stack Experimentation (Legacy) becomes an A/B test flag rule under its own feature flag. The `activate` method will still return the appropriate variation for a converted A/B test flag rule and trigger an impression as expected without any needed code changes. For information on migrating A/B tests, see [Migrate legacy A/B test](docId\:PkHl3BV5AcSioNcJy8aZi).

However, because an A/B test is now a flag rule built on a flag in Feature Experimentation, it is now included in the `getEnabledFeatures` method after migrating. The `getEnabledFeatures` method will return variations and trigger impressions for the A/B test flag rule.

Including a converted A/B test flag rule in both the `activate` and `getEnabledFeatures` methods may trigger Optimizely to send more impressions than before migrating.

## Recommended approach

To ensure you are not unknowingly triggering impressions for converted A/B test flag rules, you should replace the `activate` and `getEnabledFeatures` methods with the `decide` and `decideAll` methods, respectively.

- The `decide` method returns decision results for a flag key for a user.
- The `decideAll` method returns decision results for active (unarchived) flags for a user.

:::hint{type="info"}
**Note**
You can disable decision events for `decide` and `decideAll` method calls using the `DISABLE_DECISION_EVENT` option.
:::

### `decide` method reference documentation

- [Android SDK](docId:0RRA0tqKb53_Evlvk1hNS)
- [C# SDK](docId\:QB-OuF0F-Tj3XpdYgXX1L)
- [Flutter SDK](docId\:Z93N-8Id5mLeEX7AEAh11)
- [Go SDK](docId\:BlCsg45md_3l5fQuAUQwO)
- [Java SDK](docId:6ZSh7uRg7JxlrHwft2Ogf)
- [JavaScript (Browser) SDK](docId\:SlmvozhQJ1rmI6AIIoqql)
- [JavaScript (Node) SDK](docId\:OR0QUdFTq9bg4lGgOz-nH)
- [PHP SDK](docId\:F9xX8jXINfiqW_X0uYcZk)
- [Python SDK](docId\:i0YJZkiaylg7J6QKk3GR_)
- [React SDK](docId\:pSYqjjV6NAFtuVmBUb9Vd) (`useDecision` hook)
- [React Native SDK](docId:99Yr30EvkA_gRVtD5WvGm) (`useDecision` hook)
- [Ruby SDK](docId\:W-MCwQUNp-EC5yaDomerg)
- [Swift SDK](docId\:m4P0yMbtf7fA3weCgyLGn)

### `decideAll` method reference documentation

- [Android SDK](docId:0RRA0tqKb53_Evlvk1hNS)
- [C# SDK](docId\:QB-OuF0F-Tj3XpdYgXX1L)
- [Flutter SDK](docId\:Z93N-8Id5mLeEX7AEAh11)
- [Go SDK](docId\:BlCsg45md_3l5fQuAUQwO)
- [Java SDK](docId:6ZSh7uRg7JxlrHwft2Ogf)
- [JavaScript (Browser) SDK](docId\:SlmvozhQJ1rmI6AIIoqql)
- [JavaScript (Node) SDK](docId\:OR0QUdFTq9bg4lGgOz-nH)
- [PHP SDK](docId\:F9xX8jXINfiqW_X0uYcZk)
- [Python SDK](docId\:i0YJZkiaylg7J6QKk3GR_)
- [React SDK](docId\:pSYqjjV6NAFtuVmBUb9Vd) (`useDecision` hook)
- [React Native SDK](docId:99Yr30EvkA_gRVtD5WvGm) (`useDecision` hook)
- [Ruby SDK](docId\:W-MCwQUNp-EC5yaDomerg)
- [Swift SDK](docId\:m4P0yMbtf7fA3weCgyLGn)

### Update to the new methods

- [Android SDK](docId:2gvjrhd7OuBcm3Z8UGhrB)
- [C# SDK](docId\:Mipo1fTiMqiZj6DvhSWIE)
- [Go SDK](docId\:QO7YffncmeJVQvNgoux9a)
- [Java SDK](docId\:j3lVXMLILkvIbjS2fjOBH)
- [JavaScript (Browser) SDK](docId\:YUTay4Kym7NHHGyjVjYdB)
- [JavaScript (Node) SDK](docId\:P5SdFKZkiOSbfm7cuUhuv)
- [PHP SDK](docId:-X9nQcRUl4L7UYACLgvsx)
- [Python SDK](docId:3cl8EUhLQgYJQ1ZPzxPmx)
- [React SDK](docId:-AC32XWPDktAMgxYjxTye)
- [React Native SDK](docId:63_5Z8m6gc_CV0tHmG1ih)
- [Ruby SDK](docId\:yXW8HDEnXcn3nkBiYI5ea)
- [Swift SDK](docId\:tdl_-8wL8sjKGvc3RHK3x)

If you encounter any issues transitioning to the `decide` API, contact your Customer Success Manager, who will assist you to ensure an effective transition.
