🚧 I'm developing and designing this site in the open. Learn more. 🚧

Mobile Downloads

In late 2016, Netflix enabled the ability for customers to download TV shows and movies onto their mobile devices to watch them offline.

After initially eschewing offline viewing1, leadership’s attitude started to shift after our global launch in early 2016. Our service was now available worldwide in countries where internet connections could be spotty, internet speeds could be painfully slow, cellular data costs could be prohibitively expensive, and the ability to watch shows offline seemed like table stakes for any streaming video service that wanted to be successful.

I was part of the team that researched, conceptualized, designed, and ultimately launched Netflix Downloads to tens of millions of customers throughout the world. My role spanned everything from conceptualization, strategy, and ideation to customer research and prototyping.


We suspected that while downloads would most likely be a popular feature in some markets, in others it may not see as much use, so we wanted to balance discoverability and usability without unnecessarily increasing the complexity of our relatively simple UI.

With this in mind, our early explorations centered around ways to minimize the presence of download icons throughout our UI, however, through research found that having the download icons in obvious places was best for most of our members and didn’t seem to detract from the overall UI.

Prototype Development

I built several different prototypes for this project, but the final prototypes were developed in vanilla Javascript, HTML, and CSS running inside of a native iOS wrapper (written in Swift) to give it the appearance of a native iOS application.

Additionally, I included a configuration screen that the moderator conducting our user research interviews could use to vary different aspects of the experience.

As part of this project, I wrote a little method that gave the illusion of the time an actual download might take. Here’s what it looked like within the prototype:

Video of simulated download progress.

Here’s example code to show how it was done:

// Initial progress is 0
var progress = 0; 
// Generate a random integer
var getRandomInt = (min, max) => Math.random() * (max - min) + min;
// Start a new interval timer
var downloadTimer = window.setInterval( () => {
    // Update the progress every 2 seconds
}, 2000);

// Method to update progress
var updateDownloadProgress = () => {
    var newProgress = progress + getRandomInt(0, 0.06);
    if(newProgress < 1) {
        // Our download is still in progress...
        // Update the progress
        progress = newProgress;
    } else {
        // Set progress to 1
        progress = 1;
        // Download complete, stop the interval timer
    // Log the progress for testing purposes

To make the progress appear longer (to simulate a worse internet connection), either reduce the max value for getRandomInt() or increase the interval timer.


While this wasn’t a traditional A/B test, we did see very high engagement with the downloads feature in the regions where we though it would have the largest impact and, to some surprise, we even higher engagement in some of the markets where we didn’t expect to have as much impact. As I stated above, this feature seemed like table stakes in many markets and so it served to position our service favorably in those markets.

  1. Netflix shuts the door on offline playback: ‘It’s never going to happen’ ↩︎