The world of BAAS, or MBAAS, was shocked the past week with the announcement made by Parse on it’s site:
Parse’s hosted services will be fully retired on January 28, 2017. We’re proud that we’ve been able to help so many of you build great mobile apps. Read more on this announcement and what this means for your app here. Thank you for using Parse.
The web was/is filled with people set on fire, running in circles discussing why this is happening, posible alternatives to move on to, and migration plans to other providers. Here I will present my approach to this discussion and a possible plan to move forward without too much hassle involved.
There are many alternatives to Parse and they are all good options. The main difference lies on the set of features and pricing conditions they offer. For this study, I will not be measuring the cost of migrating from Parse but If you have a big portion of your business logic there, you’ll probably have to also take this into account.
This is the default alternative to Parse. It has many of the features present in Parse but it adds some nice ones like: custom business logic, offline synchronisation management & in app purchase.
Furthermore, it provides means to observe changes on the remote database so you can distribute changes in your model in real time. This is a really valuable feature and combined with user management, schema-less data store and analytics made, Firebase is a great option if you need real time - multiple device communication.
Pricing: from USD 5/m to USD 1499/m with a free plan alternative.
This tool is in a different category where other options, such as Kinto from Mozilla, lie in. The product is open source so you can download and install it wherever you want. However, if you need a cloud service, like the one provided by Parse, then you will need to pull out your credit card. The pricing only depends on the amount of storage, which is indeed pretty convenient.
The set of features is really small but it has what one expect to from an out of the box solution; these are: user management (login, sign up, relation between users), data storage, push notifications, among others. It is a very good alternative for people who only use a small fraction of what Parse provides, probably 80% of us.
Pricing: USD 0 for solution // USD 28/m to USD 555/m for clouding.
This is –by far– the most complete solution. It has all the features that Parse provides plus a guide to migrate your project from it to Backendless which is really handy.
It has everything and more. One feature that seems not to be too common is the ability to plug your custom logic on the server side. I found it to be really useful when extending your business logic especially considering that if a service is lacking this feature it could mean having to move away form it completely.
Other really nice features I can’t find in other solutions are: version handling for your app (e.g. different database schema for each version), market place to extend your backend capabilities and code generation to bootstrap new projects.
Unfortunately, the pricing is quite awful. You have three options: cloud free with functional limits, free standalone (deploy yourself) and fully cloud managed. The cloud free option has complex conditions so it can be hard to keep track of how much you are spending because of the number of conditions affecting the final price. Also the project is not open source so you don’t really have control over how/what is happening and can’t follow the evolution of the tools.
For all the alternatives
I’m an iOS engineer, so my focus is on iOS. All I have to say is that none of the alternatives I saw so far has explicit Swift support. I saw some really active repos hosting iOS SDKs that are all pure Objective-C, but none are Swift.
Don’t get me wrong I love the good old ObjC. It gave me years of fun and satisfaction, but times change and Swift is a kind of standard now. I saw only few setup examples in Swift, and some of the alternatives don’t even provide it (I’m looking at you BAASBOX). I really only write Swift code now and it would be really nice to have an SDK in what the majority of the new apps are using, and are going to use for the all their existence.
So for all of you MBAAS out there: provide native Swift SDK for iOS! Please :)
Build your own backend
While all BAAS services can help you build your backend pretty quickly, they are not a one-size-fits-all solution. Sooner or later you will need customization options not offered by whatever service you’re using.
It is true that getting started is probably much quicker (and cheaper) with BAAS services, as most basic cases have already been solved for you. However, as soon as you need to add specific business logic it may mean that whatever service you’re using is good no longer, thus, you end up having to migrate to another service or a custom built solution. In any case, this ends up being as, if not more, expensive than building your own software from the get go.
Building an API from scratch can sometimes seem like a daunting task, but in reality there’s a lot of code than can be reused to build a reliable API for your business. Frameworks like Django remove a lot of the hassle involved, leaving you to care about the logic involved, which in the end is what matters.
A custom made API not only gives you total control over its behaviour, it also allows you to take care of other non-functional aspects, such as other software you depend on (e.g. DBMS), how it’s hosted and served, how data is backed up, etc. An interesting side effect of this is that you also control how your service scales and are not being limited by any 3rd party services.
Different BAAS services offer different features, so they have to be looked into before picking one service, but almost always are a good way to quickly set up a simple backend. However, if you plan your backend to grow and add custom business logic, building your own is almost always the best decision.
For further exploration check this collaborative list of Parse alternatives or email me with any question at bruno(at)tryolabs.com.