You need two things to run a piece of code:<p>1) Code and execution environment
2) Compute infrastructure to run (1) on<p>Serverless, to me, means that (2) is abstracted away from you. You submit (1) to the serverless service (AWS Lambda for example) and the service figures out how to run it. Serverless does not mean there are not any servers. It is just something you do not need to <i>ideally</i> worry about. Abstractions are leaky though, and they can leak in very mysterious ways the higher up the abstraction tree you go.
In addition to serverless meaning that you don’t have to worry about the compute layer, I take it to mean also:<p>• I don’t need to manage the infrastructure for each of the services I depend on
• My compute and other services are billed based on usage, not for being switched on
• Everything scales up as needed, and just as important, down to zero
There is always a "Server" somewhere. Serverless just abstracts it for you so you don't have a physical server to ssh into, maintain it etc. It also gives you flexibility in terms of running it only when you need to execute certain tasks/functions (e.g. AWS Lambda)
I think of it as the server instrumentation being obfuscated away. I don't really like the name because it seems misleading, but the offerings themselves can be really handy.
Serverless to me just means I don't have to worry about managing a server (as in hardware, OS, updates, etc, etc.) I just have to manage an app/container.