Being a programmer in the game industry has put me in a weird position. For the last 10 years, I did as much programming as anybody else in game industry (including the overtime), except with the caveat that it was mostly not related to gameplay, or even a game project directly. You see, I somehow always find myself in the middle of many projects, but almost never attached to a single project. When I was doing backends, my team and I were deserving from 2 to 7 different games at the same time. Our task was to deliver an API that the game could use easily, and was easy to understand. For instance, a game wanted achievements. We would deliver scripts for creating database, code for running both REST and WCF services, managers for the game server that would handle the logic of it, and a client module that would cache everything and limit the network traffic to a minimum.Oh, and there would be tools to help create those achievements.
Surprisingly, all of that, without ever touching the gameplay-side of things. We would deliver API that the game could use and implement. The game team had 2 responsibilities : The whole visual/input aspect of the game, and the game server specific logic for their game. They didn’t care (or were too busy to care) how it all worked behind the curtains. On the game’s client side, all they wanted to do was :
AchievementModule.OnAchievementUnlocked += Game.OnAchievementUnlocked; ... foreach(var achievement in AchivementModule.Achivements) ...
On the server side, they simply want to do
//Register to events AchivementManager.OnAchivementUnlocked += GameRoom.OnAchievementUnlocked; ... //Directly unlock an achievement AchivementManager.Unlock(playerId, Achivements.OpenedTheGame); ... //Steps to unlock an achievement AchievementManager.IncrementSteps(playerId, Achievements.Kill6000Guy., increment);
How are the achivements stored? Are we running a monolith service, or hidding stuff behind a load balancer? How many request does getting the list of achivements generate? Is the data encrypted, compressed, or both? They had no idea, and I think it was a good thing. In the end, we delivered what I called key-in-hand full stack solution : Database scripts, services, code for the server and the clients, documentation, and we even had a deployment tool to help the Live Ops team configure/deploy the databases/server/services. Nothing was completely bug-free when first delivered, and we had some big headach to maintain backward compatibilty from time to time (or had to pull weight to force some update of the game code), but I believe what we delivered was a quite high-quality product. Most features (Login, Inventory, Rooms, Chat, Friends, Achievements, etc…) were designed this way so as to not slow down the game team as much as possible.
This is what I did for the best part of the last 10 years : architectures, systems, tools and automations. If you noticed, no gameplay involved at all, hence the title of my post : A Unique Position to Be In. I called myself a Game Developper for the last 10 years. With those 10 years of experience in mostly AAA studios, can I suddenly be called an Indie Game Developper just because I’m creating my own game in my spare time?