Note:

This article is part of a series about optimization and testing ideas for mobile apps.

Mobile users download apps to make their lives easier or more enjoyable, and with so many apps out there, they have pretty high standards. 80-90% of apps are downloaded by apps and eventually deleted by users. Common reasons for users becoming disengaged or uninstall an app include: difficult to use, bad user interface, and performance and stability.

Flurry did a study in 2012 of 230,000 apps shows how often apps are used (frequency) compared to how long consumers continue to use them over time (retention). Retention and frequency are both valuable goals to track.

                                            Source: Flurry

Testing out the best way to re-engage users in your app is a great way to increase retention in your app. In this article, we'll cover several ways to re-engage your users by testing:

  • Recurring key actions
  • Homescreen messaging
  • Recent activity
  • Showcase new features
  • Red badge notifications
  • In-app promotions

Recurring key actions

Testing your recurring key actions will help you figure out how to get users to come back to your app -- so that it becomes ingrained in their everyday lives. Apps like Facebook have their users coming to check the app everyday; below is a test idea to help create similar behavior. Happify has an assessment that you fill out every 2 weeks to track your “Happiness” progress.

Metrics to track: Track the number of times users come back to perform the key action.

Idea #1: Test out how often you want users to complete a task. In the case of Happify, they might want their customers to take the assessment every week rather than every 2 weeks. Testing can help Happify find the optimal frequency to ask users to take an assessment in the app.

Idea #2: In the case of Happify, they do a check-in where you have to fill out an assessment as a key activity. However, the recurring key activity does not necessarily need to be taking an assessment. Another test idea includes trying out different key activities such as games, having users complete a task that increases happiness, or a combination of the two.


 

Homescreen messaging

Personalize homescreen messaging to encourage users to come back to the app. On such a small screen, the homescreen is key real estate and often will be the first thing that people see on the screen when someone comes back to the app.

Metrics to track: Track the number of times users come back to perform the key action, track the number of times a user navigates away from the homescreen.

Idea #1: Test out different messaging on the homescreen. This is an opportunity to move beyond simple “Welcome” messaging and try other messages encouraging users to take key actions, including:

  • “Where do you want to fly?”
  • “Book your next trip”

 

Recent activity

A popular area to test in apps is what default screen is shown. Product managers will often create this test in different forms including for real estate apps testing out whether the default view should be a list view, grid view, or even a map view of all the houses available on the market. In the Skype app, the first thing that is shown by default is recent activity. Skype has a number of screens that can be shown by default including people recently called, favorite people to call, and people (a list of contacts).

Metrics to track: Track the number of times that people make calls from each screen.

Test Idea #1: Test out what screen users land on when they return to the app. You might find that users make more calls if the favorites screen is shown by default.

 

Showcase new features

A common way to keep users engaged in the app is to deliver new features that users can utilize to keep the app fresh. One example of how you can help promote these new features to users is with in app messaging. Spotify released a new feature to adjust a song’s tempo based on how fast you’re running.

Metrics to track: Track how many times the new feature is used.

Test idea #1: Test out the messaging you use to highlight a new feature to your users. Other messaging you could try in this app includes:

  • “Stay strong and carry on with Spotify’s new feature: running”
  • “Every song matches your tempo. Run with Spotify.”

 

Red badge notifications

Often in apps you’ll notice they use red badges to notify users that there have been updates. The definition of “update” can be a subjective one - one that is determined by the developer or product manager. Apps such as Quora often have many updates that are updated frequently.

Metrics to track: Some key metrics to track include:

  • How often the app is brought to the foreground. 
  • If the badge is shown inside the app, track how often that screen appears (e.g. in the case of Glassdoor, the Job Feeds screen)

Test idea #1: See what happens when the red badge appears less frequently. The hypothesis is that sometimes people are less likely to go back into your app if they’ve seen too many red badge notifications. 

 

In-app promotions

In app promotions are a great way to surface personalized discounts that you may want to provide to your users to jump start engagement or monetization. For example, take QuizUp: they have a freemium model where gameplay is free, and you can pay to play more frequently or to add additional features or power ups.

Metrics to track: Key metrics to track include:

  • Track how often purchases are made
  • Revenue

Test idea #1: One idea is to test is to test out different discounts based on how often the user uses the app. If the user does not use the app often, try giving a steep discount. For users that use the app often, try giving fewer discounts (since the user is already using the app).

 

How to set up a re-engagement test in Optimizely

With the Visual Editor:

In Optimizely's Visual Editor, you can modify static copy. This will allow you to run your tests that modify your app homescreen or in-app messaging.

With Live Variables:

You can use live variables to test out how often you want people to perform a regular action in your app, personalized messages (including Welcome Back, <user name>), default screen shown (e.g. favorites instead of recent activity), or discount values for your promotions.

For iOS:

#import <Optimizely/Optimizely.h>

// This line defines an OptimizelyVariableKey called myGravityVariable
OptimizelyVariableKeyForString(personalizedMsg, @"Welcome back, ");

@implementation MyViewController

- (void) someFunction {
 // This line reads myGravityVariable and stores it in "personalizedMsgVariable"
 NSString *personalizedMsgVariable = [Optimizely numberForString:personalizedMsg];

 // Use new personalized message...
 self.welcomeText = [NSString stringWithFormat:@"%@%@", personalizedMsgVariable, name];

}

@end

 

For Android:

public class MyActivity extends Activity {

private static final String defaultPersonalizedMsg = "Welcome back, ";
private static LiveVariable<String> personalizedMsgVariable = Optimizely.stringVariable("PersonalizedMsg",defaultPersonalizedMsg);

public static void setPersonalizedMsg() {
   self.welcomeText = personalizedMsgVariable.get() + nameVariable;
}

 

With Code Blocks:

With Code Blocks, you can add code to include entirely new activities or features that you want to test out (e.g. in the Recurring activity example) or how often you want to update the red badge notification on your app icon.

 
Tip:

In this section, we provide templated code, which you can use for guidance as you’re thinking about how you would like to implement code blocks with Optimizely.


For iOS:

OptimizelyCodeBlocksKeyWithBlockNames(recurringKeyActionBlocksKey,
                                    @"recurringKeyAction1",
                                    @"recurringKeyAction2");

@implementation MyViewController

- (void) someFunction {

    // This line defines Code Blocks "recurringKeyAction1", 
    // "recurringKeyAction2", and a default block that is 
    // executed in the case that the experiment is
    // not activated.
    [Optimizely codeBlocksWithKey:recurringActionBlocksKey
                       blockOne:^{
        // This block is executed when recurringKeyActionTest 
        // -> recurringKeyAction1
        [self performSegueWithIdentifier:@"recurKeyAct1" sender:self];
    }
                       blockTwo:^{
        // This block is executed when recurringKeyActionTest 
        // -> recurringKeyAction2
        [self performSegueWithIdentifier:@"recurKeyAct2" sender:self];
    }
                   defaultBlock:^{
        // This block is executed by default
        [self performSegueWithIdentifier:@"defaultRecurringKeyAction" sender:self];
    }];

 

For Android:
public class UserInputActivity extends Activity {
  private static OptimizelyCodeBlock form = Optimizely.codeBlock("Form").withBranchNames("recurringKeyAction1", "recurringKeyAction2");
  private void checkout() {
    // This line defines Code Blocks "recurringKeyAction1", 
    // "recurringKeyAction2", and a default block that is 
    // executed in the case that the experiment is 
    // not activated.
    Form.execute(new DefaultCodeBranch() {
            @Override
            public void execute() {
                // This block is executed by default
                goToDefaultActivity();
            }
        }, new CodeBranch() {
            @Override
            public void execute() {
                // This block is executed when myRecurringKeyActionTest
                // -> recurringKeyAction1
                goToRecurringKeyAction1();
            }
        }, new CodeBranch() {
            @Override
            public void execute() {
                // This block is executed when myRecurringKeyActionTest
                // -> recurringKeyAction2
                goToRecurringKeyAction2();
            }
        });
  }
}

 

 
Tip:

If you use code blocks to insert the major features you want in your new onboarding, you can use the Visual Editor from there to make copy, color, and layout changes for views that have been added via code blocks. In order to make visual changes to those code blocks, simply select the code block that you want to show in your variation in the drop down, and then switch back to the Visual Editor to make the visual changes in your code block.


Targeting

When thinking about targeting conditions for your promotions, you might want to test different audiences such as if a user is new vs. returning customer. You can use custom tags to target different forms to different users. This requires code to be added to the app prior to releasing to the app store and play store.

Goals

When you test how often users return to your app, you can use custom events to track often users are performing a certain action in your app (iOS | Android). Examples include tracking when a user performs a key action, when a user foregrounds the app, when a user accesses a new feature.

Another important goal to track (especially if you would like to track how discounts affect purchases) is revenue (iOS | Android).  This code code can be added when a confirmation screen is shown to the user.

For iOS:

- (void)purchaseConfirmation:(id)sender {
   [Optimizely trackRevenue:price * 100];
   //The rest of your handler
}

For Android:

private void userCompletedPurchase() { 
   Optimizely.trackRevenue(price * 100)); 
   //The rest of your handler 
}