A relative who is making his first steps into the world of programming recently asked me what is meant by the term "serverless".
I have to admit that the term is a bit of a misnomer because all applications eventually run on an actual server. But marketing folks and others like the term, so it stuck. It's a bit like calling credit-card based purchases "moneyless". You're still paying your hard-earned money. It's just that someone is taking care of the logistics of moving the money around for you.
But to actually understand this whole concept of "serverless" we have to step back in time a little bit. And even before we do that, let's define what is meant by the term "server".
A "server" is any computer who provides any sort of service to another computer. That's it. So the computer that is hosting my website is a server because it serves my website to your browser. Likewise, the computer that Google uses to send and receives emails for you is also a server.
So when the internet was making its very first steps it was composed of a handful of giant servers called mainframes. These were located primarily in academic institutions and were used for research as well as for sending messages between each other.
Later on, when the World Wide Web came to being in the early 90's, many computer hobbyists began connecting up their personal computers to the internet and using them as servers to serve up their personal websites, share files with one another, chat etc.
Soon, companies started realizing the monetary potential of the internet and began creating online stores and other digital assets to promote their products. Each company would buy one or more computers, stick them in a specially designed room called the "server room" which would house all these servers and serve their websites from there to the world.
This was fine for a while but probably somewhere around the smartphone revolution (2009ish) the amount of devices and internet usage really started to take off -- vertically. Companies were faced with a whole new breed of problems. First, there was the issue of load. Their servers were getting "hit" a lot more and a lot harder and they needed to deal with that. Second, their websites are becoming more and more crucial to their operation and "being down for maintenance" was no longer a viable option. Third, they were constantly putting down fires caused by malfunctioning hardware.
But at the end of the day, the vast majority of these companies were not in the computer business and could not care less about it. They just want to have their website up and sell their products.
Around that time, a little-known company called Amazon identified this issue and said to these companies: "hey, we know all this server maintenance thing is really hard. So why don't you let us do it for you? you can rent however many servers you want from us and we'll charge you by usage." And many companies did. And the "cloud" (rented servers) was formed.
So companies started shutting down their internal server rooms and switch to the "cloud". So now instead of going to dell.com, ordering a server, waiting two weeks, installing it in their server room, configuring it etc. they just click on a few buttons on their Amazon cloud console and voila they have a new server ready to go.
This was great for a while but now companies were facing new problems: First, the amount of traffic that was hitting their websites was going up and down throughout the day and so they needed a strategy to turn these servers they were renting, on and off so as to not waste money when the traffic is low and so as to give great experience to all customers when traffic was peaking. Secondly, they needed to monitor all these servers and lastly they needed to make sure that there are servers in different geographical locations around the world in case there is an outage (yes, even Amazon goes down sometimes).
So Amazon folks identified this problem and thought: "what if we tell our customers: hey, don't worry about servers and scalability and geographic redundancy and monitoring and all that jazz. Just give us your applications and we'll run them for you. We'll make sure it's always on, we'll automatically add more horsepower as needed, we'll distribute it across the globe and we'll take care of monitoring your service for you to make sure it's always alive. And you'll pay us based on the amount of resource that your application consumes."
And "serverless" was born.