  Serverless computing -- an emerging cloud-native paradigm for the deployment
of applications and services -- represents an evolution in cloud application
development, programming models, abstractions, and platforms. It promises a
real pay-as-you-go billing (with millisecond granularity) with no waste of
resources, and lowers the bar for developers by asking them to delegate all
their operational complexity and scalability to the cloud provider. Delivering
on these promises comes at the expense of restricting functionality. In this
article we provide an overview of serverless computing, its evolution, general
architecture, key characteristics and uses cases that made it an attractive
option for application development. Based on discussions with academics and
industry experts during a series of organized serverless computing workshops
(WoSC), we also identify the technical challenges and open problems.
