I journey through various cloud service for making a backend for my game. Here I log the experience why I ended up on Firebase currently and what is the pain point or deal breaker point of each.

I hope others deciding can learn, or even employee from these company can know their own pain point for some user like me.

My requirement

  • I am making a Unity game. All of them claims “Unity integration”
  • Not an online game. Just need a database for scoreboard and storage for some dynamic image downloading + save backup (I don’t use Google Play and iCloud ones for more control). Nothing fancy!
  • You can choose to go online or not. When online you must register an ID and your in-device save will pair with it.
  • All items are stored in the save file to allow full offline operation. In the database contains that entire save file’s backup. The game has no IAP virtual currency.

AWS

  • Have been with AWS for 2–3 years. The reason is it seems to be an industry standard worth learning so I choose it. Devs in my country talk about it a lot too. I want to join in and be able to say “I have used AWS!”.
  • The first year was free, and from that point onwards I paid about 5–10$ per month. I use it only to serve a small asset to the game for each players.
  • Old interface. A bit painful to use. S3’s UI has been modernized recently. I hope it follows in other area.
  • Very detailed IAM system. Almost too much for my use but I have no choice but to go through it. The rule is difficult to write and I encountered many unexpected error. Like with Put and Get you need * at the end to apply to all files while List you have to remove it to target a directory. And it is difficult to know what policies are required for thing you want to use. If you missed just a part of them, it will fall apart at one point. (Like going to S3 and don’t see some component load up, but some load up) This makes a very “secure and detailed” IAM system actually “scary and fragile” because of my own error of setting them up.
  • The ARN system is difficult to get it right. The examples are scattered all over in each service. Many examples is not comprehensive enough and I must still do trial and error. It would be helpful if the UI can just generate the correct ones for you for many service endpoint.
  • There are very confusing terms in the user management area. You have AWS Cognito (The general term for everything), Cognito Sync (Sync file and store in the user’s storage), Federated Identities (Another screen that somewhat links with user pool but with login from other sources), Cognito User Pool (It is AWS hosted user) Your User Pool (Former name of Cognito User Pool?). They looks separated but actually loosely interoperating with each other. Moreover some of them have region so if you select a wrong region it disappears. I must iterate through all the region one by one if I forgot which region I set it up long time ago.
  • The thing with AWS that I hate is that it slices things up in the smallest possible way like this for flexibility, but it puts workload on the developer. Instead of using cloud service to be able to focus on game I must still do work. (That is of course less painful than buying my own servers) This appeals to some customer but definitely not me.
  • Pricing is very detailed that it is sometimes difficult and scary to begin.
  • C# .NET interface is painful to use. It uses callback pattern. Error is not obvious and there are many point that can trip you. (Wrong region? Wrong region code? Correct region but actually the credential service is in different region?)
  • C# .NET online documentation is a nightmare!! Impossible to search for what you want to do. (It just auto generated from the code, really)
  • Human readable document is a bit difficult.
  • Route 53 is one thing I like. I switched from Hostgator and still be with AWS on this one. More expensive, but I love being able to access and create all the records I want easily.
  • I host my static websites on S3. The command line aws s3 sync is super useful. In a flash I could update my website anytime. This is great, that’s why I am also still with AWS for my game sites.

Several years later I am starting out a new game. I think this is a good opportunity to journey and learn new things so I searched for a new solution. If nothing is better I would come back to AWS.

Note that I know a bit about Firebase before meeting with PlayFab and GameSparks. You might see I mentioning Firebase in their respective sections.

PlayFab

  • Did not actually use it myself. Know this from a part-time job I work for. I am allowed to access their game’s PlayFab console.
  • Very optimized for game and made many assumptions for your game, which is the point I don’t like. It has the clearly named “Player” and each player has “Inventory” which must be granted items from “Catalog” and so on. There are “Leaderboard” with various functions so you don’t have to make your own database. A system for logging into each other with social IDs, etc.
  • Seems good? I think the “prepared template” is a bit too much for me. (Many will be left unused)
  • About the pricing. I don’t like them that the pricing is not transparent. In the homepage they are clearly trying to hide many details and just said Free. Free is not actually free because if you manage to come deep to the console (Settings > Limits) you can see limits on each every possible details that it gave me headache (like request/sec, items created, etc.) which on each you can pay to extend the limit. (This looks a lot like IAP character upgrade in games.) You can’t see this before committing yourself to the service and it is a bit scary, so I set off to search for other alternatives.
  • Cloud script “automation” is one big file!
  • All of these evaluations happen in 2 weeks.

GameSparks

  • I like them for offering “pay on success” plan for indies with 1–3 man on the team. That’s totally me and they understand me.
  • I signed up and take a look. Things are less prepared than PlayFab and I love that. There is a leaderboard, social logins, currencies, etc. for games like PlayFab. But no inventory and players. They are all a database. This looks like a good level of abstraction for me.
  • There is no inbetween of evaluation package and enterprise package? If I have 4 man on the team I am already an enterprise? This point is confusing.
  • In the NoSQL there are many “magic” database that appears without my knowledge. Searching for their meaning and structure in the docs does not help me other than what “System” and “Runtime” is. (I realized “player” is probably hardwired to many things, but in what way exactly?)
  • I started hesitating after trying to get start and search for how to do things in their tutorial. Their tutorial is not categorized in a good way. Just up to “Database Access and Cloud Storage” is good, then after that it looks chaotic. I am unable to generate a “graph” in my head I usually have when reading Google’s tutorial.
  • I am just searching for how to put a file to server to be able to download again and already lost. A lot of options, scriptData? collections? asset? I get their intention of providing options, but I am a person who rather have a black space to just put things in and get things out. This is not appealing for me.
  • When I learned that to upload I must request a URL and use a manual HTTP get to get the file from that URL, while seems normal I think is a bit too much work.
  • It is very customizable. You can actually edit “what happen when” of each services to the core with Javascript. Which I think is too much! It also put risk on me, it might require me to script many things to get it to work…
  • This is where I realized something. Service like PlayFab and GameSparks seems to be optimized for games and help me go faster because I am making games at first, but actually, a “just blank canvas” service like Firebase turns out to help me more. Less setup. Less learning. Less frustrations.
  • Just a bit after I search for how to persist the login, an answer is to hijack the login script and put JWT in there.
  • And also when forgetting the password how to allows player to request a password forget e-mail? Searching for this results in a very scary looking doc. It looks almost like I am writing the whole process from scratch!
  • The e-mail service is partnered with SendGrid. (discovered later deep in the docs) I look at their website and I don’t want to calculate for costs. Firebase has this for free. Also there are more scripts I have to write.
  • They have a Unity dynamic C# code generator for making a compilable code to call to your own functions. (Instead of cloud script keys of PlayFab) This sounds like fun, but I haven’t got to that point yet.
  • It is difficult to comment.. but I think my switch is almost entirely on their documentation. There are many to take in, but the doc itself didn’t “grab your hand and take you along” in a nice way.
  • I realized GameSparks actually is about at AWS level of manual customization! (the same difficulty with less jigsaw pieces) And that’s not nice!
  • All of these evaluations happen in 3 days.

Firebase

  • To sums up everything is just right.
  • Pricing is the most clear of all services I have used. I can see everything in that page. I have confidence.
  • Usually when comparing its pricing vs. feature. In the classic 3 column sale page of every service including Firebase it is this. But if you try out each service for real you will realize the 3rd hidden parameter that is usability. It is the happiness of a developer, not your players. This is very important, as I mainly seek happiness in my life so why not?
  • Firebase seems like a bad deal if you look at just pricing and feature then compare to others, but in almost every other area Firebase give me the most happiness. Working with Firebase is friction-free. The main strength of Firebase is this. It is hard to evaluate and hard to advertise because you must put some time into each service to realize how “smooth” it is. (Not the “smooth” in connection speed, etc.)
  • The plans are interesting that the middle one is not necessary a middle-powered plan. Every plan has its strength. Fixed plan is very interesting. You have no fear of price growing at all. But for me I am using the scaling plan as my use is currenly much less than the fixed plan.
  • The grouping of their “things” that you need to wrap your head around is just right. And the docs are grouped accordingly. It’s just database, authentication and storage for me.
  • Tutorial document is actually fun to read. Every topic get its point across to me. It is ordered nicely that it almost feel like playing game and passing stage by stage reading the document.
  • Going into each page, I can’t believe how minimal the UI is. I thought something must be missing but it is not. Firebase nails this point. Everything is simplest AND the most flexible. Where in other services it is either the most flexible or simplest.
  • The details are hidden in Google Cloud Platform, which you can adjust things like your storage’s region.
  • The database rule is powerful. And their Bolt compiler helps writing them fun and reduce error. It is easy to take account for which user can do what by doing path check with the UID. In AWS making an IAM is not as fun as this. Also the idea that just this rule controls everything is appealing for me. No more switching pages like in AWS.
  • The database rule simulator helps me a ton. I just put the JSON that does not goes through in the game here and it highlights the line that invalidate it. In AWS, I can never know what’s wrong…
  • API Documentation looks nice. A whole lot better than AWS’s. There are texts that looks like some human written it for me to read.
  • When I set Firebase up, their firebase-tool have very nice walkthrough. When I use it in Unity, the approach of downloading a config file vs. copying various strings in AWS already said a lot to their usability.
  • C# API is a joy to use!! I like a lot how they use Task for their async ops. No one have wrote the API this neatly before. And how you use .Child to navigate the database? How you just call .SignIn__ to sign in and it just works? These things impressed me as they show up in the intellisense. Because other company does not get this right.
  • Blank NoSQL database is great. With simple rules that I took few minutes to write, I can have inventory, leaderboards, etc. that other services “assumed” for. Unlike other services, I have the understanding more in Firebase. Like I said before, blank canvas does not equal more work. Prepared environments in PlayFab, GameSparks actually result in more work for me. In learning, in error fixing, etc. Using Firebase is just a database. What you learned will translate to all the things in the database domain, resulting in more techniques.
  • The real time database admin page really updates in real time. That’s a surprise. In PlayFab I need to refresh to see player’s updated data, for example. It’s great for testing your game.
  • Firebase is with Google so it is kind of an industry standard, more than game-specific ones like PlayFab and GameSparks. The feeling is like with AWS, maybe if I learn it I could use it to land a job in the future.
  • Free analytics, free e-mail sending service. Unlike Unity Analytics, your data is not locked out by the pro plan. I don’t know how will this compare with AWS mobile analytics, but I will use the Firebase ones to see this.
  • The admin screen is the most clean of all competitors. You might think it is just a little thing… but I think it means a lot for me.
  • Their beta Cloud Functions is so cool. (It’s equivalent of AWS Lambda, PlayFab Cloud Script, etc.) You sync JS file from your project! No need to use the editor in the web. And that sync folder is in a node environment! You can have all the node packages you want to use! It’s a web app after all, so this is very exciting and sounds like a lot of possibility + the less setup possible because NPM and node handle all the things.

That’s why I am currently with Firebase. Firebase loses in every point on the surface until I try it and realize their wonderful details. Usability doesn’t sell, but it’s very important! Developers!