Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?

How to A/B Test in Nest.js with ConfigCat and Amplitude

A/B testing solutions the query: “Which of those variations will deliver me higher outcomes, A or B?”. It permits you to take a look at two variations of a web page to see which has a extra constructive affect. This might imply elevated sign-ups for a touchdown web page, extra purchases on an e-commerce retailer, and even smoother person processes in an app. All of it relies on what you need to enhance. How does A/B testing work although?

The A/B Testing Course of

A/B testing begins off with some evaluation. After analyzing information out of your web site, you discover a web page or a element which you can enhance. After you determine a method to enhance it, you implement the adjustments, however you do not instantly launch it to everybody since you’re unsure how they’ll reply to it. To restrict the danger of poor reception, you launch the change to a share of your customers.

One group of customers will see the present model of the web page, known as the management. The opposite group will see the brand new model, known as the variant. Whichever model makes essentially the most constructive affect will turn into the default model for all customers.

ConfigCat’s function flag service makes A/B testing simpler with percentage-based concentrating on. Share-based concentrating on permits you to break up your customers into teams and switch options on/off for the teams you need.

Fast refresher: Characteristic flags allow you to launch new options and alter your software program configuration with out (re)deploying code.

I will stroll you thru establishing an A/B take a look at in a Nest.js app with ConfigCat and analyze the ends in the Amplitude analytics platform. Let’s check out the app we’ll be testing.

Pattern app

Newsletter: control

I will run this A/B take a look at on a fictional scholar administration SaaS(Software program as a Service) platform. The platform has a e-newsletter that provides useful assets for educators, however the sign-up conversion fee is low. From my analytics dashboard, I discover I obtain about 1000 guests monthly, however solely about 20 individuals enroll. So I determine to run an A/B take a look at on the e-newsletter part’s heading. Particularly, I need to change the heading “Subscribe to Our E-newsletter” to “Get Unique Entry to Content material for Educators” to see if that may seize their curiosity and get them to enroll.

Newsletter: variant


If you wish to code alongside, you may want:

  • Node.js v16 or above
  • Some data of Nest.js and TypeScript or JavaScript
  • A Nest.js app linked to ConfigCat.

If you do not have a ConfigCat account, create one here, then observe the steps in this tutorial to attach ConfigCat to Nest.js.

The positioning runs on a Nest.js backend and a React frontend. I will concentrate on the Nest.js half as a result of that is the place a lot of the logic will reside. You’ll be able to see the complete source code of the app on Github.
Let’s examine arrange.

Splitting customers in ConfigCat

For this A/B take a look at, I need to do a 50-50 break up. To do that, I will go browsing to my dashboard and do the next:

  1. Click on the TARGET % OF USERS possibility on the function flag.
  2. Kind 50% into any of the packing containers.

Splitting users in ConfigCat
3 Save.

On the code aspect, we’ll want so as to add a novel person ID to the getValueAsync name. ConfigCat requires an ID for every person, so it will probably uniquely establish them throughout percentage-based concentrating on.

import { Injectable } from '@nestjs/frequent';
import * as configcat from 'configcat-node';

export class ConfigcatService {
  personal readonly configcatClient = configcat.createClient('YOUR-SDK-KEY');

  // I am utilizing a random userID to maintain issues easy. Use login IDs, and different distinctive values in manufacturing 
  personal userID = '343467';

  getFlagStatus() {
    return this.configcatClient.getValueAsync('newheading', false, {
      identifier: this.userID
  // I will use this later within the controller file
  getUserID() {
    return this.userID;
Enter fullscreen mode

Exit fullscreen mode

That is all we’ll want for each variations to go reside. Let’s hook up the app to Amplitude, so we are able to monitor the variety of clicks the “Subscribe” button will get after which analyze the outcomes.

Organising Amplitude

To attach the app to Amplitude you may want an Amplitude account. If you do not have an account, you’ll be able to create one here.

When creating a brand new account or a brand new Amplitude venture, you may want to pick out an SDK and log a take a look at occasion. Amplitude guides new customers via this step whereas signing up. Nevertheless, in case you’re an current person, you may should create a brand new venture to entry the SDK choice display screen. In your dashboard, navigate to Settings >> Initiatives and click on the “Create Undertaking” button.

SDK selection page

Since it is a Nest.js app, we’ll want the Node SDK. Choose the NodeJS SDK and observe these steps:

  1. Set up the Amplitude Node SDK.
npm set up @amplitude/node
Enter fullscreen mode

Exit fullscreen mode

2 Copy the code from the directions web page and paste it within the predominant.ts file to rapidly log the take a look at occasion. Take away the code from the file after Amplitude receives the occasion.

Sending Occasion Information to Amplitude

With the take a look at occasion out of the way in which, we are able to create our customized occasion:

  1. Create an Amplitude service file in your venture folder.
nest generate service Amplitude
Enter fullscreen mode

Exit fullscreen mode

**INFO: **This command will create an amplitude folder with an amplitude.service.ts file in it. It should additionally add the file to the suppliers array in app.module.ts.

2 Open amplitude.service.ts and add the next code:

import { Injectable } from '@nestjs/frequent';
import * as amplitude from '@amplitude/node';

export class AmplitudeService {
    personal readonly consumer = amplitude.init('YOUR-API-KEY');

    sendClickEvent(userID: string, flagValue: boolean) {

                event_type: 'Click on Subscribe', // occasion title
                user_id: userID,
                event_properties: {
                    newHeadingEnabled: flagValue
Enter fullscreen mode

Exit fullscreen mode

Within the snippet above, I created the occasion “Click on Subscribe” and gave it an occasion property newHeadingEnabled, which can maintain the worth of the function flag. Each time somebody clicks the button that triggers this occasion, it should ship the worth of the function flag to Amplitude.

NOTE: Each Amplitude venture has an API key, which you will discover below Settings >> Initiatives >> [Your Project Name]. Watch out to not use one venture’s API key for an additional.

For the ultimate step, I will import the Amplitude service within the app.controller.ts file and name the sendClickEvent technique when the frontend sends a POST request.

import { Controller, Get, Publish } from '@nestjs/frequent';
import { ConfigcatService } from './configcat/configcat.service';
import { AmplitudeService } from './amplitude/amplitude.service';

export class AppController {
  constructor(personal readonly configcatService: ConfigcatService, personal readonly amplitudeService: AmplitudeService) {}

  async getFlagStatus(): Promise<boolean> {
    const flagStatus = await this.configcatService.getFlagStatus();
    return flagStatus;
  // New code
  async handleClick() {
    const flagStatus = await this.configcatService.getFlagStatus();
    const userID = this.configcatService.getUserId();

    strive {
      this.amplitudeService.sendClickEvent(userID, flagStatus);
    } catch (error) {

Enter fullscreen mode

Exit fullscreen mode

The backend is totally arrange. Let’s briefly check out the frontend code that triggers the occasion so we are able to see the way it all comes collectively.

// different code...
operate submitForm(occasion) {
    const formData = new FormData();
    formData.append('electronic mail', electronic mail);

    strive {
    // name to the '/ship' route within the controller
      fetch('http://localhost:3000/api/ship', {
        technique: 'POST',
        physique: formData
    } catch(err) {
// remaining code right here
Enter fullscreen mode

Exit fullscreen mode

That is all of the code we’ll want for the A/B take a look at. Let’s create a chart in Amplitude and see the outcomes.

Analyzing the Outcomes

Creating an Occasion Segmentation Chart

I will use an occasion segmentation chart to see what number of customers have clicked the enroll button.
In your Amplitude dashboard, do the next:

  1. Click on + New on the left sidebar.
  2. Choose “Evaluation”.
  3. Choose “Segmentation”.

You need to now see an space with enter fields:

Event segmentation input

I’ll add the “Click on Subscribe” occasion and filter it by the newHeadingEnabled property.
Take the next steps so as to add the occasion to the chart:

  1. Click on the “Choose Occasion” button and decide “Click on Subscribe” from the dropdown.
  2. Click on + the place and choose newHeadingEnabled.
  3. Choose a price there, both True or False.
    In the event you see solely one of many two values there, you’ll be able to manually add the opposite one.

Manual adding
4 Repeat steps 1 – 3 for occasion B, the second occasion on the record.

Events and filters selected

When you’re performed establishing the occasions, the outcomes will seem within the chart space beneath. Scroll right down to the chart space to see the outcomes.

Bar chart showing events

You’ll be able to see the variety of clicks for the occasion when the brand new heading is enabled and when it is disabled. Click on the “Uniques” button to see the variety of distinctive customers that triggered the occasion. You can even change the view to bar chart and examine the outcomes to the previous.

Choosing the profitable variation

The information simply began rolling in, so I will want extra time to see how each variations carry out earlier than I make my determination. For a extra high-level take a look at A/B testing and its greatest practices, take a look at this article.


Because the drive for development and enchancment will increase, A/B testing is a helpful software to have in your belt. Whether or not the outcomes of your checks are constructive or not, you’ll be able to simply toggle them with ConfigCat’s function flags. Iterate, experiment, and be taught extra about your customers’ preferences. ConfigCat helps easy function toggles, person segmentation, and A/B testing and has a beneficiant free tier for low-volume use instances or these simply beginning out.

Here is a fast recap of how I arrange the A/B take a look at:

  • break up customers into two teams within the ConfigCat dashboard
  • arrange the Amplitude SDK
  • arrange an Amplitude occasion with customized properties for the function flag
  • created an Occasion Segmentation chart
  • filtered the occasion with its customized properties


You’ll be able to keep updated with ConfigCat on Twitter, Facebook, Github, and LinkedIn.

Add a Comment

Your email address will not be published. Required fields are marked *

Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?