Feature flags

Target, release, relax

Split feature flags separate code deploy from feature release to safely execute Continuous Delivery at scale.
Maintain a single source of truth for feature flags across the application stack, establishing a framework for agile software development teams to safely increase release velocity.

Build and deploy with confidence

Create a foundation for Continuous Delivery

Continuous integration of small code increments into the main software branch with feature flags increases software development speed. A faster feedback loop means engineers spend less time debugging and more time building features. Split feature flags safely hide engineering work-in-progress until ready for testing or release.

Continuous delivery with feature flags

Safely phase into production

Phased rollouts are a safety net for Continuous Delivery practices. Gradually increase feature exposure with granular targeting rules, then observe KPIs with Split’s metrics engine to assess release health. Split gives software development teams confidence to proceed with the rollout, and peace of mind that a single click turns off problematic features.

Phased feature release with Split feature flags

Monitor engineering KPIs

Whether frontend or backend changes, Split directly links feature flags with measurement. Monitor functionality and performance of every feature to find issues before your users do. Split tracks changes in engineering metrics such as page load time, service latency, and exception rates in your application or across other applications.

Track product metrics with Split feature flags

Centralized management of feature flags

Engineers create, change, and roll out feature flags throughout the application. Tracking and cleanup can be a challenge over time. Split centralizes management of and records the who/what/why of each feature flagging decision. Access control means development teams don’t have to worry about someone making a change they shouldn’t, and audit logs ensure compliance.

Centralize feature flag management with Split

Features

How it works

Release faster with Split feature flags in 4 easy steps

1. Feature Flag

Feature flags are if/else statements that define the code path of a feature. Split’s open source SDKs support many popular languages 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 which users receive new variations of features by defining detailed rollout plans as part of your Continuous Delivery process. 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

Perform live multivariate testing and get immediate feedback on your frontend 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 Feature Experimentation

Measure the value delivered of each new feature by monitoring product and business metrics. Understand the broader impact of your feature on other projects and organizational KPIs to guard against unintended consequences and discover unexpected benefits.

Split helps teams release features faster

Every team – from product and engineering to design and support – leverages Split to confidently create a great experience for our users.

Photo of Eric Crane
Eric Crane
Product Manager, Envoy

What’s interesting is that we’re actually able to move faster with Split. In the past, there were a lot of questions like ‘if something goes wrong how will we roll it back?’ Now we just put it behind Split, and then we have the flexibility to make changes on-the-fly once it’s in production.

Photo of Dan DeMeyere
Dan DeMeyere
VP Engineering, thredUP

Split has transformed the way that we deliver software. Granular targeting of features to customers has made us more responsive, and data from Split gives us an audit trail in case any issues arise.

Photo of QuanticMind
QuanticMind

Ready to get started?

Start using Split for free today. No credit card required.