The first thing to understand about serverless architecture is that it's not about the absence of server. What it means is that as a developer you are not concerned with server. You provide a code piece to an environment and it will be executed and results will be returned to you. You are just responsible for providing the code piece and generally the code piece has to adhere to some contract, so that the execution environment can understand it. AWS Lambda is an example of serverless architecture.
Serverless architecture is important from the perspective that it saves the developers from dealing with servers and in dealing with deployments. Write code, load it in execution environment and run it. This helps developers in focusing on the core stuff than on other aspects of development.
The current notion of serverless architecture as presented by AWS Lambda however has its limitations. There is limitation in term of compute time and memory resources it can use. So generally they are good to do a well defined piece of work which is time and memory bound. Don't attempt to build a complicated piece of work as part of lambda, as of now.
Hopefully the notion of serverless architecture will evolve more with time. We can expect to see more complicated functionality built and supported in serverless fashion. The key here is to remove the notion of server from maintenance perspective, out of developers way. The other developments that will help in building serverless future is
- Need to build smart servers. Of course someone has to deal with the smartness at server level what we call as server maintenance today.
- The serverless need to know how to scale itself as per the need.
- Issues of authentication and authorization and how the execution context handles them.
- Logging is another area which will have to evolve to handle servereless artifacts.
- The execution environment will have to provide multiple capabilities which are provided by frameworks. For example connecting to datastores, messaging systems etc. need to be handled by execution environment to an extent. This is also relevant from the context of performance. For example creating connection to database every time the serverless code is executed can be costly. The execution environment needs to handle such notions smartly.