{"id":135072,"date":"2023-10-03T20:00:46","date_gmt":"2023-10-03T20:00:46","guid":{"rendered":"https:\/\/developer.apple.com\/news\/?id=l1ama3mw"},"modified":"2023-10-03T20:00:46","modified_gmt":"2023-10-03T20:00:46","slug":"small-but-mighty-how-plex-serves-its-global-community","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2023\/10\/03\/small-but-mighty-how-plex-serves-its-global-community\/","title":{"rendered":"\u201cSmall but mighty\u201d: How Plex serves its global community"},"content":{"rendered":"<div class=\"inline-article-image\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2023\/10\/small-but-mighty-how-plex-serves-its-global-community.jpg\" data-hires=\"false\" alt><\/div>\n<p>The team behind <em>Plex<\/em> has a brilliant strategy for dealing with bugs and addressing potential issues: Find them first.<\/p>\n<p>\u201cWe\u2019ve got a pretty good process in place,\u201d says Steve Barnegren, <em>Plex<\/em> senior software engineer on Apple platforms, \u201cand when that\u2019s the case, things don\u2019t go wrong.\u201d<\/p>\n<p>Launched in 2009, <em>Plex<\/em> is designed to serve as a \u201cglobal community for streaming content,\u201d says engineering manager Alex Stevenson-Price, who\u2019s been with <em>Plex<\/em> for more than seven years. A combination streaming service and media server, <em>Plex<\/em> aims to cover the full range of the streaming experience \u2014 everything from discovery to content management to organizing watchlists. <\/p>\n<blockquote class=\"article-quote\">\n<p>This allows us more time to investigate the right solutions.<\/p>\n<p><cite><\/p>\n<p>Ami Bakhai, <em>Plex<\/em> product manager for platforms and partners<\/p>\n<p><\/cite><\/p><\/blockquote>\n<p>To make it all run smoothly, the <em>Plex<\/em> team operates on a six-week sprint, offering regular opportunities to think in blocks, define stop points in their workflow, and assess what\u2019s next. \u201cI\u2019ve noticed that it provides more momentum when it comes to finalizing features or moving something forward,\u201d says Ami Bakhai, product manager for platforms and partners. \u201cEvery team has their own commitments. This allows us more time to investigate the right solutions.\u201d<\/p>\n<p>The <em>Plex<\/em> team iterates, distributes, and releases quickly \u2014 so testing features and catching issues can be a tall order. (<em>Plex<\/em> releases regular updates during their sprints for its tvOS flagship, iOS, iPadOS, and macOS apps.)<\/p>\n<p>Though <em>Plex<\/em> boasts a massive reach across all the platforms, it\u2019s not powered by a massive number of people. The fully remote team relies on a well-honed mix of developer tools (like Xcode Cloud and TestFlight), clever internal organization, Slack integration, and a thriving community of loyal beta testers that stretches back more than a decade. \u201cWe\u2019re relatively small,\u201d says Danni Hemberger, <em>Plex<\/em> director of product marketing, \u201cbut we\u2019re mighty.\u201d <\/p>\n<p>Over the summer, the <em>Plex<\/em> team made a major change to their QA process: Rather than bringing in their QA teams right before the release, they shifted QA to a continuous process that unfolds over every pull request. \u201cThe QA team would find something right at the end, which is when they\u2019d start trying to break everything,\u201d laughs Barnegren. \u201cNow we can say, \u2018OK, ten features have gone in, and all of them have had QA eyes on them, so we\u2019re ready to press the button.\u2019\u201d<\/p>\n<blockquote class=\"article-quote\">\n<p>Now we can say, \u2018OK, ten features have gone in, and all of them have had QA eyes on them, so we\u2019re ready to press the button.&#8217;<\/p>\n<p><cite><\/p>\n<p>Steve Barnegren, <em>Plex<\/em> senior software engineer on Apple platforms<\/p>\n<p><\/cite><\/p><\/blockquote>\n<p>The continuous QA process is a convenient mirror to the continuous delivery process. Previously, <em>Plex<\/em> tested before a new build was released to the public. Now, through Xcode Cloud, <em>Plex<\/em> sends nightly builds to all their employees, ensuring that everyone has access to the latest version of the app.<\/p>\n<p>Once the release has been hammered out internally, it moves on to <em>Plex\u2019s<\/em> beta testing community, which might be more accurately described as a beta testing city. It numbers about 8,000 people, some of whom date back to <em>Plex\u2019s<\/em> earliest days. \u201cThat constant feedback loop is super valuable, especially when you have power users that understand your core product,\u201d says Stevenson-Price.<\/p>\n<p>All this feedback and communication is powered by TestFlight and <em>Plex\u2019s<\/em> customer forums. \u201cThis is especially key because we have users supplying personal media for parts of the application, and that can be in all kinds of rare or esoteric formats,\u201d says Barnegren. <\/p>\n<blockquote class=\"article-quote\">\n<p>(CI) is a safety net. Whenever you push code, your app is being tested and built in a consistent way. That\u2019s so valuable, especially for a multi-platform app like ours.<\/p>\n<p><cite><\/p>\n<p>Alex Stevenson-Price, <em>Plex<\/em> engineering manager<\/p>\n<p><\/cite><\/p><\/blockquote>\n<p>To top it all off, this entire process is automated with every new feature and every new bug fix. Without any extra work or manual delivery, the <em>Plex<\/em> team can jump right on the latest version \u2014 an especially handy feature for a company that\u2019s dispersed all over the globe. \u201cIt\u2019s a great reminder of \u2018Hey, this is what\u2019s going out,\u2019 and allows my marketing team to stay in the loop,\u201d says Hemberger.<\/p>\n<p>It\u2019s also a great use of a continuous integration system (CI). \u201cI\u2019m biased from my time spent as an indie dev, but I think all indie devs should try a CI like Xcode Cloud,\u201d says Stevenson-Price. \u201cI think some indies don\u2019t always see the benefit on paper, and they\u2019ll say, \u2018Well, I build the app myself, so why do I need a CI to build it for me?\u2019 But it\u2019s a safety net. Whenever you push code, your app is being tested and built in a consistent way. That\u2019s so valuable, especially for a multi-platform app like ours. And there are so many tools at your disposal. Once you get used to that, you can\u2019t go back.\u201d<\/p>\n<p><a href=\"http:\/\/plex.tv\" class=\"icon icon-after icon-chevronright\">Learn more about Plex<\/a><\/p>\n<p><a href=\"https:\/\/apps.apple.com\/us\/app\/plex-stream-movies-tv\/id383457673\" class=\"icon icon-after icon-chevronright\">Download Plex from the App Store<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The team behind Plex has a brilliant strategy for dealing with bugs and addressing potential issues: Find them first. \u201cWe\u2019ve got a pretty good process in place,\u201d says Steve Barnegren, Plex senior software engineer on Apple platforms, \u201cand when that\u2019s the case, things don\u2019t go wrong.\u201d Launched in 2009, Plex is designed to serve as [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":135073,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[],"class_list":["post-135072","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apple-developer-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/135072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=135072"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/135072\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/135073"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=135072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=135072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=135072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}