On June 13, 2022, Riot announced a new partnership with Microsoft to bring our biggest games to Xbox Game Pass. This partnership brought together two of the largest gaming companies in the world around a shared love of player-focused competitive games. Six months later we delivered on this monumental commitment and successfully launched our largest titles on Game Pass.
Now we want to take a look at the work behind the scenes during those months and talk about a team that you may not have heard about before —Player Platform.
What is Player Platform?
Player Platform forges the link between Riot’s games and our players to build a multi-game ecosystem and community. The team creates a connected player experience, bringing players and content together across our games. In other words, Player Platform works and delivers on almost everything about the Riot games you play that is not directly gameplay. This includes game-agnostic capabilities for accounts, game-entry, social, purchasing and more, delivered via portals, SDK integrations and direct APIs.
Since Player Platform is accountable for everything around your gaming experience, a large portion of the Xbox Game Pass work needed to be built out by Player Platform. This required a collaborative spirit, an open mindset, and a lot of determined, hard-working people to deliver this request all while continuing to support Riot’s current and upcoming games.
Getting Started… Quickly!
Since Riot Games was the first partnership with Xbox Game Pass to offer free-to-play games on PC and mobile, there were many unknowns. On top of that, we also wanted to enhance the player experience by granting in-game rewards to everyone who linked their accounts. When looking at a project of this scale, we try to simplify it into separate independent feature streams to maximize ownership and focus and to reduce meetings without aligned purposes.
To tackle all of this, program management worked hand in hand with Microsoft in planning major deliverables. This vital role ensured the right people got in front of the project at the right time. Player Platform’s Program Management team set up ceremonies and rituals across Player Platform and Riot-wide with game teams, publishing, player support, and other critical stakeholders. They strategized and scaled complex problems across multiple game teams and hundreds of people within Player Platform.
Designing for Game Pass
Before building out new systems or hammering away at existing ones, there must be a shared understanding of the problem and what success looks like for players. User Experience design within Player Platform is vital to creating positive player experiences and played an important role in the Xbox Game Pass partnership. While design is often first associated with the polished end interfaces, it plays an even more important role in planning out players’ interactions with complex products and systems and making them feel frictionless. Now you may be asking, how hard could it be to enable players to link their Xbox Game Pass accounts? Well, it turns out, it’s pretty complicated!
Early in the partnership between Riot and Microsoft, UX leadership engaged with leads to drive the creation of “minimum lovable” player scenarios complete with information across multiple disciplines and departments about what time, partners, and resources would be required to make these scenarios a reality. There was a particular focus on the biggest risks to a great player experience - because the sooner we agree that a difficult shared goal is worth the work, the sooner we can combine our expertise towards making the seemingly impossible possible. (Learn more about the initial process to define these minimum lovable scenarios in the Riot Games UX Medium article.)
"Collaboration between two companies is always going to be a huge challenge. Different terminology, different roles, different assumptions. We had to dig to figure out how Microsoft’s authentication systems and Game Pass installation experiences worked so we could take that part of the experience into account when costing development of the end-to-end experience — and assessing what, exactly, would be needed for the minimum lovable player experience."
- Cheryl Platz
With initial flows in place, the UX team went to work figuring out the details of what each player-facing touchpoint would need to support a smooth onboarding for players, whoever players were and wherever they were coming from. The team made certain that a seasoned Riot player linking their Game Pass membership directly from in-game or through Riot Client would have just as smooth of an onboarding experience as a new Riot player coming from the Game Pass app for the first time.
Bringing together platforms from two different companies for the first time often presents new scenarios that both our Riot Client team nor Xbox hadn’t solved before to deliver a great player experience. For example, Microsoft’s differing security model gave Player Platform an interesting opportunity to explore further standardization of authorization and identity platforms. Having open communication and active collaboration with Microsoft helped orient goals and made sure progress was being made in the right direction.
“We are not the first integration that they've done, but I think that the method used for us differed enough that they were working with us, partnering with us to land it. It was collaborative, we evolved both sides of the code base so that we could support what they needed. Microsoft’s out-of-the-box functionality wouldn’t work in this case and that would not have worked from a timing standpoint.”
- Luther Baker
Starting with initial discovery documentation (sometimes called pre-discovery), designers needed to identify what was currently happening and figure out pre-requirements by asking themselves, “How do we get to the outcome we want to achieve?”. Through a variety of methods such as scenario mapping and user flows, Microsoft and Player Platform designers worked together to create many artifacts that were shared with engineers, product, and QA to ensure flows matched expectations and a constant feedback loop was established to assess what services and capabilities were available to support the best experience.
“It's better, in that case, to be wrong as UX than right because people are most likely to call out and give feedback if they notice something like, “Hey that's not quite what my understanding is.” It’s better to do something wrong quickly so we can talk about it instead of spending that time trying to figure out what the right answer is, then creating something.”
- Melody Seng
Artifacts constantly evolved, even after sign-offs. Edge cases were discovered that required more investigation and iterations to solve. Working directly with engineers and the tech teams was key to getting to a place of shared understanding.
Creating Near Real-Time Services
To provide the best user experience with Riot and Xbox Game Pass, we wanted players to instantly unlock new in-game content after linking their active Xbox Game Pass account, which required a lot of ingenuity. The Content Experience team collaborated with the Accounts team (within Player Platform) and aligned on Accounts sending a message to the Riot Event Bus (Riot’s latest approach to message-based communication ) every time a player linked or unlinked their Xbox account. Once the message was received, the service listening on the message broker topic could then react and process the event. Since it was possible for a player to link their Xbox account to Riot without having Game Pass active, the team would also need to query the Xbox API to get this information using the token provided from account linking, with the Accounts team storing the token in a new service. However, this still only solved part of the problem, as we would still need to check if a player has an active Xbox Game Pass account.
The Content Experiences team (part of Player Platform) built the Gateway Subscription Service (GSS) that acts as the single source of truth, within Riot, for the player’s Game Pass status, for any caller. This meant that every time a service needed to check for any subscription-based content they could call upon GSS and get a low latency, high fidelity answer as to what benefits the player should have. GSS gets the data by consuming account-linking events from Accounts and using the Microsoft API to check if players have an active Game Pass status. It exposes that data to other Riot services through an HTTP API endpoint so other teams could use that information for different use cases, including:
Content Access Platform: Adds specific subscription-based content to players' inventory
Martech: Show specific ads based on a player’s current Game Pass status
Player Support: PS agents use the information to process player tickets related to Xbox subscriptions
Web Experience (WebEx): Showing player subscriptions statuses on the player account management web page
When a player linked their Riot account with their Xbox Game Pass account, GSS queried the Microsoft Xbox API to get the player’s Game Pass status using the token from account linking, saved that information in a persistent database, and regularly updated and made it available for querying by providing access to the client through the API. It seems simple enough, right?
A player could activate their Game Pass at any time after linking their Riot + Xbox account. The service would only be able to regularly query the Xbox API to check if a player has an active status. To provide the best player experience, we wanted players to be able to get access to subscription content immediately after linking and activating their Game Pass, so being able to query frequently was necessary. But how frequently was enough? Every minute would have been great, but it’s not a good practice to do millions of requests every minute on an API just to check for a status, especially when 99% of the time there would be no status change between calls.
The team focused on instances when they could react to interactions with players on the Riot side, such as when a player launched the Game Client, where it would be the right time to refresh Game Pass status. However, refresh is an external HTTP call that takes ~1 second and the main GSS client, Content Access Platform (CAP), needed responses returned in less than 50 milliseconds as it was part of the time-critical path to fetch the player’s inventory. There was no way to fit a one-second external call into 50 milliseconds, so the team had to get creative. They decided to return the currently stored value that was obtained from the previous refresh or originally after the account linking and trigger an asynchronous refresh on the backend if the stored value was obtained more than two minutes ago. If the service saw a change in the Game Pass status following that asynchronous refresh, it would send a message via the Riot Messaging Service to the game client so the game could fetch the entitlements from CAP making sure that the player would get their subscription content without needing to reload the Client manually.
“So our main goal was to reduce the latency as much as possible as we have a pretty strict time requirement. It’s basically 50ms for CAP to call us and get the answer if a player has a Game Pass status active or not, which makes us almost a real-time service in this sense. If we fail to reply in this timeframe, CAP will effectively time out the call and it might result in players not getting the content that they should be getting.”
- Vasily Katraev
Wild Rift does not use the CAP system for its player inventory, so they would need to directly ask the subscription service if the player had an active Game Pass subscription. To meet the 50ms latency requirement, Content Experience colocated their services with CAP and Account Management services in four data centers across the world to be as close to our players as they could.
Dark Launch & Database Limitation Workaround for Launch
Just days prior to the rollout to players, the team ran a dark launch to test the linking between Riot accounts and Xbox Game Pass. They caught multiple critical bugs and fixed them before launch day.
One major concern was the amount of user load on the Entitlements service, which is responsible for granting players access to items across all of Riot's games. Entitlements receive a lot of read requests – up to 800,000 requests per minute in some locations! In order to unlock benefits for players, each Entitlement call now triggered a subsequent call to another system to check if a player had Game Pass, before assembling and returning the Game Pass benefits to the player. The additional stress and complexity this flow introduced caused risks of unreliability and slowed responses with a variety of downstream implications.
The team had load-tested many scenarios but realized that a dark launch would give them the most confidence in validating they had a robust system in place. A dark launch allowed them to "turn on the system" in full flow barring just the Xbox Game Pass content from appearing to players. They were able to see the full stress the system would undergo and the exact behavior to expect before the official launch. Through the dark launch, they discovered a connection pool misconfiguration that would likely have led to a failed launch with players unable to get their benefits.
The team also ran into an issue with our database write capacity - the existing architecture* prevented them from scaling it to account for increased player load during the launch of our partnership. One common way to manage the load on a service like this would be to roll out access in waves. The team decided to try to control the flood of players by slowing the marketing to multiple beats. This would spread the waves of players out over a longer time period, and the team could ensure they had enough service capacity for each new wave of players as more marketing material went live. By working closely with marketing, they were able to keep it under 50% write capacity.
*We have since changed our database technical stack to have more horizontal scaling on account changes.
Mindset over Skill Set
Besides the vast technical skills it took to integrate with Xbox Game Pass, soft skills played a critical role. Being humble, staying curious, and having the ability to collaborate and openly communicate internally and externally with Microsoft were key. While this project only took six months, it involved hundreds of people, shifting work hours, and learning new systems. It was important to take steps back and let people with subject matter experts take over and drive in different ways so there wasn’t one person or team directing things unnecessarily.
“The way that people approached the project, and the way that people rallied around it really made a difference.”
- Nate Portner
This partnership highlighted many of Riot Game’s core values. Throughout the entire process, the team continued to ask themselves, “How will this experience affect our players?” They set themselves to the highest standard of “Player Experience First,” and all of Riot came together to work on something that impacts all of Riot’s games.
“Every discipline did a great job focusing on how decisions would impact players. We didn’t want to set the wrong expectations for any player at any time.”
- Matt Hawkins
Wrapping Up
While there was more work than could be crammed into this one technical article, we hope you leave knowing more about Player Platform and the services they built and provided for the Riot/Xbox Game Pass partnership. It took the dedication and hard work of hundreds to rally together to build and continue building incredible player experiences.