What Developers can Learn from the Mistakes of Pokémon GO

Pokémon GO achieved world domination before being officially available in every country. A mass explosion of people can now be found roaming the streets with but one goal to be achieved, “Gotta catch’em all!”


Although millions of Pokémon GO players have embraced the nostalgic and addictive sensation, they have also had to endure many bumps and glitches, such as server down time and freezes, that have left many sorely disappointed by the greatly anticipated app.


Developers Niantic Labs shouldn’t be blamed for these problems, thousands would be delighted to be in a position of having to deal with a smash hit such as Pokémon GO. However the technical issues reported reminds us all of just how important it is to prepare for millions of concurrent players, even more so in a day and age where games are becoming ever increasingly online.


Some of the smartest minds of GameSparks have delved under the hood to show how with the help of GameSparks, developers can prepare for a smooth and stable game, no matter the possible loads involved:


The App Freezes After Catching a Pokémon


Pokémon Trainers across the globe are becomingly increasingly frustrated and it’s hard not to understand why.pokemon freeze


After walking for several kilometres to capture a long sought after Magmar, and believing they finally have one safely stored in their Pokédexes, many have been left with a frozen screen (see right), staring at a dead Pokéball.


At this point players are faced with no other option but to close the app and try again. However, in most cases the once entrapped pokémon is no longer there.


This loss of caught pokémon could be related to a game’s cloud save system. Developers using GameSparks can prevent this issue in their future games by using runtime collections.


Pokémon could be stored in a runtime collection, which could be referenced and assigned to a player’s scriptData. Each of these pokémon would have a name, type, level and rarity, which is all stored alongside the pokémon on its own document.


When a pokémon is caught, the player will reference this pokémon from the scriptData, but the values for each particular pokémon caught will change.


So the base pokémon information would be stored in the pokémon collection and the change of the player’s pokémon stored in the player scriptData.


For example: A level 1 Charmander would always be just that. However, in scriptData, in the player’s pokemon owned, it may look like this:



So when the game assigns pokémon, it could access the database and search for the name, referencing the player’s pokémon and THAT player’s pokémon level etc.


Player’s Goods Not Visible in Inventory After Purchase


As well as disappearing Pokémon, players are also finding that purchased Pokécoins are not being added to their inventories. Players may tolerate a rightly earned character being lost on occasion, but when real world money is handed over to receive nothing in return, as you can expect, they tend to be a lot less forgiving.


But what could be causing this issue and how can developers ensure their players receive their Virtual Goods? As pokémon GO forces players to get out and about, drops in network connection could be experienced, preventing the IAP request from being processed completely.


By using GameSparks, developers can ensure players receive their Virtual Goods despite inevitable obstacles such as intermittent network connection. DurableRequests can be used to store the unsent requests in a queue on the player’s device, sending them when the connection is re-established.


A DurableRequest would enable any game to withstand random disconnects from the internet and allows a store transaction to be posted once the connection has been restored.


Unable to Connect to the Pokemon GO Server

pokemon server

One of the most notable (and annoying!) issues with Pokémon GO has to have been server downtime.


There could be multiple causes for this instability, including reports of DDOS attacks by hack groups. However, the most likely reason is the sheer popularity of pokemonGO. As of July 13th, the best estimate was quoted to be around 95 million daily active users.


Having a huge amount of concurrent players could be bitter-sweet for developers. Masses of players downloading a game within a few short hours should be an excuse to raise a glass and celebrate, however it can also cause hefty pressure on any game’s backend solution. If whatever solution is unable to scale up at the same rate that player demand dictates, an intermittent player experience can be created.


Developers hoping to achieve similar player numbers upon launch, should prepare for such eventualities by creating a stable foundation through one of the platform-as-a-service offerings which heavily support gaming backends, such as Amazon Web Services, Microsoft Azure and Google Cloud Platform.


This can then be built upon with a scalable software layer which is malleable and robust enough to fit and enhance a game, as well as deal with it’s load beyond levels of expectation.


The GameSparks platform components that serve game requests are grouped into runtime clusters that can be deployed worldwide. Game developers include the GameSparks software development kit (SDK) in their game, which connects to GameSparks’ runtime clusters and securely manages communication between the game and GameSparks’ services. These clusters can be scaled up to handle anything between a handful of players and tens of millions, depending on user demand, and this level of usage can be prepared for with extensive load testing, helping to prevent possible downtime.

Who uses GameSparks?