You may have heard of “Cloud Computing” throughout the recent years, but what exactly is it? What does it have to do with Mobile and how can it impact app development? There are many different forms of Cloud Computing, 3 of which I will go over with examples of how they can help (or be a deterrence) to app development.
Why Cloud Computing?
It reduces development and maintenance costs. As well as increases any combination of availablity, scalability and performance. When you transition to a Cloud Computing platform, most of the initial setup is already done for you, which saves time and money. At the same time, you are running on someone else’s hardware infrastructure, which often lies in a huge datacente,r giving you the security of having 24/7 teams dedicated to maintaining high availability/uptime and performance.
This all being said, there are some reasons as to why you may not want Cloud Computing:
1) Data security, 2) Limitations of the platform 3) Ongoing costs. Depending on your needs, Cloud Computing may not be for you. A good example of this may be if you have very sensitive information that absolutely cannot in any way, shape, or form get into the wrong hands. If this is the case, you may want to go for a custom in-house solution. When you build your own platform, on your own hardware, in your own environment you have complete control of everything. You know the only person with access to it is you, while in the Cloud Computing model there could be, although extremely rare with most reputable providers, unauthorized data access by any of the personnel working there. If you’re working with mission critical data, any risk is simply not worth the reward.
Costs are also a very important metric to consider, and in many ways for development, the biggest factor to consider. How scalable does the system have to be? What are the ongoing costs going to look like at the performance/scale desired? And most importantly, how does that compare to a custom solution in-house? Are the ongoing costs going to be greater than the upfront cost of developing from scratch in a short period of time? In some circumstances, foregoing Cloud Computing for a custom solution could mean exceeding the annual expense of a Cloud Computing platform in as little as a week or single day of development. Development time is expensive, so its important to consider the cost comparisons in the short term and the long term for both approaches.
Limitations are also an important factor. A platform should be evaluated carefully, upfront, before a decision is made to use it over a custom solution. Some platforms have crippling limitations, that even when scalability options are increased can fail to achieve what you need to do. The platform may not support a given feature set that you require. Depending on the form of Cloud Computing being considered, you may have more or less limitations.
Types of Cloud Computing
There are 3 main types of Cloud Computing I’ll go over: IaaS, PaaS and BaaS. There are more (such as SaaS, software as a service) but in the context of app development, the previous 3 have significantly more merit.
Infrastructure as a service (IaaS)
At the most basic level, you have IaaS. This is essentially a varying amount of hardware computing power that you can purchase to do anything you want with it. They provide the hardware (and maintain it), while you build whatever it is you need to do on top of it. A good example of this would be Amazon EC2.
When you go for IaaS as your Cloud Computing model you really don’t have feature limitations, as you can do anything you want with it. The whole idea is to let someone else deal with the hardware and any maintenance/scalability while you focus on building your platform with nearly complete freedom. If you don’t want to maintain your own hardware, but want to control everything else and build it from scratch this is a good option.
Platform as a Service (PaaS)
Building on top of the previous layer, there is PaaS. What you get with PaaS is everything IaaS gives you, while also providing everything you need to begin development without the headache of software setup. What this typically means in the context of app development is the platform supports, out of the box, database setup that is practically instant and pre-installed execution environments which allows developers to start developing right away without having to spend any time setting up the necessary frameworks and services. A few excellent examples of this type of service are Google App Engine and Heroku.
When you go for PaaS, at least in terms of app development, as long as the frameworks and features of the platform support what you need to do there are no limitations. You get the varying amount of hardware scalability that can be purchased, just like with IaaS, except this time you don’t have to worry about setting up the basic foundations. You can spend most of the development time and costs on the features, which is important. The only thing to really look at here is the scalability and costs.
Backend as a Service (BaaS)
Some consider this to be the same as PaaS, but I consider this to be more along the lines of a specifically tailored PaaS, a layer on top if you will, to solve a specific set of problems. Which immediately tells you that this will be more limiting than a pure PaaS. A good example of a BaaS would be Parse. They provide a specific set of SDKs to work in various mobile platforms to build your backend. Push Notifications, data storage, data queries and the ability to write server-side code that will function as custom endpoints you can hit to work with the data. It’s really specifically tailored to mobile development.
However, in certain circumstances, you may need more flexibility in what you can do with server-side endpoints. Or a more powerful relational database among many other aspects. If the specific feature set provided by the SDKs is not enough to get what you want, BaaS is very restrictive and you’re stuck. This is why it’s very important to evaluate a platform to see if it will work in the short term, and down the road as well.
This all being said if a BaaS works for what you need, it can be very cost effective since they are by far the fastest (and least expensive) way to get up and running for a server solution.
Tying it all together
Hope this all helps in the decision making process of selecting a Cloud Computing platform if you were considering one for your needs. To summarize, going from an IaaS up to a PaaS or a BaaS will significantly reduce development and setup time required each level up, but the tradeoff is limitations increase the further up you go. Likewise, going from a BaaS down to a PaaS or IaaS will increase development and setup time (especially with an IaaS) but the limitations are increasingly reduced the further down you go.
The tradeoff really is development time versus limitations when comparing the different types of services. Most of the providers offer similar scalability costs. My personal recommendation to solve almost anything would be a PaaS, with a BaaS used in certain situations.