FAQs

Below are some frequently asked questions about our SDKs.

If you have any questions or feedback, you can submit a ticket to the developer support team. We'll be happy to assist you.

Q: How do I target my experiment to a group of users?
Q: How do I QA or preview my experiment?
Q: How do I make experiments mutually exclusive?
Q: Do your SDKs handle bot detection?
Q: How do I access the raw events I’ve sent to Optimizely?
Q: What is the SDK performance?
Q: What user IDs should I use in activate() and track()?
Q: How does Optimizely consistently bucket users across SDKs?
Q: Can I use the same datafile across different SDKs?
Q: How does Optimizely work with multiple apps and/or services?
Q: How does datafile management work across SDKs?
Q: How do I track user events that occur client-side in a web browser?
Q: How is Optimizely Full Stack compatible with caching?

Q: How do I target my experiment to a group of users?

A: Our SDKs allow you to conditionally activate experiments based on user attributes you provide. You can define user attributes in the Optimizely UI as well as audiences consisting of one or more user attributes.

Q: How do I QA or preview my experiment?

A: You can use our Whitelisting feature to force users into specific variations for QA purposes. The whitelist feature allows you to specify a list of user IDs and their corresponding variations. We're working on adding an option to force users into variations from the SDK as well as a preview mode for our Mobile SDKs.

Q: How do I make experiments mutually exclusive?

A: SDK projects support mutually exclusive experiments out of the box. Simply create an experiment group and assign experiments to that group.

Q: Do your SDKs handle bot detection?

A: Our SDKs do not handle bot detection out of the box. If you’re using your own bot detection, we recommend calling activate() only for users that have passed your bot detection filter to remove bots from your experiments.

Q: How do I access the raw events I’ve sent to Optimizely?

A: Our raw data export feature allows you to export all of the events you’ve sent to Optimizely on a daily basis.

Q: What is the SDK performance?

A: We’ve built our SDKs so you can split traffic to experiments without any network requests. All decisions are made in-memory based on the datafile cached in your application so there is negligible impact on latency. Please contact us if you’re interested in seeing performance benchmarks for any of our SDKs.

Q: What user IDs should I use in activate() and track()?

A: We’ve designed our SDKs to be platform-agnostic, so you may use whatever user ID makes the most sense for your experiments. If you’re experimenting on anonymous users, we recommend using a cookie, device ID, or an automatically generated ID from your analytics provider. If you’re experimenting on a logged in application or device, or experimenting across multiple channels, you can use a hashed email address, universal user identifier (UUID), or any other unique ID.

Q: How does Optimizely consistently bucket users across SDKs?

A: All of our SDKs use deterministic bucketing via MurmurHash3 to determine what experiments and variations should be active for a user. This ensures that users will be given the same treatment across multiple visits or on different channels. We’ve also ensured that all of our SDKs give the same output no matter what language you’re using.

Q: Can I use the same datafile across different SDKs?

A: Yes. The datafile is language agnostic and you can use the same datafile from the same project across different SDKs and you would get consistent bucketing across them. This way, you can activate and track the exact same experiments across different SDKs and get consistent results.

Q: How does Optimizely work with multiple apps and/or services?

A: It is possible to perform the traffic splitting in one backend using your SDK of choice and then track conversion events in multiple different places using other SDKs, such as other backend services, mobile clients or from the browser with our JavaScript SDK.

Q: How does datafile management work across SDKs?

A: The recommended way to manage the datafile file across multiple SDKs is to have a centralized service that subscribes to the datafile webhook on your project and pushes updates to other services that subscribe to datafile file changes. Those services in turn would re-instantiate their Optimizely client using whichever Optimizely SDK they have.

Q: How do I track user events that occur client-side in a web browser?

A: We’ve created a lightweight JavaScript SDK that can be used for tracking conversion events from a web browser. Note that this is different than our standard JavaScript snippet, so it won’t interfere with any experiments that you’re running client-side in the browser.

Q: How is Optimizely Full Stack compatible with caching?

A: Many of our customers are using a CDN to cache content, which means that using one of Optimizely’s SDKs in the backend may require custom configuration. There are a number of ways you can use Optimizely Full Stack in your caching architecture:

  1. (Recommended) Use an off-the-shelf load balancer provided by your CDN.
    a. Implement one of our SDKs at this layer to run bucketing logic.
    b. Use the variation key you get from bucketing and the URL as part of the cache key to determine which variation to show.

  2. Build your own load balancer on top of your CDN and perform bucketing logic in it to determine which variation to show the user.

  3. Use CDN side-scripting such as Edge Side Includes (ESI) for Akamai to run bucketing logic to determine the correct variation to return.

  4. Run inline JavaScript code in the of the page.
    a. Add a script with our JavaScript SDK and datafile.
    b. Script will run bucketing logic, set a cookie or URL query param and reload the page.
    c. The caching layer should use the query param or cookie along with the URL as the cache key to determine which variation to show.