Experimentation

Every feature is a decision

Continuously deliver innovation and measure business outcomes with Split’s unified feature flag and experimentation platform.

Increment, iterate, and innovate

Accelerate time to value

Delivering faster doesn’t guarantee you will also deliver value. Agile developers combine rapid feedback and iteration to accelerate time to value. Split correlates the impact of each iteration on technical, product and business metrics for data-driven product decisions.

Lower the transaction cost of change

Application changes are not limited to the UI. Backend systems continually evolve. Transitioning to microservices, migrating a database, or improving algorithms are disruptive changes fraught with risk. Split’s unique full stack implementation measures change anywhere in the application to reduce risk and free up developer time.

Develop locally, measure globally

The power of measurement goes beyond improving a single metric. Product teams can get tunnel vision when it comes to measuring new functionality, but local optimization shouldn’t create global degradation. Split experimentation provides a holistic view of product metrics across the business to ensure change doesn’t negatively affect other teams or applications.

Essential to your data strategy

Evidence-based development requires a platform you can trust. Split pulls in data from any source to automatically correlate new features with events tracked by your data warehouse or product analytics tool. Democratize data access so everyone on the team can view the metrics dashboard and collaborate on product decisions.

Features

How it works

Release faster with Split in 4 easy steps

1. Feature Flag

Feature flags are if/else statements that define the code path of a feature. We support many popular languages out of the box, including support for desktop, mobile, and web applications.

SplitClient split = SplitFactoryBuilder.build("YOUR_API_KEY").client();

String treatment = split.getTreatment("USER_ID", "my-feature");

if (treatment.equals("on")) {
  // insert on code here
} else if (treatment.equals("off")) {
  // insert off code here
} else {
  // insert control code here
}
split := client.NewSplitFactory("YOUR_API_KEY").Client()

treatment := client.Treatment("USER_ID", "my-feature")

if treatment == "on" {
  // insert on code here
} else if treatment == "off" {
  // insert off code here
} else {
  // insert control code here
}
let split = SplitFactory(apiKey: YOUR_API_KEY, key: user_id).client()

let treatment = split.getTreatment("my-feature")

if treatment == "on" {
  // insert on code here
} else if treatment == "off" {
  // insert off code here
} else {
  // insert control code here
}
SplitClient split = SplitFactoryBuilder.build("YOUR_API_KEY").client();

String treatment = split.getTreatment("USER_ID", "my-feature");

if (treatment.equals("on")) {
  // insert on code here
} else if (treatment.equals("off")) {
  // insert off code here
} else {
  // insert control code here
}
const clientConfig = {
  core: {
    authorizationKey: "YOUR_API_KEY",
    key: "USER_ID"
  }
};

const split = splitio(clientConfig).client();

split.on(split.Event.SDK_READY, () => {
  const treatment = split.getTreatment("my-feature");
  
  if (treatment === "on") {
    // insert on code here
  } else if (treatment === "off") {
    // insert off code here
  } else {
    // insert control code here
  }
});
var factory = new SplitFactory("YOUR_API_KEY");
var split = factory.Client();

var treatment = split.GetTreatment("USER_ID", "my-feature");

if (treatment == "on") {
  // insert on code here
} else if (treatment == "off") {
  // insert off code here
} else {
  // insert control code here
}
const clientConfig = {
  core: {
    authorizationKey: "YOUR_API_KEY",
    key: "USER_ID"
  }
};

const split = splitio(clientConfig).client();

split.on(split.Event.SDK_READY, () => {
  const treatment = split.getTreatment("my-feature");
  
  if (treatment === "on") {
    // insert on code here
  } else if (treatment === "off") {
    // insert off code here
  } else {
    // insert control code here
  }
});
$split = \SplitIO\Sdk::factory('YOUR_API_KEY')->client();

$treatment = $split->getTreatment('USER_ID', 'my-feature');

if (treatment == 'on') {
  // insert on code here
} else if (treatment == 'off') {
  // insert off code here
} else {
  // insert control code here
}
from splitio import get_factory

split = get_factory('YOUR_API_KEY').client()
treatment = split.get_treatment('USER_ID', 'my-feature')

if treatment == "on": 
  # insert code here to show on treatment
elif treatment == "off":
  # insert code here to show off treatment
else:
  # insert your control treatment code here
split = SplitIoClient::SplitFactory.new("YOUR_API_KEY").client

treatment = split.get_treatment("USER_ID", "my-feature")

if treatment == "on"
  # insert on code here
elsif treatment == "off"
  # insert off code here
else treatment
  # insert control code here
end

2. Rollout

Determine what users receive the new feature variation by defining detailed rollout plans. Control the distribution to a subset of users, segment them by a specific attribute, or define a split based on a percentage of total customers.

3. Track Events

Get immediate feedback on your front and backend systems as your customers interact with new features.

// Events are tracked using the Split.track() method
// 
// The format is as follows:
//   split.track(CUSTOMER_ID, TRAFFIC_TYPE, EVENT_TYPE, VALUE)

// Example #1: Track page load time
split.track(USER_ID, "user", "page_load_time", 5.5346);

// Example #2: Track API response time
split.track(USER_ID, "user", "api_response_time", 1.7459);

// Example #3: Track database query time
split.track(USER_ID, "user", "db_query_time", 0.2434);

// Example #4: Track clicks or engagements
split.track(USER_ID, "user", "clicked_purchase_button");

// Example #5: Track support ticket count creations
split.track(USER_ID, "user", "created_support_ticket");

4. Measure Outcomes with Experimentation

Measure the value delivered of each new feature by monitoring business, product, and operational metrics.

Split helps teams make smarter decisions

Split’s full-stack experimentation platform has been built with engineering and product teams in mind. It’s robust architecture and rich feature set integrates into our internal platforms and helps power experimentation across our entire engineering organization.

Photo of Laura Schaffer
Laura Schaffer
Product Manager, Twilio

Split provided the platform and integrations we needed to run full stack experiments for key technical and customer experience questions.

Photo of Julian Ganguli
Julian Ganguli
Principal Data Analyst, Surfline

On any given day we have hundreds of thousands of people coming to the website. That’s a lot of impression data. We needed to be able to determine what variation of a feature customers were going to get or when an anonymous person becomes a customer and Split takes care of all of that for you. Every time you visit thredUP.com, you’re fetching Split treatments.

Photo of Dan DeMeyere
Dan DeMeyere
VP Engineering, thredUP

Ready to get started?

Try Split for 14 days. No credit card required.