APIs for Internal Audiences - Netflix - App Dev Conference


Published on

API programs, typically thought of as a public program to see what public developer communities can build with a company's data, are becoming more and more critical to the success of mobile and device strategies. This presentation takes a look at Netflix's and NPR's strategies that lead to tremendous growth and discusses how Netflix plans to take this internal API strategy to the next level.

1 Comment
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • To demonstrate the importance of knowing your audience when offering an API, I will be drawing from my current Netflix experience as well as from NPR, my previous employer. Although these two cases may not represent all companies, I do believe that they jointly offer a perspective that is useful when considering API development and strategy.
  • The NPR API has several distinct audiences. By the time I left NPR a year ago, the public developer community occupied the overwhelming number of API keys, but represented a sliver of the overall API consumption, as measured by API requests. The inverse is the case, however, for internal NPR development teams.
  • The great number of public developers have produced a wide range of apps on a range of platforms. All of them, in total, account for a very small percentage of the overall consumption.
  • Comparing this to Netflix, the distribution on both charts is basically the same, with two differences: 1. Netflix has a lot more API traffic. 2. The distribution is more extreme
  • Similarly, Netflix has a public developer community, which was the target audience for the API when it launched (we called this the “let 1,000 flowers bloom” model). In fact, when the API first launched, 100% of its traffic came from the flowers.
  • Over time, however, devices started to consume the API. Now we have hundreds of devices running off of the API. The 1,000 flowers are still there, but today, they account for less than .3% of the total API traffic, as measured by requests.
  • For NPR, we were able to grow the overall page view growth by 100% in a single year. Over 80% of that growth was due to API-enabled mobile products. The development of the mobile products would have been much more difficult without the API. This kind of growth would not have been possible without the API.
  • Similarly, Netflix’s growth chart goes up and to the right. But again, the numbers are bigger and the growth more extreme. In 18 months, the Netflix API grew by more than 50x. This growth can be attributed to an increase in devices using the API, an increase in adoption of those devices by Netflix customers, an increase in Netflix customers, and a changing request pattern for some of those devices to better serve our customers. So, the API growth is a proxy for the growth of the Netflix streaming service. Without the API, the growth of the Netflix streaming service likely would have been much less dramatic.
  • These metrics demonstrate that the API world for many companies is similar to an iceberg. Public APIs represent a relatively small percentage of the value for the company, but they are typically the most visible part of the API program. They equate to the small part of the iceberg that is above water, in open sight. Conversely, the private APIs that drive web sites, mobile phones, device implementations, etc. account for the vast majority of the value for many companies, although people outside of the company often are not aware of them. These APIs equate to the large, hard to see mass of ice underwater. In the API space, most companies get attracted to the tip of the iceberg because that is what they are aware of. As a result, many companies seek to pursue a public API program. Over time, however, after more inspection into the value propositions of APIs, it becomes clear to many that the greatest value is in the private APIs.
  • From the iceberg theory, the key takeaway from these metrics is to understand your audience. From that, many other questions surface, but the answers to them are much clearer if you know who your audiences are. Whichaudiences are the top priorities?How should you design your organization to satisfy these audiences?What is your resource allocation going to be for each audience? What expectations are you setting for each of these audiences?Howwill the audience prioritizations influence the design of the API?
  • For Netflix, the internal development teams who build and/or manage the Netflix-branded device implementations are very clearly the top priority.
  • This overwhelming priority has a tremendous affect on the Netflix engineering organization. Here are a few examples of the devices that are built/managed by internal Netflix teams. There are several distinct teams who build/manage the development for the hundreds of device implementations in the marketplace.
  • Those device implementations have a range of metadata about movies and TV shows that they need in order to create rich experiences to the users. That information is managed by a range of internal engineering teams. Some of these teams manage databases with movie metadata or user information, while others handle complex algorithmic data, such as movie recommendations, etc.
  • The API sits in between those two groups of engineering teams, drawing the information from the metadata/algorithm teams and delivering it to the various devices.
  • The API sits very much in the critical path of the overall Netflix streaming service. As a result, the API is in the DNA of the Netflix engineering culture.
  • The great thing about the API is that it is central to the Netflix streaming service. The issue, however, is that the current API is still designed for its original audience (the public developer community). In other words, even though the API is proving to be very successful, it is not designed for the highest priority audience.
  • In essence, while the current API is capable of serving us in the way we need, it is no longer the best tool for the job. This is especially the case as the streaming service grows and expands to new international regions. We believe we can do much better with a new API that is designed for the future of Netflix.
  • We already talked about the tremendous growth in API requests…
  • Metrics like 1B requests per day sound great, don’t they? Many companies would love to see numbers like this. The reality is that this number is concerning…
  • For a web site like NPR’s, it would be tremendous to have 1B requests per day (or per month). Growing request counts for web sites can produce great opportunity for ad impressions which translates directly into revenue.
  • But the output of an API looks more like this…
  • Or this…For APIs, ad impressions are not part of the game. As a result, the increase in requests don’t translate into more revenue. In fact, they translate into more expenses. That is, to handle more requests requires more servers, more systems-admins, a potentially different application architecture, etc.
  • As a result, we are challenging ourselves to redesign the API to see if those same 1B requests per day could have been 100M per day, or perhaps even less. Through more targeted API designs based on what we have learned through our metrics, we will be able to reduce our API traffic as Netflix’ overall traffic grows.
  • Because of itsgranular REST-ful resource model, the current Netflix API model requires a many devices to call these resources individually, often in a synchronous manner. To load a device screen, it often requires a dozen or more requests across the network. The problem is that the network transaction is often the most expensive part of the transactions, so the more requests to the API from the device, the slower the load times for the devices screens.
  • In the new model, we will be changing our approach to solve this problem, moving away from traditional REST approaches. Ideally, the devices will be making just one request to the API servers to get everything it needs. The API will scripting tier then explode the one request into the many needed to get the data. Once the data is captured by the API from these various servers, the API will deliver the output back to the device in a single payload. There are a range of benefits from this scripting tier, as follows: 1. It allows us to have one network transaction with the majority of the work happening on the server rather than across HTTP. 2.It allows for dynamic updates to API interactions, which enable faster innovation as the scripts will be managed by the UI teams and dynamically compiled into the JVM. 3. It allows for very targeted payloads for each API call to diminish byte counts. 4. It allows each device to take advantage of its own capabilities without being constrained by generic API modeling. 5. It allows for easy development of custom formatting that may be specific to devices.
  • Today, the Netflix API is among the leaders in the API Billionaires Club, a growing list compiled by John Musser of ProgrammableWeb.com.
  • Our goal, if we are successful in changing the interaction model between the devices and the API, is to no longer be part of that club.
  • If we achieve that goal, all of our devices should run much faster.
  • Which, in turn, will help keep our customers happy.
  • APIs for Internal Audiences - Netflix - App Dev Conference

    1. 1. APIs for an Internal Audience By Daniel Jacobson @daniel_jacobson djacobson@netflix.com From the App Dev Conference Santa Clara, CA October 27, 2011
    2. 2. NPR API Requests by Audience
    3. 3. The NPR API Powered Products
    4. 4. Netflix API Requests by Audience
    5. 5. Netflix API
    6. 6. Netflix API
    7. 7. How does this translate into value?
    8. 8. NPR API : Page View Growth
    9. 9. Netflix API : Requests Per Month 35 30Requests in Billions 25 20 15 10 5 - Jan-10 Feb-10 Mar-10 Apr-10 May-10 Jun-10 Jul-10 Aug-10 Sep-10 Oct-10 Nov-10 Dec-10 Jan-11 Feb-11 Mar-11 Apr-11 May-11 Jun-11 Jul-11
    10. 10. What does all of this mean?
    11. 11. Public APIs Private APIs
    12. 12. Netflix API Requests by Audience
    13. 13. Personaliz Movie Movie Similar A/B Test ation User Info Reviews Engine Metadata Ratings Movies Engine
    14. 14. APIPersonaliz Movie Movie Similar A/B Test ation User Info Reviews Engine Metadata Ratings Movies Engine
    15. 15. APIPersonaliz Movie Movie Similar A/B Test ation User Info Reviews Engine Metadata Ratings Movies Engine
    16. 16. Netflix API
    17. 17. Redesigning the Netflix API
    18. 18. Key Goals of API Redesign• Improve performance of devices – Reduce API transactions – Reduce payload size• Improve ability to rapidly innovate on devices – Put the API in the hands of the UI teams
    19. 19. Netflix API : Requests Per Month 35 30Requests in Billions 25 20 15 10 5 - Jan-10 Feb-10 Mar-10 Apr-10 May-10 Jun-10 Jul-10 Aug-10 Sep-10 Oct-10 Nov-10 Dec-10 Jan-11 Feb-11 Mar-11 Apr-11 May-11 Jun-11 Jul-11
    20. 20. Growth of the Netflix API Over 1 Billion requests per day (Peaks at about 20,000 requests per second)
    21. 21. <catalog_titles> <number_of_results>1140</number_of_results> <start_index>0</start_index> <results_per_page>10</results_per_page> <catalog_title> <id>http://api.netflix.com/catalog/titles/movies/60021896</id><title short="Star" regular="Star"></title> <box_art small="http://alien2.netflix.com/us/boxshots/tiny/60021896.jpg" medium="http://alien2.netflix.com/us/boxshots/small/60021896.jpg" large="http://alien2.netflix.com/us/boxshots/large/60021896.jpg"></box_art> <link href="http://api.netflix.com/catalog/titles/movies/60021896/synopsis" rel="http://schemas.netflix.com/catalog/titles/synopsis" title="synopsis"></link> <release_year>2001</release_year> <category scheme="http://api.netflix.com/catalog/titles/mpaa_ratings" label="NR"></category> <category scheme="http://api.netflix.com/categories/genres" label="Foreign"></category> <link href="http://api.netflix.com/catalog/titles/movies/60021896/cast" rel="http://schemas.netflix.com/catalog/people.cast" title="cast"></link><link href="http://api.netflix.com/catalog/titles/movies/60021896/screen_formats" rel="http://schemas.netflix.com/catalog/titles/screen_formats" title="screenformats"></link <link href="http://api.netflix.com/catalog/titles/movies/60021896/languages_and_audio" rel="http://schemas.netflix.com/catalog/titles/languages_and_audio"title="languages and audio"></link> <average_rating>1.9</average_rating> <link href="http://api.netflix.com/catalog/titles/movies/60021896/similars" rel="http://schemas.netflix.com/catalog/titles.similars" title="similars"></link> <link href="http://www.netflix.com/Movie/Star/60021896" rel="alternate" title="webpage"></link> </catalog_title> <catalog_title> <id>http://api.netflix.com/catalog/titles/movies/17985448</id><title short="Lone Star" regular="Lone Star"></title> <box_art small="http://alien2.netflix.com/us/boxshots/tiny/17985448.jpg" medium="http://alien2.netflix.com/us/boxshots/small/17985448.jpg" large=""></box_art> <link href="http://api.netflix.com/catalog/titles/movies/17985448/synopsis" rel="http://schemas.netflix.com/catalog/titles/synopsis" title="synopsis"></link> <release_year>1996</release_year> <category scheme="http://api.netflix.com/catalog/titles/mpaa_ratings" label="R"></category> <category scheme="http://api.netflix.com/categories/genres" label="Drama"></category><link href="http://api.netflix.com/catalog/titles/movies/17985448/awards" rel="http://schemas.netflix.com/catalog/titles/awards" title="awards"></link> <link href="http://api.netflix.com/catalog/titles/movies/17985448/format_availability" rel="http://schemas.netflix.com/catalog/titles/format_availability"title="formats"></link> <link href="http://api.netflix.com/catalog/titles/movies/17985448/screen_formats" rel="http://schemas.netflix.com/catalog/titles/screen_formats" title="screenformats"></link> <link href="http://api.netflix.com/catalog/titles/movies/17985448/languages_and_audio" rel="http://schemas.netflix.com/catalog/titles/languages_and_audio"title="languages and audio"></link> <average_rating>3.7</average_rating> <link href="http://api.netflix.com/catalog/titles/movies/17985448/previews" rel="http://schemas.netflix.com/catalog/titles/previews" title="previews"></link> <link href="http://api.netflix.com/catalog/titles/movies/17985448/similars" rel="http://schemas.netflix.com/catalog/titles.similars" title="similars"></link> <link href="http://www.netflix.com/Movie/Lone_Star/17985448" rel="alternate" title="webpage"></link> </catalog_title></catalog_titles>
    22. 22. {"catalog_title":{"id":"http://api.netflix.com/catalog/titles/movies/60034967","title":{"title_short":"Rosencrantz and Guildenstern Are Dead","regular":"Rosencrantz and Guildenstern Are Dead"},"maturity_level":60,"release_year":"1990","average_rating":3.7,"box_art":{"284pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/ghd/60034967.jpg","110pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/large/60034967.jpg","38pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/tiny/60034967.jpg","64pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/small/60034967.jpg","150pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/150/60034967.jpg","88pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/88/60034967.jpg","124pix_w":"http://cdn-7.nflximg.com/en_US/boxshots/124/60034967.jpg"},"language":"en","web_page":"http://www.netflix.com/Movie/Rosencrantz_and_Guildenstern_Are_Dead/60034967","tiny_url":"http://movi.es/ApUP9"},"meta":{"expand":["@directors","@bonus_materials","@cast","@awards","@short_synopsis","@synopsis","@box_art","@screen_formats","@"links":{"id":"http://api.netflix.com/catalog/titles/movies/60034967","languages_and_audio":"http://api.netflix.com/catalog/titles/movies/60034967/languages_and_audio","title":"http://api.netflix.com/catalog/titles/movies/60034967/title","screen_formats":"http://api.netflix.com/catalog/titles/movies/60034967/screen_formats","cast":"http://api.netflix.com/catalog/titles/movies/60034967/cast","awards":"http://api.netflix.com/catalog/titles/movies/60034967/awards","short_synopsis":"http://api.netflix.com/catalog/titles/movies/60034967/short_synopsis","box_art":"http://api.netflix.com/catalog/titles/movies/60034967/box_art","synopsis":"http://api.netflix.com/catalog/titles/movies/60034967/synopsis","directors":"http://api.netflix.com/catalog/titles/movies/60034967/directors","similars":"http://api.netflix.com/catalog/titles/movies/60034967/similars","format_availability":"http://api.netflix.com/catalog/titles/movies/60034967/format_availability"}}}
    23. 23. Improve Efficiency of API RequestsCould it have been 100 million requests per day? Or less? (Assuming everything else remained the same)
    26. 26. API Billionaires Club13 billion API calls / day (May 2011)Over 260 billion objects stored in S3 (January 2011)5 billion API calls / day (April 2010)5 billion API calls / day (October 2009)1 billion API calls / day (October 2011)8 billion API calls / month (Q3 2009)3.2 billion API-delivered stories / month (October2011)3 billion API calls / month (March 2009) Courtesy of John Musser, ProgrammableWeb
    27. 27. API Billionaires Club13 billion API calls / day (May 2011)Over 260 billion objects stored in S3 (January 2011)5 billion API calls / day (April 2010)5 billion API calls / day (October 2009)1 billion API calls / day (October 2011)8 billion API calls / month (Q3 2009)3.2 billion API-delivered stories / month (October2011)3 billion API calls / month (March 2009) Courtesy of John Musser, ProgrammableWeb
    28. 28. If you are interested in helping us solve these problems, please contact me at: Daniel Jacobson djacobson@netflix.com @daniel_jacobsonhttp://www.linkedin.com/in/danieljacobson http://www.slideshare.net/danieljacobson