We originally published this article on JAXenter.com: https://jaxenter.com/serverless-nutella-171333.html
There is an interesting discussion going on around how Serverless is more of a spectrum rather than a binary choice.
The move towards the Serverless-end of the spectrum builds upon a decades-old trend, which is why Serverless is here to stay.
“It’s the abstraction, stupid”
As much as the economy plays a key role in political developments, abstractions are fundamental to the complex waters of software engineering.
The need for abstraction is what sparked the Serverless model in the Cloud. This is decades-old in our industry.
It has happened with programming languages. We went from the lower-level ones — Assembly, C, Java — to the higher-level and increasingly popular JavaScript and Python. Also with paradigms, going from procedural to object-oriented and functional programming.
Yes, several factors were behind these evolutionary courses, but very few would deny the fundamental role played by the need for abstraction.
Think for a second: what would the web look like if every-single-developer had to understand and deal with memory allocation or parsing TCP/IP packages?
Abstraction delivers speed, simplicity, reusability, and collaboration. They scale much better and enable building complex systems out of simple, battle-tested building blocks. They are at the heart of the exponential growth of the internet industry as we know it.
Shortage of resources
During World War II, chocolate became an expensive luxury in Europe. An Italian entrepreneur decided his fellow citizens deserved some affordable sweetness during such tough times and invented Nutella.
A shortage of resources always leads to searching for alternatives and solutions.
What shortage does the software industry face nowadays? CPU or memory? We have much higher and cheaper hardware capacity in an earphone than in early space rockets!
Humans are in shortage. More precisely, brains that are able to write quality software code. And their time costs a lot of money. Tens — or hundreds — of thousands of dollars every year. For a single brain.
That is one of the key factors behind the popularity of higher-level programming languages. They are much faster to develop with and save expensive brain time. It can be up to 3x faster to write a solution in Python than Java, for example (I know, eyes will roll because of this statement — but you get the point here).
This is also one of the key reasons behind the adoption of serverless: it makes developers more productive and speeds up time-to-market by abstracting away time-consuming infrastructure configuration and management.
This is also one of the key reasons behind the adoption of serverless: it makes developers more productive and speeds up time-to-market by abstracting away time-consuming infrastructure configuration and management.
The internet is a giant gluing machine
Internet services are overwhelmingly just gluing tools.
Look at Google. It glues data from scraped web pages, past search intents, click-through streams, etc, and compiles into a list of relevant URLs for each of our interests. That’s it.
As lower-level languages are yielding space to their higher-level counterparts, server-based infrastructure is quickly being supplanted by serverless ones. It’s a no-brainer and non-stop trend.
Serverless is just more suitable for building solutions in a giant gluing industry that is short of developer brain time.
What about the spectrum?
When it comes to technology, it is rarely a binary choice.
Lower-level programming languages provide all values of being closer to the metal: a high degree of control over the hardware, super-fast processing speed, etc.
But CPU is rarely a performance factor for workloads that are heavy at parsing data and networking. Python and JavaScript are great for data gluing, and their slower performance is usually not a problem. Until it is…
Enters the spectrum: Python can be combined with C, for example, when we need the best of both worlds: abstraction, developer productivity, and performance.
The same rationale applies to Cloud infrastructure. Serverless is becoming ubiquitous for web back-ends, just as JavaScript and Python. But it will be combined with solutions leaning towards server-based when necessary.
Source: AWS re:Invent 2018: Accelerate Innovation & Maximize Business Value w/ Serverless Apps
The future of cloud applications looks to be a predominantly serverless stack that relies on some components running on server-based solutions for particular needs. Serverless comes with its own way-of-doing-things and its challenges as well. Developers building cloud back-end systems should adapt and start mastering this new serverless mindset. For that matter, this Cloud Knowledge Base may be a good starting point.