IaaS vs PaaS vs SaaS for Dummies
Twenty years ago there was only a handful ways to develop an application. Today we have nearly unlimited choices and there is no definite answer to what the best solution is. There are only better and less good solutions for each problem to be solved. AWS have over 200 services. If you want to, you could start trying to categorize all of them into different XaaS systems (IaaS, PaaS, SaaS, BaaS, FaaS etc...). I wouldn't do that though. Treating 200 services as six or maybe seven different solutions isn't meaningful to me.
With that said, I must mention that it's still important to know about XaaS terms. When your colleagues are discussing how to design an application or service it would be a great start knowing some basic XaaS terms. Learning what different XaaS abbreviations means is like learning the first words in a new language. Let's therefore start diggin' into the three most common ones, and the legacy alternative, to host applications on-premises, i.e. on machines you manage yourself.
Papa would be proud
On-Premises vs IaaS (Infrastructure as a Service)
To understand the difference of various XaaS solutions, we need to understand the layers required to develop an application. First thing needed is some network peripherals and a machine with some attached storage. Either we run it on-premises or in the cloud on some kind of XaaS solution. Some XaaS products are actually configurable to run on-premises as well, but let's not get into that.
A machine isn't enough to run an application, we also need an operating system. If your are not using any XaaS solution, then it means you are hosting the operating system yourself on your own machines. If you however let a cloud provider run the machines and provide you with an operating system, then you are using an IaaS.
IaaS is a wide notion. Many providers offer multiple services that all falls under the broad category IaaS. Normally it means that you only need to configure what kind of machines and how many machines you want to run, and also what operating system you want the machines to use. From there it's your responsibility to configure the operating system and run your application on it. That means that when you are using an IaaS, you don't have to care about managing hardware like network gears, hard drives, machines etc., they are provided by the IaaS provider. You also often get to pick an operating system, but you may need to configure it yourself.
You don't need to provide your own machines and networking when using an IaaS. The IaaS provider handles that for you
Example of IaaS Providers
DigitalOcean, Amazon Web Services (AWS), Microsoft Azure, Google Compute Engine (GCE) all provide different IaaS options, e.g. Amazon EC2.
PaaS (Platform as a Service)
Configuring and securing machines and operating systems can be a real hassle. Especially if you aren't sure about how many machines you actually will need. Many cloud providers therefore offer you a PaaS solution. What it does is to take care of configuring the operating system and runtime environment for you. The only thing you need to do is to provide your code and some environment variables and other kind of data and configurations your application consists of. You don't even have to install the dependencies yourself. If you have a package.json file (Node) or requirements.txt (Python) the PaaS will automatically detect and install the packages you have listed. So on top of all the features an IaaS provides, a PaaS also handles the operating system and runtime environment for you.
A PaaS additionally takes care of the operating system and runtime environment for you
Example of PaaS Providers
The regular cloud giants obviously got PaaS solutions, like AWS Elastic Beanstalk and Google App Engine. But there's also other popular alternatives such as Heroku and OpenShift.
SaaS (Software as a Service)
So, what is left? A PaaS already handles everything expect your application and your data? So what does a SaaS do? Well, it takes care of everything for you. You don't need to write the application nor setup a database. They have already written the application on your behalf and they even keep maintaining it for you!
Well, most likely you will need to pay for it
What should you do then? Simple answer - write another application or integrate your application with the SaaS. You basically paying for a service that you aren't able to or don't want to develop and maintain yourself. There exists both SaaS solutions for companies (B2B) and for private persons (B2C). A SaaS is any service that a company provides for customers or companies to use.
I think some examples would serve well here. First out, Slack. Slack is a B2B SaaS which companies can use as a communication tool within a company. The company that purchases Slack's services can use it just for writing messages to teammates or choose to integrate it with their own services or even other SaaS solutions. An integration could be as trivial as receiving a message in Slack when one of you own applications experience trouble in production.
In contrast, Google Drive is a B2C example of a SaaS. End-customers use it to store their personal files. But it's not for consumers only, it's possible for developers to integrate it in applications they develop, e.g. by uploading a file to a user's drive from within an app.
SaaS products are ready to use as is or to integrate with your own services
Example of SaaS Providers
Dropbox, Twilio, Adobe and Office 365 offer different kind of services which are treated as SaaS systems.
An overview of on-premises, IaaS, PaaS and SaaS. Your company is responsible for the blue boxes and the provider handles the gray ones on your behalf
Other Types of XaaS Systems
There's as many types of XaaS as there are letters in the alphabet. People love making them up, and I do like writing them down. I won't hold you up any longer today. Rather I will consider writing a second and maybe third part of this article if people enjoy it. Would maybe write about BaaS, FaaS and CaaS or giving suggestions on what kind of XaaS you should use for different types of projects. If that sounds interesting, make sure to bookmark my blog or follow me on DEV not to miss any upcoming articles.
All these XaaS buzzwords can be difficult to learn. IaaS, PaaS and SaaS are the three most widely used ones. The basic meaning of these words is how much code, configurations and hardware you need to provide yourself and to what extend you let other companies handle it for you.
If you choose to use an IaaS you will need to do most of the work yourself. You will get the underlying hardware as a service and the rest is yours to handle. PaaS lifts it up one step closer to the cloud, it handles both the operating system and the runtime environment for you, which means that code and configurations is what is required from your side.
You don't always need to develop every service yourself. There's a lot of great developers out there bringing up terrific services. When you pay for one of those, either to integrate with your own services or to use as is, you are in fact using a SaaS.