At Battlefy, we are powering the largest and most exciting esports the world has to offer. We just recently opened registration for Apex Legends Global Series Year 2 which features the best Apex Legends teams from around the world, completing for $5,000,000 USD in prizing.
With millions of dollars on the line, we have built the system right. There were a surprising number of interesting problems we had to solve which gave us the opportunity to exercise our analysis and design skills.
This article will delve some of the more interesting problems we encountered and how we solved them.
As with any large program like Apex Legends Global Series, we have to carefully plan and breakdown the project or else we will end up with a big ball of mud.
Critically, we must design and build independent systems with clear responsibilities and boundaries. We can then integrate them back together for an unified experience.
What this looks like in practise for Apex Legends Global Series is the following.
Glue is the secret ingredient to avoid the big ball of mud, as without it, systems would be required to directly know of each other. This leads to tight coupling which makes it impossible to test or build.
A good breakdown allows more resources to be applied to the problem. We can now have multiple independent teams building each system and glue.
But how do we ensure everything will come together at the end? Are we at risk of integration hell? This is where another technique comes into play.
Even if there are multiple teams working on different systems/glue, the goal isn’t for each team to just power through and get their part done. In order to prove to everybody the project is going well, we must be able to do demos together. But how does one do this if each system isn’t complete yet?
The trick is to find a slice through all the systems/glue for the demo. This allows each system/glue to be built up just enough to satisfy the slice demo.
For Apex Legends Global Series, a slice demo might look like:
That would be a very basic means to build up a slice demo that connects all the systems. Each system still isn’t welded together, glue is still used. This allows each team working on a system to stub out incoming data for the next slice demo.
We can then decide on the next slice demo and add new functionality to each system incrementally. Everybody sees progress. Everybody gains confidence the system is correct.
With the systems/glue and slice demos in place, each team can now go deep into the nitty gritty requirements. Here are a sample of a few problems we had to solve.
If a player in good standing is on a team is registered in a tournament but then gets banned, what happens to the team? Do we automatically remove the player from the team? If the team becomes incomplete do we automatically remove the team from the tournament?
We solved this one by creating a new role called “banned”, set the player with that role and informed the team. This allowed the team to see the problem and replace the player.
Normal elimination brackets are 1 vs 1, but in Apex Legends where each game contains 20 teams, we needed to implement a free for all elimination bracket.
This brings up many problems of fairness when it comes to seeding. If we don’t have a perfect 20*2^N teams, some matches are going to be easier than others. For each match, top 10 advances, but matches with less than 10 teams are awarded a bye. Normally this isn’t a problem as byes are awarded to the best seeded players in a 1 vs 1 elimination bracket, but things get tricky in a free for all elimination bracket.
If we wanted to award all the top seeded teams a bye, that would imply they are all in the same match, but this is the exact opposite of what you want to do as in the next round you would have a match full of the top seeded teams. One of the purposes of seeding is to maximally spread out the best teams to ensure they don’t match up any sooner than they need to. This drives excitement to the bracket as later rounds contain more matches with top teams.
If we go the other way and spread out the best teams, then the match that gets a bye will contain some bottom seeded teams. This isn’t ideal, but the lesser of two evils, so we went with this.
This is only a small sample of a few problems we had to solve when building Apex Legends Global Series and this is only for one program!
And we are not done. There’s still plenty of interesting problems we are in the process of solving. Our most prevailing problem is how to build a system that simultaneously provides a guided experience to our players with ridge business rules, yet flexible enough for our admin staff to help players get unstuck due to bad data or bugs. But the power we give to our admin staff can’t be used to form a footgun. We keep the Hippocratic Oath in mind.
Would you rather be at work building the next Apex Legends Global Series or adding functionality to some widget used by who knows? Each requires your technical/design skills and puts dollars into your Steam wallet, but I would offer you would have more fun building esports.
If you want to help build the next Apex Legends Global Series, Battlefy is hiring!