Product Marketing

Aampe for streaming video apps: solving the problem of decision paralysis in content-rich UIs

Aampe turns content streaming apps into a UI that responds to user preferences.

Schaun Wheeler
October 23, 2021
9 MIN READ

Looking at a bunch of advertisements from the early days of television, it’s remarkable how little the value proposition for in-home video entertainment has changed over time. Sure, the screens we use now are either somewhat smaller or much, much bigger than what people had in the 1950s, and we don’t have to deal with all the knobs and rabbit-ear antennas. Most of us probably don’t watch our shows while sitting on a floral-pattern sofa and wearing a three-piece suit or a house dress...unless you’re making a few bucks on the side by live-streaming your tv-watching on Twitch.

The experience is different but the value is very much the same. One of the old advertisements boldly proclaims: “A season pass to baseball!” Or football (Association or U.S.), or basketball, or ice hockey, or mixed martial arts, or...any other sport that you can now watch when and where you want instead of buying tickets and planning a trip to a stadium. In the words of another advertisement, the entire experience is “designed for your home!” Or work. Or commute. And what if you like sports but your partner likes classics and your kids like cartoons? “TV happiness shared by all the family!” Or friends. Or co-workers. In the words of an old Motorola TV ad: "Whether it's a party for your friends or just a quiet evening at home...your [device] will add plenty of pleasure with it's variety of entertainment. Drama, music, sports and educational programs...all these are yours."

Video streaming apps, like their analog predecessors, provide a whole pile of different entertainment experiences to cater to every preference and schedule, all at a low cost in both relative terms (it’s less pricey than going to a live performance or even a movie theater) and in the absolute sense (some apps even offer their content for free). We watch on our phones instead of on the living-room TV set, but we’re still watching for the same reasons.

Decision paralysis breaks app experience

At least one thing, though, certainly has changed: we have many, many more options than we used to. This is a boon for us users and the bane of all entertainment streaming apps. The same delightful super-abundance that draws users to these apps also paralyzes them when they go to make a viewing choice. Do you want to watch a drama? Or maybe a comedy? Or maybe you want to watch something filmed fairly recently, no matter the genre? Maybe you’d like to watch what’s popular right now, or what’s related to the last few things you watched?

This is, fundamentally, a UI problem. As an app developer, you only have so much real-estate available on any given screen. On a mobile device, you’re especially limited. So you try to organize the content for easy discovery, but you have so much content and so many ways to organize it that you can only put an infinitesimally small amount of it in front of the user, who ends up seeing something like this:

That’s the reality of what you present in a reasonable UI. Unfortunately, this is the reality of your user’s preferences:

If your user can’t find, on your app, the one thing they didn’t know they wanted, they will go to a different app, or do any of the other non-app things they do in their lives. You’ll lose them, not because your content was a bad fit for their preferences, but because both your content and their preferences were too diverse for them to efficiently find a match between the two. Their attention timed out.

That’s a UI problem. But you won’t fix the problem by improving your app flow or individual screens. You fix the problem by proactively delivering to the user content that matches their preferences. The solution to your problem isn’t to be found in navigation. It’s to be found in messaging. Your app notifications are the only proactive part of your app. They’re the only tool that lets you reach out to individual users and say, “here’s something we think you want.”

That raises another important question: how do you figure out what each user wants?

Recommendations aren’t preferences

A standard way to solve this problem is through a recommender system. It’s not a great solution, for more reasons than we can conveniently go into here. Here, we’re going to delve into only one reason why it’s generally difficult to decide what someone wants to watch next given what they’ve watched in the past. To illustrate our point, we’ve taken some data about viewing options from Pluto.tv, a streaming service that offers free TV and movie content both on a schedule as well as on-demand.

On first thought, the problem of recommending new content might seem almost simple: figure out what show a user watches most, figure out what genre that show belongs to, and suggest that they watch another show of that same genre. This seems like a very reasonable approach until you think about what an actual, individual user’s viewing habits could look like:



Each block in the chart is one show watched by a single (simulated) user account, and the blocks all add up to 100% of that account’s watchtime. If we’re trying to take our “simple” approach, what genre do we pick? The most-watched show is “Kid Animation”, and the “Kids” genre does make up about 30% of the accounts watchtime...but that’s only 30% of the total. Moreover, that one most-popular show is really not much more popular than the most popular shows from the New & Opinion and Reality genres. 

Does it make sense to pick a most-watched channel when several not-most-watched channels are practically just as popular? An even more important question: are users more likely to watch more of what they already watch a lot, or watch more of what they already watch less of, or start watching some of what they haven’t yet watched at all? Maybe this user watches as much Kids programming as they really want to. (Or: maybe this user’s kids watch the “Kids” programming and they’re already using all of the screen time their parent allows). This user has presented us with dozens of different bets we could make about the next show they’ll want to watch. There’s no good way to pick only one of those bets.

This problem doesn’t really get any simpler when dealing with a simpler viewing pattern. Take a look at this one:


There are only four genres represented in this user’s history, and one single channel accounts for a full 50% of this user’s watchtime. Even then: there’s still the other 50% from which we could pull a recommendation. Does this user really want more Classic TV? Or have they binged enough of it that they really want something different?

And these are just questions about content. We’re talking about making recommendations, which means we have even more questions we need to answer:

  • What time of day and day of week is a user most likely to watch? The right recommendation sent at the wrong time is still a bad recommendation.
  • What time of day and day of week is a user more likely to respond to a notification? This might be different from when they are likely to watch.
  • How many times does a user need to be notified before deciding to follow a suggestion? If we send and they don’t respond, that doesn’t necessarily mean failure. Maybe they just need to be reminded.
  • Is a user more or less likely to watch something new after doing something specific in the app? Users aren’t operating in a vacuum. Other behavior in the app might be just as important as the details of the content.
  • What if other show details (release year, director, actors, rating, etc.) matter more than the genre? We’ve picked only one attribute of the content. There are lots of attributes.
  • In what ways could the message copy matter? Even if we get the content and the timing right, there’s still the question of how we frame the recommendation - the format, tone, and other aesthetic choices we need to make in order to actually deliver a message.

Here’s the takeaway: historical, organic behavior only tells us what has happened in the past - it doesn’t give us reliable guidance on what we should do in the future. It’s not a good basis for recommendations. This is a problem with machine learning in general.

Don’t mine data - manufacture it

If you want to get the right content to the right user at the right time, here’s what you need to do:

  • Test every content attribute. Look at category, director, year, actor, length, on-demand vs live - all of the ways content can vary,
  • Test every possible timing in sending the content. Look at day of week and time of day, of course, but also look at reminder frequency and time elapsed after triggering events.
  • Test different ways of framing the message - tone, presence or absence of content details, incentives or value propositions, etc.
  • Evaluate each test in terms of actual watch events (or add to watch list, or add to favorites - all the things that are so much more informative and relevant to your business than just notification clicks.
  • Use the tests to determine individual preference - not just segments - and automatically send users notifications based on preferences learned from previous tests.
  • Constantly and automatically update preference metrics based on new tests.

That may sound hard. It is - we can personally attest to how difficult it was to make it easy for you to do all of these things. Do you know what’s really hard? Building an app that allows users to engage with hundreds or even thousands of different entertainment choices when and where they want it. That’s hard. In fact, it would be impossible for any user to do that without the systems you provide. Those systems make it easy for users to get the content they want...if they can find it. Aampe’s systems make it easy for you to let users find what they want. The hard work is already done - we already did it for you:

  • Integrate your app events data with Aampe with no SDK and no engineering time beyond scheduling a daily data transfer.
  • Message users using whatever system you already use - anything from Braze to Firebase - just by passing the API credentials.
  • Select goal events for our learning system to focus on with literally a single click. No complicated workflows where you have to decide which users get which messages. You tell us what you want, and our system learns how to get it for you.
  • Create campaigns that last: specify what a user needs to be done to enter a campaign, and what the goals of the campaign are, and we’ll move users in and out of the campaign over time depending on what criteria they meet. 
  • Pull all of your create app content into our Composer tool to automatically generate hundreds or even thousands of on-brand messages in minutes. Further expand your message library by easily creating copy snippets that we’ll automatically mix and match to keep your communication with your customers fresh and relevant.
  • You don’t have to set up A/B tests, let alone make sense of the results. Our system automatically selects notification timing, content, and copy variants to test, assigns users to those tests in a way that balances learning new things with acting on what we’ve already learned, runs the tests, and distills the findings into scores that fully personalize our next messaging choices. 

This process actively creates the data you need to get the right content to the right user at the right time. With Aampe, you own the data-generating process: you tell the system what you want to learn about, and the system creates situations where users can teach you.

Aampe allows your app to listen to each and every user. After it listens, it learns. After it learns, it responds. That’s what will get your users to pay attention to your app: without having to say anything, they’ll get the content they want, when they want it.