Build better products faster

Optimizely Full Stack is A/B testing for product and engineering teams.

Experiment in any application. Make every feature on your roadmap an opportunity to learn.

Deliver at every step of the customer journey

Experiment deep into your stack to create exceptional customer experiences on everything from search results and promos to recommendations and payment structures.

Reduce risk and fail faster

Prove the impact of new features, performance improvements, or backend changes before rolling out to everyone. Empower your product managers to control feature rollouts seperately from code deployment.

Know what works

Stats Engine delivers statistically relevant results in real time so your team can make faster decisions. Let your whole team experiment and watch the best idea win every time—no matter who it comes from.

An experimentation platform you can trust

Open platform

Open-source SDKs with pluggable components give you control over network activity and integrating with your own analytics pipeline.

Fast decision engine

Conduct experiments in performance-critical codepaths. Our SDKs bucket users in memory so experiments have no impact on latency.

Scalable architecture

Real-time event collection servers used by thousands of customers across the globe allow you to get experiment results immediately.
import optimizely

optimizely = optimizely.Optimizely(datafile)

# Activate an experiment
variation = optimizely.activate('my_experiment', 'user_123')

if variation == 'variation_a':
  # Execute code for variation A
elif variation == 'variation_b':
  # Execute code for variation B
else:
  # Execute default code

# Track an event
optimizely.track('purchase_completed', 'user_123')

import com.optimizely.ab.Optimizely;

Optimizely optimizely = Optimizely.builder(datafile).build();

// Activate an experiment
Variation variation = optimizely.activate("my_experiment", "user_123");

if (variation != null) {
  if (variation.is("variation_a")) {
    // Execute code for variation A
  } else if (variation.is("variation_b")) {
    // Execute code for variation B
  }
} else {
  // Execute default code
}

// Track an event
optimizely.track("purchase_completed", "user_123");

require "optimizely"

project = Optimizely::Project.new(datafile)

# Activate an experiment
variation = project.activate('my_experiment', 'user_123')

if variation == 'variation_a'
  # Execute code for variation A
elsif variation == 'variation_b'
  # Execute code for variation B
else
  # Execute default code
end

# Track an event
project.track('purchase_completed', 'user_123')

var optimizely = require('optimizely-server-sdk');

var optimizely = optimizely.createInstance({ datafile: datafile });

// Activate an experiment
var variation = optimizely.activate('my_experiment', 'user_123');

if (variation === 'variation_a') {
  // Execute code for variation A
} else if (variation === 'variation_b') {
  // Execute code for variation B
} else {
  // Execute default code
}

// Track an event
optimizely.track('purchase_completed', 'user_123');

use Optimizely\Optimizely;

// Initialize an Optimizely client
$optimizelyClient = new Optimizely($datafile);

// Activate an experiment
$variation = $optimizelyClient->activate('my_experiment', 'user_123');

if ($variation == 'variation_a') {
  // Execute code for variation A
} elseif ($variation == 'variation_b') {
  // Execute code for variation B
} else {
  // Execute default code
}

// Track an event
$optimizelyClient->track('purchase_completed', 'user_123');
using OptimizelySDK;

// Initialize an Optimizely client
Optimizely OptimizelyClient = new Optimizely(datafile);

// Activate user in an experiment
var variation = OptimizelyClient.Activate("my_experiment", userId);

if (variation != null)
{
    if (variation == "control")
    {
        // Execute code for variation A
    }
    else if (variation == "treatment")
    {
        // Execute code for variation B
    }
}
else
{
    // Execute default code
}

// Track conversion event
OptimizelyClient.Track("my_conversion", userId);
var optimizely = require('optimizely-client-sdk');

// Initialize an Optimizely client
var optimizelyClientInstance = optimizely.createInstance({ datafile: datafile });

// Alternatively, if you don't use CommonJS or npm, you can install the minified snippet and use the globally exported varible as follows
var optimizelyClientInstance = window.optimizelyClient.createInstance({ datafile: datafile });

// Activate user in an experiment
var variation = optimizelyClientInstance.activate("my_experiment", userId);

if (variation === 'control') {
  // Execute code for variation A
} else if (variation === 'treatment') {
  // Execute code for variation B
} else {
  // Execute default code
}

// Track conversion event
optimizelyClientInstance.track("my_conversion", userId);

Free your analysts

With Optimizely's Stats Engine you get statistically valid, real-time results. So you can act rapidly when the data calls for it, and dig into your analytics pipeline when you need a more complete picture.

Explore Stats Engine

Works in the languages you do

Optimizely includes easy-to-use SDKs for most major platforms.

Node

Python

Ruby

JavaScript

PHP

Java

C#

Node Python Ruby JavaScript PHP Objective-C Android Java Swift C#

The complete solution for server-side experimentation

Open source SDKs
Our SDKs are transparent, so you know exactly how they work.

Event tracking
Monitor all the conversion metrics and KPIs you care about, in your app or any other service.

Mutually exclusive experiments
Prevent interaction effects by separating experiments that affect the same feature

Custom configuration
Easily swap out your own components for logging, error handling, event dispatching, integrations, and more.

Rollouts
Reduce the risk of launching new features by rolling them out first to a small set of users, either random or targeted.

Multichannel experimentation
Set your own user IDs to create consistent personalized experiences across all your customer channels.

Audiences
Define custom attributes for fine-grained targeting and segmentation.

Raw event export
Easily download the complete event data from Optimizely.

Whitelists
Quickly QA experiments by forcing specific users into variations

Optimizely Stats Engine
See the impact of your experiments in real-time, with the world’s leading Experimentation Platform.

Traffic splitting
Easily create randomized traffic switches anywhere in your app without affecting performance.

Enterprise-ready security
Roles and permissions, 2-factor authentication, and single sign on.

Install an SDK and run an experiment in 10 minutes

Get started

  • Full Stack has opened up new doors for our business. Any time we deploy new code in our product, we do it as a test to measure conversion and revenue impact, giving the team insights to make decisions while making sure the change to the customer experience is a positive one.
    Colin Gardiner, VP Product & Analytics
    Tripping Logo

Start experimenting in your stack today

Contact Sales