Launch experiments

Plan, configure, and launch monetisation experiments with flexible A/B testing solution

This guide helps you walk through four main steps to launch your experiment:

  1. Plan your experiment
  2. Configure and test variants
  3. Adjust traffic level
  4. Launch the experiment

1. Plan your experiment

Writing down your hypothesis before configuring and starting the experiment is essential. This helps to avoid several biases (for instance, confirmation bias) during experiment analyses.

Choose your Primary Metric

You can select the Primary Metric for the experiment from the metrics that Qonversion analytics tracks:

  • User-to-Trial Conversion
  • User-to-Paid Conversion
  • New Trials
  • Trial-to-Paid Conversion
  • Trials Cancellation Rate
  • New Subscriptions
  • Subscriptions Cancellation Rate
  • Sales
  • Proceeds
  • Refunds

2. Configure and test variants

πŸ“˜

Prerequisites

To enable Qonversion to run and calculate A/B testing results, you need to have Qonversion SDK installed in your app.

By using Qonversion Experiments, you can test any part of your paywall (and even more). Moreover, Experiments and Remote Config share the same API & architectural concepts, so you do not need to implement complex logic to use both.

Use various data types

You can select one of the following:

  • String, native.subs.full.v4.w.8.99.trial.7d, Unlock Fast and Secure Browsing, #3076FF, etc.
  • Number, 2, 5, 23, etc.
  • Boolean, true, false.
  • Json, {"banner_text": "Choose your plan", "skip_onboarding": true}, etc.

Please, follow the Remote Config data types guide for more details.

Get your configuration

Simple remoteConfig SDK method enables you to retrieve previously built configurations. This method is created for both, Experiments and Remote Config features, follow this guide to learn more.

Test changes before launch

We highly recommend testing if your app works properly with the changes you want to roll out to your users. You can do so by following the following steps:

  1. Copy the ID for your experiment and the variant you want to test.
  1. Pass the values to Qonversion SDK by using the attachUserToExperiment method
Qonversion.shared().attachUser(toExperiment: "your_experiment_id", groupId: "your_group_id") { success, error in
     // handle result
}
[[Qonversion sharedInstance] attachUserToExperiment:@"your_experiment_id" groupId:@"your_group_id" completion:^(BOOL success, NSError * _Nullable error) {
    // handle result
}];
Qonversion.shared.attachUserToExperiment("your_experiment_id", "your_group_id", object : QonversionExperimentAttachCallback {
    override fun onSuccess() {
        // handle success
    }

    override fun onError(error: QonversionError) {
        // handle error
    }
})
Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id", new QonversionExperimentAttachCallback() {
    @Override
    public void onSuccess() {
        // handle success
    }

    @Override
    public void onError(@NonNull QonversionError error) {
        // handle error
    }
});
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
Qonversion.GetSharedInstance().AttachUserToExperiment("your_experiment_id", "your_group_id", (success, error) =>
{
    // handle result
});
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
  • In case your user has already been attached to another experiment, use the detachUserFromExperiment method.
Qonversion.shared().detachUser(fromExperiment: "attached_experiment_id") { success, error in  
    // handle result  
}
[[Qonversion sharedInstance] detachUserFromExperiment:@"attached_experiment_id" completion:^(BOOL success, NSError * _Nullable error) {
    // handle result
}];
Qonversion.shared.detachUserFromExperiment("attached_experiment_id", object : QonversionExperimentAttachCallback {
    override fun onSuccess() {
        // handle success
    }

    override fun onError(error: QonversionError) {
        // handle error
    }
})
Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id", new QonversionExperimentAttachCallback() {
    @Override
    public void onSuccess() {
        // handle success
    }

    @Override
    public void onError(@NonNull QonversionError error) {
        // handle error
    }
});
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
Qonversion.GetSharedInstance().DetachUserFromExperiment("attached_experiment_id", (success, error) =>
{
    // handle result
});
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
  1. Call the Qonversion remoteConfig method. Now Qonversion SDK returns data associated with previously set experiment and variant.
  2. Validate your app logic without starting the experiment.

πŸ“˜

Pay attention before release

Do not forget to remove the usage of the attachUserToExperiment method before your app release. Otherwise, all your users may be exposed to only one experiment group.

Segment your users

You have the following segmentation opportunities at your disposal:

  • App install date
  • App version
  • Country
  • Store
  • User's active subscription

Follow this guide to learn more.

3. Adjust traffic level

We do not recommend starting your experiments with 100% of all eligible users. It might be enough to start with 10% to ensure everything works fine and gradually increase your traffic level later.

4. Launch the setup

Once you have your experiment configured, segmentation, and traffic level set, it's time to start your experiment and proceed to the section with real-time analytics.