The guest post was written a couple of months ago, but due to the release of V3, it has been delayed until now. In the meantime, the company StackMob has announced that it will discontinue its services. The observations and thoughts behind selecting a BaaS are still valid though.
Written by @principe
With the availability of BaaS (Backend as a Service, red) like Parse, StackMob, Kinvey and many others; developing a game powered by a server has never been easier. As most people know we indie devs usually suffer from a lack of resources to fund specialised expertise in particular areas needed to complete a game. For me one of those areas was server-side programming and management. While I’ve had some experience working on server side programming with Java, it’s really not something that I (or most devs) want to deal with. It’s a huge beast to tackle, especially if you’re like me working as a one-man team.
For my second app, Ention Wars, I needed a server to help manage game data and deliver the experience the game needed to deliver to customers. So I was faced with few options, either learn to build/manage a server on my own (learning curve + lack of expertise), hire someone else (costly) or use a BaaS (least risky). The choice was obvious, so I had to use a BaaS.
Before I talk about picking and choosing a BaaS and advice on finding the right one for you, please note that my perspective is coming from an indie dev who had little expertise on advanced server management and had little knowledge about BaaS when I first started.
At first picking a BaaS seemed easy, I just had to read a few guides, take a look at the APIs and choose one that was the easiest to implement. For a while this was what I used to choose my backend provider and at the time it was sufficient. For most devs this is very likely the only factor (along with price) that they will consider before they choose one, at least initially. With this initial phase you can expect spending about a day at most to get everything hooked up and ready to go, since most of these services offer very user friendly documentations that makes it easy for us.
For me the real challenge was when the complexity of my game increased. Initially all I had to worry about was the schema and calling APIs but when I had to add additional backend requirements it became clear that some BaaS services are more suited to certain projects than others. My consideration set for BaaS extended from usability and price. I had to consider API Requests & limitations, image storage services, push notification limits, in-app purchase server validation, social media integration, analytics, custom server side code, exportability of data and support. So as you can see the list of factors to consider grew quite a bit. But I can assure you these are extremely important factors to consider.
Choosing a BaaS
I narrowed my initial choice for a BaaS based on popularity, maturity, usability and those that didn’t require me to step out of the Objective-C language; at the time the two BaaS that fit the bill were Parse and StackMob. I’ll talk about some of the factors I mentioned above below.
API Request & Limitations
For me this was the most important factor. Because the nature of the game I’m building requires constant requests to the server, I had to choose a BaaS with the best offering for API requests otherwise it could be very costly for me. StackMob offers unlimited API requests and does not impose burst limitations on you. Parse introduced additional limitations where the number of requests are limited per second. You have to write additional code to test and make sure you handle an error they give you when you hit this burst limit.
I tried implementing both and honestly I spent almost a whole month debugging and trying to get StackMob CoreData working perfectly. At the time it had several issues that made it hard to manage, especially for someone who did not specialize in CoreData. Parse took about two days to implement, but with the API request and burst limitations I found myself having to write additional code to minimize the API requests. I spent a week rewriting code and in some instances game logic, in order to cater for Parse’s API request limitations. At a later stage I realized that I didn’t actually need to use StackMob’s CoreData, they have a simpler and much easier to implement DataStore API, (in terms of usability it’s on par with Parse’s APIs) which is what I ultimately used for my game. It took me about 2 days to reimplement the logic from Parse to the StackMob DataStore API, and of course zero cost of unlimited, unrestricted API requests.
Support & Community
Initially I didn’t care too much about support because I often just figure it on my own with Google, but sometimes you just need to look for support that you can only find from that BaaS’ website. Honestly I found it difficult to get support and find specific solutions with StackMob. The community is just not as active and now they’ve started charging a ridiculous price a month for priority support. At times even for basic support you could find yourself waiting two weeks to get a reply, which can delay deadlines. With Parse I found it very easy to find answers that I needed to know and the replies to my questions were responded to hastily, free of charge of course. So if you’re choosing StackMob, get that coffee ready, keep a level head and get used to Googling.
Data Flexibility and Management
This ties in a bit with my point above because with StackMob you can’t simply export your data or transfer them from the DEV environment to PROD because they don’t provide the option for you. You would have to contact them directly, which to this date I have not been responded to. So I’ve had to manually transfer data that I needed to from the DEV environment to PROD prior to release, otherwise I wouldn’t have been able to release the app. Make sure to plan ahead for this one, hopefully they’ll change this in the future. When I moved from Parse it was very easy to export my data and there was no need to hassle the busy Parse team about exporting data.
Image Storage Services
If you’re creating an app that requires image storage services, StackMob uses Amazon S3 so you’re bound by bandwidth limitations there (ultimate cost of around $500+ a month for a big app 100MB per user allowance). I believe Parse doesn’t limit bandwidth, but of course you’re limited by API request and burst. For my game I thought about using this to reduce the initial download size of the app for 3G networks, but ultimately ignored this factor. Just remember if you’re going with Parse consider the burst limit of initial users all downloading images for your app on launch day. There is a limit of 20 requests per second for the free plan and 40/second for $199 a month. The exact specifications of how this is calculated is a bit of a mystery, it hasn’t been revealed by Parse.
In-app purchase validation
For this I use Parse to validate my in-app purchases. Parse offers a built-in API for this, which makes it extremely easy for us devs to validate purchases and reduce the number of ‘hacks’.
So with so many different factors to consider and plenty of options (and competition) among BaaS which one should you pick? I think it personally depends on the project. Ention Wars needed to have unlimited API requests because I simply can’t afford the number of API requests I needed to feel safe, so I went with StackMob for my core BaaS service. But I use Parse for in-app purchase validation and other things. I figured that it will be impossible to consume 1 million API requests a month for in-app purchases, so I should be okay there. Like me you can always use multiple BaaS if you want; if you don’t mind a bit of complexity. The competition is intensifying out there so it’s only good for us indie devs to get the best offerings. To those reading this blog post good luck with your project and choosing your backend provider! Hopefully my experience going through this has given you a bit of insight into the factors to consider when choosing a BaaS.
You can visit principes site here
You can find Parse here