February 25, 2022

Dev Diaries: GO Battle League

Dev Diaries: GO Battle League


Since the GO Battle League launched two years ago, we’ve been collecting feedback and working to polish and enhance Trainers’ experiences. With the interval season coming up, we wanted to give you a peek behind the curtain at the improvements that Pokémon GO’s battle engineers are currently working on.

Focus Areas

Our engineers try to think about battle systems holistically, which means balancing work across raids, Team GO Rocket battles, Gym Battles, and Trainer Battles. For the GO Battle League, we’ll look at four areas.

Battle-code maintenance

  • Rewriting and restructuring the code to add more stability and flexibility for future engineering work.

Fast Attack fixes

  • Addressing Fast Attack inconsistencies.

Battle Logging

  • Providing a way for Trainers to submit detailed reports after poor battling experiences, so our team can more effectively diagnose issues and fix them faster.

Urgent Bug Prioritization

  • Addressing the bugs that occur in the GO Battle League in a method that provides the most impact to our Trainers.

We’re excited to use this Interval Season as a way to work on implementing changes that you’ve been asking for! And if you’d like to dig into the details about the inner workings of the GO Battle League, read on to learn more directly from our developers.

Your Questions about the GO Battle League

Since the beginning of the GO Battle League, Trainers have asked lots of questions about what it is and how it works. We spent some time with the team to get their thoughts and ask about what’s coming next.

What causes latency in the GO Battle League, and how can we reduce it?

Latency exists when there is a delay between action taken by a Trainer and the response from the server, and this is particularly problematic when the lag is unbalanced between two players. This can happen either on the server side or the Trainer side, but most of the time, it’s caused by a delay in the information reaching the server from the Trainer’s device. The battle team is evaluating ways to reduce latency, especially external latency, and has many options on the table.

While the battle team further examines latency reduction, there also may be ways you can reduce your own latency, such as swapping from a Wi-Fi connection to mobile data or vice versa. To figure out whether you should use Wi-Fi or mobile data, we recommend the following.

  • Turn off mobile data for your device.
  • Connect to a Wi-Fi connection, and use a ping tool to check the response between your device and the server.
  • Disconnect from the Wi-Fi connection, and turn on mobile data.
  • Use the ping tool again.

Whichever option gets you the fastest ping response will likely be your best choice. Note that this can change based on your location and how many people are using your chosen network.

Stephen - Engineering Director

How does the GO Battle League’s matchmaking system work?

Our matchmaking is based on the skill and prior performance of each individual player. Each GO Battle League competition is a unique playing field for battlers to learn and experiment with new strategies and Pokémon.

The Battling Community has done an amazing job analyzing and utilizing the best Pokémon to maximize their victories. There is no algorithm that matches trainers based off of selected Pokémon, but we love watching the community build their own strategies featuring new and inventive team structures. However, there are “tiers” of trainer skill levels that are matched against each other, which can create different strategies in certain skill brackets.

You can see this most clearly in some of the special cups (e.g. the Little or Kanto Cups). When these unique requirements are introduced, it challenges trainers to catch different Pokémon and experiment with what they find most effective in these restrictions. As they ascend into higher ranks, Trainers find which teams are the most effective, leading to a wide variety of Pokémon being played compared across ranks.

Steve Wang - Senior Executive Producer

What is battle logging?

We are adding a battle-logging feature, which is quite similar to the raid-logging feature that was added in 2021. This feature will allow Trainers to voluntarily submit a detailed record of their game’s activity during a GO Battle League battle. These detailed records will give us more technical insight into issues that Trainers report to the support team. It is especially helpful if players submit both a support ticket and a battle log. The support team can then associate these two reports with each other, and engineers will be able to use these logs to have an in-depth look at what issues were occurring during the battle. We hope that this will help us identify and fix bugs more quickly in the GO Battle League.

Jess C - Software Engineer

What is battle–code maintenance?

As Pokémon GO’s battle system grows, we need to continue improving our existing infrastructure. We do this with battle-code maintenance – which we call “the combat refactor” – makes issues more identifiable to us when they arise. We are now able to more quickly and effectively fix problems that have been affecting the GO Battle League community. The code now has more safeguards, and visual effects are now less likely to cause performance issues. With these changes, we can also develop new features and introduce bigger changes to the system with less risk to the existing code, allowing us to iterate and adapt.

Alex Hardinger - Client Software Engineer

What are the problems with Fast Attacks, and how are we fixing them?

The three main issues are the following.

  • Fast Attack Desyncs: Fast Attacks may take longer to activate than they should
  • Fast Attack Inconsistencies: Fast Attack behave inconsistently when activated as a Charged Attack is activated
  • Post Charged Attack Desyncs: Fast Attacks may be unusable right after a Charged Attack

Fast Attack Desyncs

This issue occurs when a Pokémon isn’t performing the right number of Fast Attacks or doesn’t perform Fast Attacks at all while your opponent continues to battle as normal. This issue is most noticeable on Fast Attacks that can be used quickly, like Dragon Breath. This problem is related to clock synchronization. Sometimes the game state on a Trainer’s device and our servers differ, and the result is an unresponsive game. To address this issue, we’re going to be adding additional synchronization points throughout the battle in hopes of keeping the client in step with the server. This synchronization shouldn’t be noticeable by Trainers.

We’re continuing to work on multiple approaches to further fix these Fast Attack desyncs in the hopes of finding the solution that consistently works the best.

Fast Attack Inconsistencies

These are cases when one Trainer seems to be able to get in an extra Fast Attack while the other is using a Charged Attack. What’s actually happening is that one Trainer’s Fast Attack is completed at the same time the other Trainer’s Charged Attack is used. The current system prioritizes the Fast Attack to resolve any damage dealt before allowing the Charged Attack to proceed.

Our short-term solution is to remove the postponement of a concurrent Charged Attacks at the end of a Fast Attack. This solution helps sync up Fast and Charged Attack timing while allowing Fast Attacks to finish their durations during the Charged Attack minigame. It would also retain the current damage-resolution priority, meaning that Charged Attacks can effectively deny a Fast Attack if executed in the window that the Fast Attack concludes.

This solution also allows the community to keep their knowledge and skills.

Post Charged Attack Desyncs

The last issue we’d like to cover today is the scenario where Trainers can sometimes be unable to act shortly after a Charged Attack ends. This is something that the team is aware of, and while we don’t have an immediate solution, we are looking into this issue and we’re testing fixes. Check the GO Battle League known-issue page during this GO Battle League season to stay updated.

Ben Li - Senior Server Engineer

What’s next?

Right now, our main priority is continuing to stabilize the battle experience, which will help even the playing field for all Trainers, regardless of device or connection.

Therefore, we have decided the next season of GO Battle League will be an interval season. Rewards will be based on battles won, but ratings won’t be visible nor will they affect rank. You’ll still be able to encounter a variety of Pokémon and earn amazing rewards in the GO Battle League as we work on the issues above. We have seen how much the Trainer Battle community rallies behind events like GO Battle Day, so these events will continue this season but with some extra incentives. Stay tuned for updates on our progress and what to expect next.

We look forward to sharing future updates with you and inviting more Trainers to join in the fun of GO Battle League.

Please be aware of your surroundings and follow guidelines from local health authorities when playing Pokémon GO. Upcoming events are subject to change. Be sure to follow us on social media, opt in to receiving push notifications, and subscribe to our emails to stay updated.