Serverless applications are quickly growing in popularity, taking over huge portions of new app development for tiny startups and massive enterprise organizations as well. If the buzz and excitement over new announcements and education on best practices for serverless at AWS reInvent this year is any indication, they will only grow in popularity as time progresses. With no management of servers to worry about, the infrastructure management that cloud providers take care of with serverless applications, teams can simply focus on what matters to them, and more importantly, their customers.
Since it was launched in 2014, AWS Lambda has blazed the path for serverless applications. Quickly adding more and more features each year, it’s truly setting the direction for serverless and redefining how teams develop and manage their applications. With an investment in more powerful functions, orchestration across functions in a workflow, and development tools for developing and testing applications, Lambda has quickly become a powerful development methodology for fast paced teams.
The benefits of serverless over traditional server deployments are myriad. Serverless applications, because they abstract away all the infrastructure management and worry about servers, allow development teams to just focus on the business logic and ensure they are investing in increasing customer value. This means development teams can build and iterate faster than traditional teams, a huge advantage in getting features and ideas to customers faster, providing a huge competitive advantage. This also translates directly to an improved experience for users, and often a more reliable one.
With managed services like Lambda, development teams and organizations can effectively offload the management of infrastructure, hardware provisioning, scaling, and deployment management to a highly skilled engineering organization. Taken this way, it’s like getting a highly effective infrastructure or devops team for free – or at least for a tiny operational cost – only when needed. These services are also contractually obligated to provide high reliability, scalability, availability, and uptime, something very hard to ensure when teams build their own infrastructure.
Serverless applications, because they only require the business logic for an application, result in far less code than similar traditional code bases. Less code is an often overlooked, but critical factor in improving teams and organizations’ ability to scale. Code is effectively debt, and the more that is present, the harder it is to manage. Code adds complexity, makes maintenance harder, and makes bugs more likely to occur. Serverless applications also tend to be somewhat self-documenting as the best practice is to build small, single use components rather than large monolithic code bases.
These smaller components have another benefit as well. Because they are smaller and single-use, they are easier to test too. There are fewer dependencies to mock out or worry about stability with. There’s also less data that needs to be stable. There are fewer complex interactions within a function and it’s harder to miss edge cases because they simply don’t exist. While testing Lambda was a manual and/or tricky process in the past, usually involving having to actually deploy code before testing it, recent improvements to tooling and the test harnesses of the service make it much easier to test locally and as part of pipelines.
These functions are also easier to debug when a problem does arise as there is simply less code to walk through and due to the purposeful limitations of functions, have a less complex call-graph to traverse. Increased traceability and better tools for metrics and logging in the last two years make these functions much easier to debug too. Plus, with serverless, there are no server settings, environment variability, or versioning conflicts to worry about, so only the code has to be diagnosed. Teams can also spend less time debugging infrastructure and host setup and configuration issues.
A huge advantage of serverless is the extension of the idea of only paying for resources that are needed that the cloud introduced and taking it a step further. With serverless, it’s trivial to scale as the infrastructure handles this automatically, making it easy to scale from one to millions, or even billions of requests. It’s also possible to scale down to zero, meaning that teams don’t need to pay for unused capacity or resources and only pay for what they actually use. The cloud introduced this idea with elastic scaling, but serverless is even more powerful as there’s no need to manage scaling at all. There’s also no deployment management to worry about like with machine images or with containers in a Kubernetes configuration.
Serverless also encourages adoption without having to learn a ton of new code, tools, frameworks, or technologies. Services like Lambda allow bringing nearly any programming language (even Cobol is supported) and don’t require learning new platforms. By their basic definition, they abstract away details like platform and framework from the user, allowing teams to just bring over and focus on the code they already know. It won’t take a team or organization weeks or months to learn enough about serverless to become effective.
Serverless as a methodology also integrates well with other modern devops practices like continuous integration and delivery. In the first year or so, the serverless cloud services lacked the tools to easily integrate with popular tools, meaning teams had to either roll their own tools or look elsewhere. Lambda has recently added great integration with code pipelines, and SAM templates make it easy to configure, setup, and automatically run test environments and version code across multiple environments. It’s becoming easier to do advanced CI/CD techniques like Canary and Blue/Green deployments, allowing for much more reliable and resilient deployments.
These advantages improve both the software development practices and experience for development teams as well as the end user experience for the consumers of these applications. Development teams can build faster and focus solely on iterating and improving the customer experience with creative and innovative solutions for their users. Serverless also informs teams and instills best practices around engineering culture, resulting in more scalable and reliable software. With all of these advantages, it’s no wonder serverless is revolutionizing the way engineering teams build software.