Originally published at winterwindsoftware.com.
Like many industry buzzwords before it — "cloud computing", "DevOps", "big data" — debates over the definition of the term “serverless” have become somewhat of a honeypot for pedants.
"But there are still servers involved!"
– Dave from Reddit.
Thanks for that, Dave. 😏
If you're reading an article about anything serverless-related today, there's a fair chance that the author will have stated their definition of the term in the introduction (probably to avoid incurring the wrath of the Daves of the internet).
Experienced practitioners will just skip to the next paragraph, but if you're new to the space, adding some depth to your understanding of the concept is worthwhile.
In this article, we'll walk through the definitions provided by several prominent advocates in the serverless space and extract some common themes along the way, finishing off with me attempting my own inelegant definition.
Note: All emphasis is mine in the quotes below.
We'll start with AWS themselves:
"Serverless computing allows you to build and run applications and services without thinking about servers. Serverless applications don't require you to provision, scale, and manage any servers. You can build them for nearly any type of application or backend service, and everything required to run and scale your application with high availability is handled for you." (source)
The authors of the Serverless Framework share a similar message:
"Just like wireless internet has wires somewhere, serverless architectures still have servers somewhere. What ‘serverless’ really means is that, as a developer you don’t have to think about those servers. You just focus on code.
... You don’t have to actively manage scaling for your applications. You don't have to provision servers, or pay for resources that go unused." (source)
In his definition article, Tomasz Janczuk, VP at Auth0, provides a high-level summation:
"The essence of the serverless trend is the absence of the server concept during software development." (source)
Ajay Nair, Product Manager of AWS Lambda, focuses on the specifics of the tasks which go away:
"Owning servers comes with responsibilities:
- You own how your primitives (functions in the case of applications, or objects when it comes to storage) map to server primitives (CPU, memory, disk etc.)
- You own how your capacity scales to handle your application scale
- You own provisioning (and therefore paying) for the capacity to handle your application’s projected traffic, independent of whether there’s actual traffic or not
- You own managing reliability and availability constructs like redundancy, failover, retries etc.
For me, serverless means activities/responsibilities related to servers are no longer on your radar." (source)
Paul Johnston, ex AWS Serverless Snr DA, gives a pithy, financially-focused explanation:
"A Serverless solution is one that costs you nothing to run if nobody is using it (excluding data storage)." (source)
Paul also points out a common misconception that I often encounter:
"Often in people’s minds, Serverless means that you’re using Functions as a Service (FaaS) which is only one part of a possible Serverless solution."
Peter Sbarski, VP Engineering at A Cloud Guru, gives his take:
"Serverless is about abstracting users away from servers, infrastructure, and having to deal with low-level configuration or the core operating system. Instead, developers make use of single purpose services (such as S3 for storage or Auth0 for identity management) and elastic compute platforms (such as AWS Lambda) to execute code." (source)
Extracting the meat from the quotes above, there are re-occurring ideas around what serverless includes and what it excludes:
- Resource costs must be tightly aligned with usage levels
- Greater focus on application code
- Server provisioning and maintenance
- Active management of service availability and scaling
I'm going to stand on the shoulders of the giants mentioned above and organise these points into prose to give my own definition:
A serverless solution is one where developers are freed up to focus more on application development without needing to worry about provisioning, scaling or maintaining servers (or containers), and whose running costs are proportional to the system's usage levels.
And finally, if you're that person writing an article about serverless and feel the need to define the term for your readers, just copy and paste the following into your post and get back to writing! 😎
👉 Not sure what serverless is? Check out this curation of serverless definitions from the experts.
💌 If you enjoyed this article, you can sign up to my weekly newsletter on building serverless apps in AWS.