Hypertune
  • Introduction
  • Getting Started
    • Set up Hypertune
    • Next.js (App Router) quickstart
    • Next.js (Pages Router) quickstart
    • React quickstart
    • Remix quickstart
    • Gatsby quickstart
    • Vue quickstart
    • Nuxt quickstart
    • Node.js quickstart
    • React Native quickstart
    • JavaScript quickstart
    • Python quickstart
    • Rust quickstart
    • Go quickstart
    • Web quickstart
    • GraphQL quickstart
  • Example apps
    • Next.js and Vercel example app
  • Concepts
    • Architecture
    • Project
    • Schema
    • Flag lifecycle
    • Logic
    • Variables
    • Splits
    • A/B tests
    • Staged rollouts
    • Multivariate tests
    • Machine learning loops
    • Events
    • Funnels
    • Hypertune Edge
    • Reduction
    • SDKs
    • GraphQL API
    • Git-style version control
    • App configuration
  • Use Cases
    • Feature flags and A/B testing
    • Landing page optimization
    • In-app content management
    • Pricing plan management
    • Permissions, rules and limits
    • Optimizing magic numbers
    • Backend configuration
    • Product analytics
  • Integrations
    • Vercel Edge Config integration
    • Google Analytics integration
    • Segment integration
    • Webhooks
      • Creating webhooks
      • Handling webhooks
  • SDK Reference
    • Installation
    • Type-safe client generation
    • Initialization
    • Build-time logic snapshot
    • Hard-coded fallbacks
    • Local-only, offline mode
    • Hydrate from your own server
    • Wait for server initialization
    • Provide targeting attributes
    • Local, synchronous evaluation
    • Remote logging
    • Getting flag updates
    • Serverless environments
    • Vercel Edge Config
    • Custom logging
    • Shutting down
Powered by GitBook
On this page
  • Structure
  • Using splits in flag targeting logic
  • A/B tests
  • Staged, percentage-based rollouts
  • Multivariate tests
  • Machine learning loops
  • Viewing results
  1. Concepts

Splits

PreviousVariablesNextA/B tests

Last updated 8 months ago

A split is the underlying abstraction that powers:

You can create splits in the Hypertune UI and then embed them anywhere in your flag targeting logic.

This means you can have a single feature flag with rules to enable the feature for specific users, e.g. employees, QA, beta users, etc, and a final default rule to A/B test the feature on everyone else.

It also means you can reuse a single A/B test across the logic of different feature flags to roll out and test related features in sync.

This power and flexibility is unique to Hypertune.

Structure

Each split has a:

  • Type

  • Name

  • Set of dimensions

  • Goal function (for ML loop splits only)

Each dimension has a:

  • Name

  • Set of arms

Each arm has a:

  • Name

  • Traffic allocation percentage (for Test splits only)

Using splits in flag targeting logic

Once created, you can embed splits anywhere in your flag targeting logic with a Split Control expression.

If the split has more than one dimension, you can select the one which is relevant for the flag.

Then for each arm in the dimension, you can set the flag values, or nest more flag targeting logic.

You can also set the Unit ID for the split, typically context.user.id. A hash of the Unit ID is used to determine the arm for Test splits so the same user will always end up in the same arm.

If the split has a payload event type, you can also set the value for the payload, or nest more logic for it.

When you evaluate a flag that uses a split, an "exposure" will be logged with the Unit ID and the arm the unit was assigned for each dimension. If the split has a payload event, this will be logged too.

A/B tests

Staged, percentage-based rollouts

Multivariate tests

This lets you test all combinations of the arms of each dimension. For example, you can have one dimension called Button color with three arms: Red, Blue, Green. And another dimension called Button text with three arms: Sign up, Get access, Request access.

You can embed the test into a String flag, buttonColor, that controls the color of your call-to-action button, select the Button color dimension, then set flag values for each arm.

And you can embed the same test into another String flag, buttonText, that controls the text of your call-to-action button, but this time select the Button text dimension, then set flag values for each arm.

This will test all 9 combinations of button color and button text.

Machine learning loops

You can convert any Test split into an ML loop split.

And instead of setting fixed traffic allocation percentages for each arm, Hypertune automatically and continuously learns the best arm for each dimension. If the split has a payload event type, the payload event fields are used as "features" for the machine learning model.

For example, you can set up a machine learning loop to personalize the headline on your landing page to each unique visitor, to maximize sign ups.

Viewing results

Test — for , and

ML loop — for

Payload

An is a Test split with a single dimension with two arms.

A is a Test split with a single dimension with one arm.

A (or multidimensional test) is a Test split with multiple dimensions.

A requires a goal function, expressed as a formula of your .

To view the results of your splits, ensure you've set up the you want to track, then build a to compare conversion rates across different arms.

A/B tests
staged rollouts
multivariate tests
machine learning loops
event type
staged, percentage-based rollout
machine learning loop
event types
event types
funnel
A/B test
multivariate test
A/B tests
Staged, percentage-based rollouts
Multivariate tests
Machine learning loops