Monday, 25 November 2013

Using Google Services To Grow User Retention

Brian Balfour recently wrote an interesting post about the measures startups use at different stages of growth. In the early days of building a startup its really important to have a regular stream of users trying our the application or service, and for a decent number of users to come back and continue using it.

Having decent retention makes it a lot easier to experiment. A group of real users to give feedback and spread word about your product is a worthwhile goal. Getting users to try an application is a pretty difficult thing, but the worst result is to have those users bounce having only scratched the surface of the product. If you get a user to the point of signing-in to your application, then its worth rolling out the red carpet to give them the best chance of having a good experience, and to give them opportunities to come back. One of the best things about using social sign-in like Google+ Sign-In is the access to services which you can use to enhance that out of the box experience. This post has a few tools that might help you do that.

Tailor the experience to the user

All too often, the user signs in and gets presented with a generic “trending” stream, "popular with other users", or worst of all, the blank screen! Particularly in the early days of an application you won’t have a lot of graph information, so users are unlikely to know other people on the service to help give them a good starting experience. That doesn't mean you can provide a compelling out of the box view of your application though, it just means you have to do a little more work to build your understanding of the user.

Using profile data

One of the first places to look is the users profile. If you have a signed-in user, calling the plus.people.get method with the user ID me will return the basic profile information. As well as the user's name, profile picture, and very coarse information like gender, it can contain many more hints that let you tailor your experience.

1. Language.

The users language seems like a simple thing, but if you have content that matches its a good idea to expose it. This can also be a helpful analytics tracking value - if you discover that you have a particularly high session time with users who speak a certain language or from a certain region, that can be an area worth investigating.

"language": "en_GB”

2. Places Lived

While not always set, this could give you some useful hints towards interest - if someone has set it, they are likely to be interested in information related to the area. This is just text, but if you need to turn it into a location for a GIS query of some kind then the Geocoding API from the Google Maps team can help you out.

"placesLived": [
  {
    "value": "Brentford, UK",
    "primary": true
  }
],

3. Organisations.

This field contains organisations that the user has worked for, or educational establishments the user has attended. Not every user will have this filled in, but you can see the type and name of each organisation if they have. Skillpages make great use of this to help pre-fill your work experience.

"organizations": [
  {
    "name": "University of Sussex",
    "type": "school",
    "primary": false
  },
  {
    "name": "Google",
    "title": "Developer Advocate",
    "type": "work",
    "startDate": "2012",
    "primary": true
  }
],

4. URLs.

This is one of my favourite sources of data, for two reasons. Firstly, it often allows you to link profiles - mine contains links to my profiles on Twitter and Github for example, which can be helpful for disambiguating. Secondly, this can be a strong interest indicator - if you see the user uses Github, for example, they’re probably technical.

"urls": [
  {
    "value": "http://twitter.com/ianbarber",
    "label": "ianbarber"
  },
  {
    "value": "http://github.com/ianbarber",
    "label": "Github"
  },
  {
    "value": "http://phpir.com",
    "label": "PHP/ir"
  },
],

You can also pick up some interesting data for personalisation based on who the user follows. Its easy to pick up a collection of popular pages, for example from somewhere like CircleCount’s World Google+ page rankings . This can be associated with primary topics in your system - even if its a manual process, it shouldn’t be more than a few hundred associations. Then, when you check who the user has in their circles, you can infer a topic interest if any of those should match.

Calling plus.people.list with user ID me and collection visible will return a list of circles (or the ones the user has shared with your application at any rate). You can even order by best, which will use Google’s affinity metrics to rank the profiles in importance for the user. The first page I followed in the best ordering that was also in the top 100 is The Economist, which probably says something about my taste.

{
  "kind": "plus#person",
  "etag": "\"QR7ccvNi-CeX9lFTHRm3szTVkpo/uqkY5m1P_OedARGohHeKOJMYgGU\"",
  "objectType": "page",
  "id": "100470681032489535736",
  "displayName": "The Economist .",
  "url": "https://plus.google.com/+TheEconomist",
  "image": {
    "url": "https://lh6..."
  } 
},

Using other APIs

Its not just about data available from Google+ API calls either. In my previous post I outlined how you could get Freebase topics from a user’s YouTube watch history or liked videos - this gives you some key themes to use to retrieve relevant content from your own app.

This kind of thing is easy to see as a fit for a content based app, like a music service or something inherently social, but look for opportunities in your own application space. If you’re building an accountancy app, why not ask for access to Google Drive and look for files in common formats you might be able to automatically process, for example.

Build in ways to bring your users back.

Once you provided a good out of the box experience, you want to build in hooks that will encourage your users to come back to your app and explore more deeply. Wherever you can, build this into the normal flow of your application experience.

If you have any sort of timed event, you could use the Google Calendar API in order to create an event with calendar.events.insert. This requires requesting an extra scope when implementing sign-in, but if your app has time-based functionality (for example for a second screen app when a certain TV show is on), this can be a way of being useful to the user, and simultaneously reminding them of your app. Flixster allows you to invite your friends to see a movie at a certain time using an interactive post - if they accept, all are added to a Google Calendar invite. This is useful, and naturally reminds users about Flixster just around when they’re going to see a new movie - which is precisely when they're most likely to rate & review.

You can also use direct notifications. Google+ Sign-In can gives you access to retrieve the user’s email address. You can then contact them directly - but particularly when starting out only play that card at the right time! Apps only have one or two chances with a user before they’re going to get judged as spam. Its vital to ensure that the email content is valuable to the user, timely in its delivery - so it feels motivated as a notification worthy event, and easy to consume.

Email can be made a lot more powerful by taking advantage of features like Gmail’s actions to allow the user to immediately do something with the notification. These can be even for authenticated actions, by passing one time tokens in the email itself.

If building on top of a mobile platform, you also have the options of adding push notifications. Firing user notifications has the same risks as email - if they're not useful you'll be facing a quick uninstall. Because notifications can be more intrusive, try to ensure they respect:

  1. The user - make sure its personalised to them!
  2. The user's timezone - don't push when they're asleep (ideally push when you've seen them use the app in the past).
  3. The user's location - make sure you're not pushing them something which they couldn't use in their wrong country.

Share the process with your users

One of the best things you can do, particularly in the early days, is to start a conversation with your users. When you’re experimenting you’re hoping to cause reactions, and you need to be able to easily here what your users are saying. A Google+ community is a great way to do that, and if you’re building an Android application you can actually use a community as a method for giving users access to beta test your application.

Having participated in a couple of these beta communities I can say confidently that problems that would have caused negative Play store reviews are picked up all the time - and instead of the result being an unhappy user and am uninstall, the result is a dedicated fan who feels like they’re participated in the process.