Thoughts on Parse

Parse is a cloud-based storage framework for iOS applications. Parse supplies an SDK for your application that allows you to easily push and pull data from the cloud-based platform that they provide for you – it’s all included. With any kind of persistence on a mobile device comes the obvious problem of offline support – Parse solves this problem with delayed syncing and query caching.

I first heard about Parse from another iOS developer who was particularly excited about the concept. We discussed it at length – the implications being that you wouldn’t need to do any server programming for things like user authentication or simple data storage. The part that I saw as especially appealing was that Parse handles all offline syncing for you – if the user is temporarily without a data connection the data will simply be synced at a later stage.

Some minor issues

I had the opportunity to use Parse on the last app I worked on – we needed basic user authentication as well as some simple data storage (tied to the user account). I found the initial integration to be reasonably straightforward – getting user authentication plugged in was pretty simple.

There are however a few issues I have with the SDK – for example, you have to choose between saving an object immediately or having it sync when a connection is available. It feels rather strange having to make these types of choices in code – it’s very rare that you have the necessary context to be able to make these types of choices. There are also a few limitations – for example, if you’re uploading a file you cannot do delayed syncing.

Querying also has a few annoying glitches. You can perform offline queries (again, I’m thinking of the scenario where the user doesn’t have a data connection) and if the query has already been performed you will get some cached results. However, you need to specify the caching policy when performing the query – again, it’s very rare that you have the necessary context to be able to choose the best caching policy. Even worse, if you are in offline mode the cache will not be invalidated or updated if you are adding or changing objects. This can lead to some strange results and requires you to do the type of coding that a framework like this is supposed to take care of.

There are a few other minor issues – for example the query interface on the website is really unfriendly, but it’s more of a minor annoyance than a real issue.

One major issue

The most alarming issue is the service uptime. On average the parse api goes down for about 5 minutes every 2 days. Interestingly enough Parse has a status page (status.parse.com) which never indicates an outage even when the server is returning 500 errors (which is the regular outage I’m referring to). I find this especially troublesome since the only explanations I can come up with is that Parse either doesn’t care or (more likely) they’re not able to detect that they had an outage.

This will probably be a complete dealbreaker for most apps and it has definitely discouraged me from using Parse in the future.

Alternatives

The idea behind Parse is still very powerful – being able to simply plugin to a cloud-based data store and having offline support would solve some real headaches for many iOS applications.

Helios is an open source framework which seems like a viable alternative to Parse. It is maintained by a single developer (Mattt Thompson) and offers many of the features of Parse, although it appears to be more of an API than an SDK. In any case, you are responsible for the hosting. Normally I would see this is a negative, but obviously it’s a better solution than using a service with bad uptime.

If anyone has used Parse without these kinds of issues I would be very interested to hear more about it. Happy coding.