Improve Player Retention Reacting to Behavior [Server Scripts]

Published May 14, 2015 by David Xicota, posted by David Xicota
Do you see issues with this article? Let us know.
Advertisement
Picture this. After you've fought hard to release your game and you're lucky enough to get a pretty decent number of users downloading your game, they get tangled up in Level #8 and can't manage to get past it. According to your analytics service, they seemed to be enjoying the game so far, but now the users are logging in at a lower rate. You're losing active users. What's going on? There's no question they like your game. Why would they play up to Level #8 if they didn't? The thing is maybe you overestimated the user's ability to reach enough proficiency in the game to advance to further levels. Level #8 might be too difficult for most users and that's why they are no longer logging in to the game. Thus, you're losing users. There are many solutions to the problem. You could reduce the number of enemy waves, add player stamina, change the timing of the game or add more game levels before they get to Level #8, allowing users to be more game-savvy by then.

You do what you have to do

Ok, you decide to modify the game's parameters to ease it on your users so they keep on enjoying the game and choose to stay. Say you're a programming beast and that you're able to swiftly adjust the code and successfully test the game mechanics in one day. That's good and all but you still need Google Play or the App Store to approve it and publish it - a day for the former and a whopping 7 days for the latter. The lack of control over the response time for the in-game modifications hampers your ability to make the game progress. I don't want to be a bummer, but you're still losing users. Having passed the period of time for the changes to go live - which seemed longer than you care to admit - users still have to accept to download the latest version of the game. Some of them do it right away, some might do it at a later time... or never at all. After all that rush to get the newest version active, it is still up to your game users having the latest version if you want to see whether the fixes have a positive effect. Right, you continue losing users. It's really hard to get good feedback from the users - and react accordingly - when not all of them are running the latest version. water-slide.jpg

You can turn it around

The use of external servers to store game mechanics data is a rapidly increasing tendency among game developers. Offering flexibility and a quick response is key to be adaptable to the needs of your users. Imagine a service that cuts your response time to a minimum, gives uninterrupted game play to your users and lets you test different approaches at the same time.

Why store parameters in an external server

#1 Never let others dictate your response time Your response time shouldn't be much longer than what you spend on tweaking your code. Fixing it to have the changes go live barely at the same time, you'll be able to deliver a quicker response to your users' needs and keep them engaged. Getting user data faster allows you to decide if the changes came to effect or if you need another iteration of changes. #2 Don't annoy users with a game update download Having your users experience the updated game on-the-go releases their need to download any game updates manually. They'll always play the latest version of the game so you'll get very reliable user data because there won't be different versions running at the same time. #3 Find solutions on-the-go Upload different solutions to the same problem to simultaneously test which one performs better among users. Split testing subtle code differences will return twice as many data, which means reducing the time you spend to find the best adjustments for the game.

Server side scripts allow maximum configurability

Take this as an example. You could create a config collection in the server side to keep a simple config JSON. This would be the code for it. { "levels": { "1": { "difficulty": 1, "time": 60 }, "2": { "difficulty": 3, "time": 70 }, "3": { "difficulty": 5, "time": 80 }, "4": { "difficulty": 7, "time": 90 }, "5": { "difficulty": 9, "time": 100 }, }, "adsplatform": "iads", "coinseveryday": { "1": 10, "2": 20, "3":30, "4": 60, "5": 100 } } Every time a user opens a new game session you can check if this config has been changed or not. If it has, it'll start the download of the new game's config and will start using them right away. Besides, you can also implement A/B testing with one custom script very easily.
  • Create two or three JSON config samples in the collection.
  • Define a custom script - new server function - called getGameParameters.
  • Call this function every time a user logs in to your game.
This function will be a simple Javascript - using a round robin technique - that will decide what JSON has to be sent: A, B or C. This way the decision point is on server side, can be easily changed and you will be able to test different simultaneous configurations to get better results. Now you know you can improve user experience storing game mechanics in the server side, what other situations do you think you could use this for your game? I'd like to know! Leave a comment.

This was originally posted in Gamedonia blog.

Cancel Save
0 Likes 9 Comments

Comments

Krohm

I think this problem is very real and I'd sure appreciate reading some more elaborations.

May 14, 2015 07:16 AM
David Xicota

I think this problem is very real and I'd sure appreciate reading some more elaborations.

Are you using server scripts in some way to iterate your game, or plan to? I'd like to know if anyone is actually doing it.

May 14, 2015 08:05 AM
Programmer16

I think this problem is very real and I'd sure appreciate reading some more elaborations.

Are you using server scripts in some way to iterate your game, or plan to? I'd like to know if anyone is actually doing it.

This is basically the idea I have in the works for my game. The design is very difficulty-centric and the feedback I've received is basically it's hard to get going and then once you do it becomes too easy. Releasing lots of updates to try and adjust is simply too much of a pain, so I'm designing a configuration system that will download from a server.

The only things that I would note:

1. If your game is playable offline in anyway, make sure to cache the configuration locally.

2. You may want to give some sort of notice that things have changed (I plan on having a Configuration Version on the title screen.)

May 14, 2015 03:39 PM
David Xicota

1. If your game is playable offline in anyway, make sure to cache the configuration locally.

Spot on! I should've included this tip in the article, because I think it's an essential best practice.

2. You may want to give some sort of notice that things have changed (I plan on having a Configuration Version on the title screen.)

This is really up to you, but I personally wouldn't notice the player. Though, it could be very useful for you to store the info of what game version works best for you (and the players!) to make better design decisions moving forward.

May 14, 2015 04:05 PM
Krohm

I think this problem is very real and I'd sure appreciate reading some more elaborations.

Are you using server scripts in some way to iterate your game, or plan to? I'd like to know if anyone is actually doing it.

I'm not currently working on a game.

I have two projects from the past I'm still positive I'll complete. One of them might use difficulty adaptations. Main problem I have with them so far is making them work in terms of highscores as those modifications would in practice give an edge to a different class of players, making their scores not comparable...

Being a web game, it would be relatively easy for me to adjust but I'd be interested in knowing more about the data analysis. For example, I might want to compare the level run times. The amount of time between activations of a certain objects. How many "activation errors" (the game is skill based and actions can fail).

Perhaps I would just be interested in knowing more about the metrics I might consider.

I think I can say I'd want to "understand difficulty" better to understand where to operate before making the changes.

May 14, 2015 06:22 PM
David Xicota

High scores might be a concern. You might want to consider this though:

Is high score consistency more important for your game than providing a more enjoyable experience for a wider player base?

Food for thought.

May 15, 2015 08:05 AM
Krohm

It is indeed a very careful observation. For this specific case however I must keep them consistent or at least separated.

May 27, 2015 10:40 AM
J. Faraday

I am definitely going to implement this into the game I'm working on. This is a great idea! Thank you so much for sharing.

June 09, 2015 06:28 PM
David Xicota

I am definitely going to implement this into the game I'm working on. This is a great idea! Thank you so much for sharing.

Good!

It'd be really interesting to hear how is (has) the technique working for you when you actually use it in your game.

Drop by again when you've got any data, please? :-)

June 10, 2015 06:59 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement