How Google’s Android Notifications Brought Turbulence to ‘Race for the Galaxy’
In software development, it’s the little things that always get you in the end. You can be racing along, coding for months at a time with few major hassles when suddenly a new requirement for a seemingly simple new feature can completely derail all forward momentum. Call it the unknown unknowns.
For Jeff Gates, technical challenges are something to be avoided in favor of fun. Literal fun. Gates is a game developer, and co-founder of Temple Gates Games, where he is the company’s lead programmer. He advocates an approach to game development that applies to business development as well.
“I worked on Diablo at Blizzard, and Maxis on Spore. The thing is you just do it,” said Gates, insinuating that new technologies are often a distraction. He said it’s about, “Focusing on the game and what you actually need it to accomplish. For our game, “Race for the Galaxy,” we didn’t use that many technologies because we’re busy making games, not using tech for fun.”
For other developers, he says, “I think that would be my advice: to solve your game or business problem. It’s possible but rare to find a technology that you just need to do the job, and I think people just get lost with that sometimes. That’s what we do in game industry land. There’s a lot of mantras, like write games, not engines. That’s definitely always a pull in my core. It’s a lot easier to make game engines than to make games and have correct answers to problems,” said Gates.
In early May, Gates and company released “Race for the Galaxy,” a mobile implementation of a classic card game. Unlike “Magic: The Gathering” or “Hearthstone,” “Race for the Galaxy” is about a single central set of cards and the strategy around using them to colonize the known universe, rather than simply about buying more cards to expand your personal collection.
As a card game, it was central to have good AI and online multiplayer support. To accomplish this, Gates used a very simple server-side virtual machine in Microsoft Azure, a decision he said which was largely made because the team had a large amount of free Azure credits.
Despite the use of the cloud and distribution to both iOS and Android, the real problem for the project came two weeks before shipping, when the Android build system required a complete redesign. Why redesign and implement your build two weeks before shipping? It wasn’t exactly the plan, said Gates.
Just before shipping, the team decided to implement notifications, so that the player could be reminded their turn had arrived when playing online. This simple requirement, however, turned into a major mess for Gates.
When Gates and his team first wrote their internal game engine, Visual Studio Android projects were still built with Ant. According to Gates’ philosophy of games, not technology, the build system remained on Ant, even when the rest of the Android world moved to Gradle.
Unfortunately for Gates, the path to sending notifications on Android has gotten a little more convoluted than it was when they set out designing for Android. Years of application developers abusing notifications, combined with the ever-growing blob of Firebase inside Google conspired to make Gates’ life a little more difficult before ship date.
“This is like the last day of our beta, I don’t want to change our whole build system just to call or show a notification. After spending a day trying to see if I could not use Gradle, the answer was no, just suck it up and go with the flow. Two weeks before launch we completely rewrote our Android build system, which was a challenge, just to show a notification,” said Gates.
And this is exemplary of a larger problem in the Android world, and elsewhere, frankly. “It’s like it’s becoming really unclear what an OS feature is and what a library feature is. So this Firebase stuff is these libraries that this random company seemed to have made, and Google seemed to say, ‘I guess that’s now part of the OS in some form or another.’ It obvious the Firebase stuff is calling something that’s calling something, that’s calling something that’s putting a notification on your phone. It’s very unclear what the actual function calling a notification is. Now we have this 500MB library we have to link it. It goes away, but that’s what you have to do these days to show notifications on screen,” said Gates.