Build better products faster

Optimizely X Full Stack is A/B testing and feature management for product development 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 separately 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.

Make updates in real-time

Remotely update your application and experiments in real-time - bypassing complex and long release cycles.

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");
            
    import "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.

Works in the languages you do

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

The complete solution for server-side experimentation

  • Feature flags

    Easily enable, disable, hide, or roll out a product feature at runtime. Choose who gets access to new features.
  • Event tracking

    Monitor all the conversion metrics and KPIs you care about, in your app or any other service.
  • Instant updates

    Make updates to your experiments and features in real-time without a code deploy.
  • 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

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

Start experimenting in your stack today