Serverless is the idea of taking a bit of code and having it run when an event or trigger is invoked. Can you believe that it’s been a bit over 6 years since serverless has gone mainstream? The vast majority of code that I write ends up in a serverless function. The idea of deploying an entire instance to sit there eating up compute and storage just to run my code seems so archaic. When thinking about this a few weeks back, I realized that this change happened pretty quick!
AWS Lambda was announced back in 2014 to an audience that had yet to see a strong, commercial offering in the serverless space. Sure, we saw Google App Engine release in 2008 for the execution of Python 2 code, but it was a different sort of beast back then. Google Cloud Functions and Microsoft Azure Functions followed quickly in 2016, with Cloudflare coming along with Cloudflare Workers in 2017.
Various online journals had a fun time with this one. Ethan and I even did two Datanauts shows (episode 042 and episode 047) on serverless when it was reaching peak hype status. The serverless memes abounded, with many of the unwashed masses struggling but unable to see beyond the fact that, yes, there are “servers” in a serverless stack. Ugh. 😛
Some of the comments from the AWS Lambda announcement on HackerWeb are chef’s kiss. They really capture the spirit of the moment for those technologists that may have missed out on it.
A few examples:
- “Holy mind blowing awesomeness, this changes everything, yet I feel like this was such an obvious thing to do. So obvious that I can’t believe it is real. This, ladies and gentlemen, is why AWS defines the cloud, they are so far beyond everyone else and still innovating, even and the most basic level.”
- “I’m so torn – on one side this is a very neat thing that’ll save a lot of boilerplate, and on the other it screams of vendor lock-in.”
- “I’d pretty much given up on AWS for compute and moved most everything to Linode and some bare metal servers, but this service looks very compelling for discrete compute tasks.”
- “Full-circle back to mainframe era.”
Opinions were mixed but generally positive. From “defining the cloud” to “mainframe era”, everyone had different ideas as to what serverless would bring. Some worried that all monoliths would be ripped apart and deployed completely using serverless functions, which is parodied here in terms of microservices.
Today, AWS Lambda is “code execution as a service” with excellent event driven triggers and first-party integration to dependent systems and global foundation to run upon. The ecosystem is rich with deployment tools, SDKs, documentation, and even the Serverless Application Model (SAM) to simplify the chore of writing CloudFormation templates for serverless applications.
The Cloud Native Computing Foundation (CNCF) sends out multiple surveys per year to better understand cloud native technology trends. In 2017, they started tracking serverless technologies, with additional data points coming from 2018, 2019, and 2020.
- No serverless at all: 35%
- The percentage of folks who are not using any sort of serverless technology started at 41% in 2017 and ended up at 35% in 2020.
- Note: The 2017 survey says “31% do not” use serverless while the 2018 survey says “37% are not using serverless technology which is down from 41%.” This is where I get the 41% value in 2017.
- Maybe in the future: 14%
- In 2017, 28% of folks had a serverless technology on the roadmap in the next 12 to 18 months.
- That number has continued to shrink, sitting at 14% in 2020.
This is interesting.
Even while assuming some level of bias and response bias, it appears that serverless has quickly filled a role for a finite quantity of organizations. Many of those organizations are running serverless in production. Perhaps we’ve reached a point where the low-hanging fruit has been plucked and serverless has become just yet another set of patterns in the technologist’s tool kit?
The survey does not account for quantity of workloads in operation, but rather the quantity of organizations that are using a serverless technology. Thus, I would make a guess that those saying “no” to serverless are in a situation where it just doesn’t make sense to do so. I doubt that the majority of the 35% of people who do not use serverless are simply unaware that it exists.
These numbers seem about right, if not a little bit on the low side. Serverless technologies are easy to implement individually but require a lot of thought when deployed in great quantities. It requires a contractual architecture mindset, new security considerations, and to think in terms of scalable parallelism that defies traditional 2- or 3-tier logic.
For many things, a serverless pattern is just a better pattern to use. Note that I don’t say “serverless is better.” The pattern is better.
I write serverless applications because they are easy to create, simple to operate, and scale with very little effort. My serverless functions are deployed on a local docker container for testing, packaged using SAM, and pipelined to the cloud via GitLab CI. All of this can be done with Visual Studio Code (VSCode) and a few plugins without having to expose any passwords or credentials anywhere. My code is tested against a variety of Static Application Security Testing (SAST) tools while it builds in the pipeline.
After 20+ years of building, racking, stacking, and operating servers, I don’t want to do it anymore. I just don’t. It’s boring, repetitive, and takes up way too much time. Plus, it’s not hard to do – anyone can rack and stack servers with minimal training. Why would I invest my time in this? There is no reason to walk away from this level of automation and efficiency for the sake of hugging a virtual server.
Please accept a crisp high five for reaching this point in the post!