First, let me premise this with the fact that I was like many others who played the first few hours of Pokemon Go with childhood delight that quickly turned into adult reality by wasting entirely too much of my time. I love Pokemon, having had all the original 150 Pokemon cards in both English and Japanese when I was a child. However, with the amount of work I do I simply can’t continuously play a game like Pokemon Go. Now that that is out of the way, let’s talk about Pokemon Go from a developer standpoint rather than the tech investment standpoint and fanbase standpoint.
Problems with Pokemon Go
As of right now, there are significant scaling issues with Pokemon go that causes a lot of people to sacrifice a good portion of their network in order to play the game at all. Unless they have an unlimited plan, or can pay a lot on data, most people can’t play for but a couple hours before they have to worry about whether they have used up too much data for the day. Having said that, many people still play it and the company has quite a large user base to maintain.
The first problem is that much of Pokemon Go behind the scenes information isn’t known to the public. This information includes things like how Pokemon are loaded on to the screen. While the least amount of data would call for the phone to generate Pokemon locations, the amount of data going back and forth on the network along with the GPS suggests that they want to prevent players from cheating the game. Since cheaters wouldn’t have access to core code, that meant Niantic could prevent cheating from a majority of players but this also means that servers determine where the Pokemon are according to GPS information. The second GPS information gets involved, pretty much whatever you are handling deals with Big Data, especially when you are generating a location on a map.
Let’s Talk Power
Combine this with the fact that the application provides you with a walking distance clue, that means Pokemon are generated based on coordinates. So, let’s think through this. At any given time, there are around 150 types of objects initialized on a server with potentially millions of objects in actual memory. While each object might take up a couple MB, that still means there’s still at least 1TB of RAM active at any point in time and it’s likely to be in the range of at least 10TB. If anything goes wrong with just one of the objects and it causes a server crash, it would take hours just to find the one issue if they didn’t have a great logging system to track them all. That’s actually not that bad in terms of hardware, but it’s the GPS and A.I. patterns that require massive CPU power. Each object has its own A.I. and while it may be basic, it’s still going to take up space and processing power.
The GPS takes a lot of CPU power on its own, even though it isn’t doing a lot. When I refer to GPS, I’m not only talking about the one line of data that a computer would need to grab the coordinates but also the calculations of that player to the nearest pokemon that have been initialized. In order to lower the calculations, players likely only see Pokemon for up to the nearest current five mile radius and this only changes once players have hit a certain area within that radius. That may not be a lot with just one, but it’s billions for the game’s current fanbase.
If you were to look at the current amount of calculations for just the current generation and then look at the next generation, then it would quickly become a realization that their model nearly doubles the required power if they just add Generation 2 to their game. Not only would they need to double the amount in their hardware, but they would also need to double the amount of code they currently have written. That’s a lot of power and data consumption on both ends, as you will have twice the amount of data running through your phone than in the first generation. Needless to say, if they plan on continuing this trend of adding generations, the scaling model has to change. However, I failed to mention, or even notice, significant about how the calculations are done. This is where most skeptics from other articles end in logic, but I think I know a better way. The better way doesn’t involve thinking of Pokemon Go like you would an MMORPG, but rather a website.
How They Might Be Handling It
As I assume these are seasoned developers, I would assume they’re well aware of how much data in all directions that would use. While they would still need to grab an overall area, they could easily just provide Pokemon coordinates to the phone and just have the phone do the calculations. If they have done what I think they’ve done, then it would be your phone that does the bulk of calculations and it would explain why it drains your phone battery so much. The network just receives an update when it reaches a certain radius within the mileage set on your phone. This would lower the amount of calculations needed by around half or more. In fact, we can make a prediction of what they’ll do with generation two.
Likewise, they wouldn’t need to hold the Pokemon in RAM at all but rather a list of randomly generated Pokemon on specified timers. The reason why one might hold it in RAM would be to consistently provide a world of Pokemon as you would in an MMORPG, but if you’re trying to lower the amount of data you have to push over the network then it would be better to generate a list of objects that everyone references from and regeneration of objects would be based on timers and/or capture verified methods. This list would then be referenced by a phone, split into information within a given mileage, and rendered using the phone’s hardware. At this rate, you’d barely need to have more than a personal computer in terms of data exchange since your phone determines where you are, it renders the pokemon, it determines the distance from you to other pokemon, and the only time data exchange happens is when the phone needs refreshed information. The A.I. could be on the phone itself if the A.I. is simple enough and just makes decisions on what to do based on randomness.
Where will Pokemon Go … go
Honestly, the easiest implementation, according to the theoretical data I’ve surmised here, would be to just add more objects to the machine. Yes, I know, the fan base have tried to say the game could go in two different directions, either together or separated, but according to the data, it would be better if the company kept them together since all they would be doing is refreshing the list.
Bottomline: If they separated Generation 1 from Generation 2, whether by application or software implementation, that means they would have to rewrite all the code that they plan to separate. Why would you rewrite code that took months to years to write when all you really need to do is add more objects to the system?