Don't Be Too Hasty To Do-It-Yourself or Pick-Something-Off-The-Shelf

A common question I get from folks that want to create an app or website with a backend system is what I would recommend they choose for a toolset. Should they use something baked into the platform like iCloud? Should they use a multi-platform service like Parse or Heroku? Should they write their own backend system from scratch?

The answer? It depends.

Honest. That's the truth. That's not an attempt to evade the question.

Rather than immediately jumping to answer the question, I always ask my own question to gain more context:

What are you trying to accomplish?

There are two different ends of the spectrum for that question. On the one hand, you have the Marco Arment (formerly of Tumblr and Instapaper) camp:


The common wisdom, which Justin suggests, is to go directly to a highly abstracted, proprietary cloud service or a higher-level hosted back-end — the kind that are so high in the clouds that they call themselves “solutions”. But the “BaaS” landscape is still very unstable with frequent acquisitions and shutdowns likely, and hosting on VPS-plus-proprietary-services clouds like Amazon Web Services or higher-level services like Heroku or App Engine can get prohibitively expensive very quickly. Developers who build everything on these services by default would probably be shocked at how cheaply and easily they could run on dedicated servers or unmanaged VPSes.

On the other hand, you have the Brent Simmons (Q Branch / Vesper) camp:


Well, my first thought was I don't want to run an actual server. I don't want to do that. Life's too short; I have to write code.

I often see debates on Twitter, blogs, or podcasts about the merits of both approaches. Depending on the particular biases of the author or host, the result is typically choosing one of the two extremes. Before jumping into one side or the other, however, it's important to understand the fundamental assumptions being made and what each side is attempting to accomplish.

The fundamental assumptions behind the Do-It-Yourself side, as exemplified by Marco, are that you are trying to create something that will need the greatest amount of flexibility and independence. By picking this extreme, you are deciding that the control over your own destiny outweighs the burden of creating and continuing to maintain your own backend solution.

The fundamental assumptions behind the Pick-Something-Off-The-Shelf side, as exemplified by Brent, are that you are trying to create something that will need the least resistance in reaching fruition. By picking this extreme, you are deciding that the effort saved by outsourcing outweighs the risk of not completely owning your backend solution.

Of course, these are two opposite ends of a spectrum. The solution that meets your particular needs will probably fall somewhere in the middle.

By all means, if you are intent on creating The Next Big Thing, then it makes sense to do things yourself and not be at the mercy of platform owners. However, if you are building something as a hobby then it makes sense to offload the things that aren't core to your interests.

It also makes sense to consider whether this is intended to be the start of a business or is intended to be a learning experience. In the former case, you have to weigh the tradeoffs between controlling your livelihood and getting to market quickly. In the latter case, you have to weigh the tradeoffs between focusing on breadth versus depth.

Folks, don't be too hasty to do it yourself or pick something off the shelf. It's not a simple decision.