(upbeat music)
Hi, I’m Dana Silver, a software engineer on Firebase Remote Config.
Remote Config, or RC for short,
allows you to remotely configure your app without performing a release.
RC gives you visibility and control over configurable values
so you can optimize your app.
It can be used to manage feature flags,
create targeted configurations for specific users,
run A/B tests, and much more.
I'm excited to share a new feature of RC
that helps developers like you personalize your apps
to create more engaging user-specific experiences.
You've likely heard of A/B testing. Maybe you already use it in your app.
A/B testing is a process of splitting your user base
into distinct groups, giving each group a different experience
and measuring their results to see which experience is best.
It's a great tool to try a few options
and find the experience that's best for the whole group.
What if you could find the best experience for each of your users individually?
And what if you could do it automatically
with no need to structure, analyze, or rollout an A/B test?
That's where personalization in Remote Config comes in.
Personalization predicts the best experience for each of your app’s users
and assigns that user to the experience expected to work best for them.
It really shines when different experiences are optimal
for different groups of users.
Let's walk through this feature to see how it works.
As you can see, I'm in the Firebase console
and I'm looking at my Remote Config Setup for my game, Bingo Blast.
Here, I can see the various RC parameters
that are controlling different app experiences,
as well as the conditional logic that sets alternative values.
I can use this page to configure all sorts of interesting app behaviors.
Now let's zoom into this parameter, ratings_prompt_min_completions,
which controls the placement of my Play Store rating prompt.
I want to show my ratings prompt at the right time to maximize my ratings.
Unfortunately, I don’t know when exactly I should show my prompt to make this happen.
If I show the ratings prompt as early as possible,
it will be seen by the maximum number of people,
but they might not have experienced enough of my game to feel inclined to rate it.
On the other hand, I could show the ratings prompt deeper in the game,
which could mean that fewer people see the prompt,
but they'd be more inclined to give me a rating.
In either case, I definitely don’t wanna hurt user engagement
with a poorly placed prompt.
I think that the optimal placement might actually be different for different users.
Some users might be ready to rate really quickly
and others might need more time to get into my game.
Ideally, I’d like to predict the best ratings prompt location for each user
and show it then.
And that's where personalization comes in.
To personalize a parameter, I start by clicking this Edit icon.
And now we can see the parameter details, including the parameter name, its description
and its default value.
This parameter sets the placement of the ratings prompt
and we can set it to display the prompt
right after the user successfully completes any number of levels.
Right now, it’s set to display after the user successfully completes their third level.
Now I'm going to personalize this parameter.
The first thing I need to do is set up the targeting conditions for the parameter.
I'll click here to add a value for a condition.
Since the Play Store ratings prompt applies only to my Android app,
I’m going to target my Android app for this personalization.
I'll name this condition AndroidApp and click Create Condition.
Now that the condition has been added to this parameter,
I need to set up the personalization details.
I can do that by clicking on this icon with a person surrounded by sparkles.
This opens up the dialog where I can set up the personalization details.
The top section is where I put in different alternatives
that I want to try for the ratings prompt.
I’d like to try a big range of different values that might work.
I’ll enter in one, four, and eight levels
to ensure that there is a big enough range to make a difference.
That might mean a user might see the ratings prompt
after one, four, or eight successful level completions,
depending on which one is predicted to work best.
Next I need to set up my objective.
For this personalization, I want to maximize the number of ratings I receive.
So I will select the review_dialog_accepted event as my objective.
There’s also an option to add a more complex objective
if I want to optimize for combinations of different factors
like simultaneously optimizing for revenue and user engagement.
In this case, I only care about the number of ratings I receive,
so I’ll keep the objective simple.
I'm also interested in what happens to user engagement,
but I don't want it to actually drive the optimization algorithm.
I just wanna see what happens with the various options.
So I’ll set up user engagement time as an additional metric
that I can view later when I'm looking at the results.
Okay, we're all ready to go now.
To start running the personalization, I need to first click Save on this dialog,
Update to save the changes to this parameter,
and finally Publish Changes to start personalizing.
At this point, my personalization will start trying the different alternative values
for the ratings prompt with different app users.
The personalization system scans my Google Analytics events
to keep track of which users received the different alternatives
and measure how many times the rating prompt dialogue received a positive response.
Over time, the algorithm learns which alternatives
tend to produce the best outcomes
and take into account user characteristics when choosing between the alternatives.
After about seven days, the personalization should be working at maximum effectiveness.
Let’s fast forward to that point & look at the results of my personalization.
So here we are back on the Remote Config parameter list view.
Looking again at the ratings prompt parameter,
I can see that a personalization is active thanks to the personalization icon.
I just need to click that icon to see the results.
Here we have the personalization results page.
It contains information about personalization performance.
Right at the top, we have a performance summary.
And I’m excited to see that personalization is outperforming my baseline by 13%.
This section also contains information about the personalization
so I can remember what I was trying to accomplish when it was started.
The baseline is a group of randomly selected users
that don't get an optimized parameter from the personalization algorithm.
Instead, they get a random algorithm from the alternatives I supplied earlier.
The baseline helps me understand what I’m gaining by personalizing this experience.
The baseline group is smaller than the personalized group,
so the results for the baseline group are scaled up to be comparable.
In the lower section, I can see a graph that visualizes the overall performance difference
in successful review dialog interactions
between the personalized group and the baseline group.
I can see that the personalized group is outperforming the baseline by 12.9% overall.
If I wanna see how performance is trending over time,
I can see the daily option here to select the daily chart.
It looks like my performance started out slower
and got better as time went by.
That makes sense, considering how the algorithm learns over time.
I can click at the top to switch between the overall objective
and the secondary metrics that I'm interested in.
In this case, I can check that user engagement
wasn't affected by personalizing the ratings prompt.
And after clicking that, I can see user engagement is flat.
That’s exactly what I was hoping for, so no concerns there.
One last thing I wanna check is the breakdown of the baseline values.
By clicking on this toggle at the bottom,
I can see how each of the alternatives fares individually.
It looks like there’s some variation in performance between the alternatives,
but the prompt appearing after eight completions
out-performs the other baseline options.
But I can see that this alternative isn’t as good as the personalized experience.
Showing the prompt at different times for different users
is the best strategy overall.
Now that my personalization is working well, I can keep it running indefinitely.
As time goes by, user behaviors might change,
but the personalized algorithm will continue to learn and adjust,
always trying to maximize my objective.
If I want to, I can come back to this page at any time
to check on the performance.
For any given problem, it's possible that personalization
won’t have much of an impact and that’s okay.
The best thing about personalization is you can quickly try many different things
and get great results without a lot of effort.
You can consider personalization for a lot of cases
when you might otherwise perform an A/B test.
For example, you could use personalization to set game difficulty,
to find the right discount percentage for a promotion,
or to set rewards or frequencies for video ads.
Remote Config's flexibility
lets you control nearly any aspect of your app's behavior.
The opportunities for personalization are nearly endless.
If you're already using Firebase Remote Config,
you can create personalization in the console.
If you're not using RC,
check out the Firebase docs for full setup instructions.
Thanks for listening and happy personalizing.
(upbeat music)