Serverless is a hot topic in the software architecture world. We’re already seeing books, open source
frameworks, plenty of vendor products, and even a conference dedicated to the subject. But what is
Serverless and why is (or isn’t) it worth considering?
To start we’ll look at the ‘what’ of Serverless where I try to remain as neutral as I can about the
benefits and drawbacks of the approach - we’ll look at those topics later.
What is Serverless?
Like many trends in software there’s no one clear view of what ‘Serverless’ is, and that isn’t helped
by it really coming to mean two different but overlapping areas:
Serverless was first used to describe applications that significantly or fully depend on 3rd party
applications / services (‘in the cloud’) to manage server-side logic and state. These are typically
‘rich client’ applications (think single page web apps, or mobile apps) that use the vast ecosystem
of cloud accessible databases (like Parse, Firebase), authentication services (Auth0, AWS Cognito),
etc. These types of services have been previously described as ‘(Mobile) Backend as a Service’, and
I’ll be using ‘BaaS’ as a shorthand in the rest of this article.
Serverless can also mean applications where some amount of server-side logic is still written by
the application developer but unlike traditional architectures is run in stateless compute containers
that are event-triggered, ephemeral (may only last for one invocation), and fully managed by a 3rd party.
One way to think of this is ‘Functions as a service / FaaS’ . AWS Lambda is one of the most popular
implementations of FaaS at present, but there are others. I’ll be using ‘FaaS’ as a shorthand for
this meaning of Serverless throughout the rest of this article.
Reduced operational cost
People (operation/development) cost
BaaS - reduced development cost
FaaS - scaling costs
Optimization is the root of some cost savings
Easier Operational Management
Scaling benefits of FaaS beyond costs
Reduced packaging and deployment complexity
Time to market / experimentation
Repetition of logic across client platforms
Loss of Server optimizations
No in-server state for Serverless FaaS
Deployment / packaging / versioning
Monitoring / Debugging
API Gateway definition, and over-ambitious API Gateways