Advantages and Pitfalls of Serverless Architecture
There are many definitions of what serverless is. NIST or the National Institute of Standards and Technology defines serverless as providing resource pooling, rapid elasticity, and measured service in an opaque manner to the end-user. On the other hand, Knative has its definition of the same. Their understanding of serverless is based upon the outcome. If a system provides autoscaling and fine-grain metering in an opaque manner, then it can be deemed serverless.
This serverless environment is created and run by BaaS (Back-end as a service) provider. Now the main idea behind serverless architecture is that a developer can avail offshore help in testing, deployment, and maintenance of an application.
The serverless architecture enables the developer to cut down investments on in-house infrastructure and develop and test the code on the cloud, improving productivity manifold in the process.
These advantages could also move, potentially, more applications onto the cloud and increase the adoption rate of BaaS in the IT enterprise. Also, since these services can be availed on a pay-as-you-go basis, it can further increase their popularity amongst SMEs as well for their need. This shift to serverless was triggered when Amazon Lambda was launched in 2014. The idea behind Lambda was to improve the developer experience and reduce the overhead management costs of the development and deployment of applications in the cloud. This created a lucrative option for app development services as it also had more granularity in its billing. Many serverless services then entered the arena with their offerings. The end-user decides which tools to use and pays for the same. Companies such as Microsoft, Google, and many more started providing the necessary tools for monitoring, testing, debugging, security, maintenance, etc… But there are two sides to all coins and just like that, there are advantages and pitfalls of this piece of tech as well.
Since you can choose from a wide variety of services and on a pay-as-you-go payment model, it allows you to pay a fraction of the price per request. Start-ups can slowly infuse themselves in the market without investing heavily in their in-house infrastructure and ease themselves without the gigantic bills for a small chunk of the traffic that normally is the case. This also allows the developers to take a customer-centric approach while developing their applications and make the entire experience as enriching as possible.
Reduction of HR Costs
In-house infrastructure costs do not just include hardware or software. It also includes salaried professionals, maintenance, upgrades, and many more costs. A scaling business will need to first hire new personnel, and this will not only include onboarding costs but also require a probation period which is also an investment. With serverless architecture, you also are transforming your workforce.
Hiring select people for minimal infrastructure maintenance and primarily for application development allows institutions to maximize their ROI. This also ensures quality training so that personnel are equipped to create fully functional applications with fewer bugs and seamless functionality.
If you are making an app that can be the next Zoom or the next Pied Piper (a Silicon Valley Series reference), you need to be on your toes in terms of the traffic. Now, you also will have to consider if you and your team are ready for such a commitment to an in-house infrastructure or not.
For many start-ups that may not be the case and hence their optimum choice would be to avail such serverless services. Reliable serverless vendors will ensure that you do not lack any support in terms of managing traffic in their back-end services. You can be carefree and choose your rate of growth.
Focus on delivering the experience
If you want to deliver the best, you need to test your application in various environments, through various test parameters using various tools. Now, this may not be possible on custom tools since they may or may not be up to the industry standards and hence working with a tool that has been specifically designed to bring out the best in your applications.
Choosing from a plethora of tools that these providers have to offer will give you lots of diversity and metrics to measure how your app does in real settings. Developers can conduct beta tests on a controlled group of users or a small chunk of the traffic to understand what more can be added to their app services. This only adds to the success of the app.
Removes the necessity of server management and enables Polyglot architecture
Serverless architecture allows for low-level coding or citizen coding by eliminating the need for server management, scaling, HA, builds, and much more. Hence, this reduces the entry barrier for programming complex backend systems.
It also allows for polyglot architectures where multiple languages can be used together. This is a big win for coders as many developers are well versed with specific programming languages and stitching the code together may at times become quite a tedious process. To specifically avoid that polyglot architecture allows for an environment where this can be done. This is very healthy for an application engineering institution. This also creates more opportunities for coders from different backgrounds to come together upon a project and cut down on the typical timeline by parallelly working on different pieces of code and then bringing it all together.
Takes time to understand well
There is a lot of content and many communities/ discussion forums out there that may give you concrete solutions and procedures as to how you can utilize these tools better but with serverless, there is a steep learning curve.
Also, migration to serverless will take some effort. You will have to break down your monolithic process into microservices. This will not only require you to learn about the same but to do it seamlessly you may need the help of experienced professionals who are well versed with serverless tools and provider norms.
Working with a vendor means that you will be operating around in their playground and it will be done by their rules and regulations. It is not going to be easy to port your applications to Lambda if you have already set it up on Azure.
Now, this also applies to the language you have coded your application in. Currently, only Python and Node.js users have the freedom to choose between service providers as most of them allow for applications to be coded in these two programming languages.
So, here choosing the right service provider is of paramount importance.
Increasing functions add to the friction
As scaling happens, the number of functions in an application grows, which may eventually add to friction in serverless operations. Many functions are developed in separate containers. Also, they can be very hard to debug at times.
Sometimes, integration logic, if pushed into the DevOps scripts can muddy the overall architecture.
Unsuitable for long-term tasks
Some serverless platforms such as Lambda allow for a five-minute window for task execution. If it takes more than that then it requires you to call another function. For tasks that take a short amount of real-time or involve near real-time processes such as mailers, serverless can be a great option. But for tasks such as uploading video files, you will need additional FaaS functions, or they can be executed with “server-full” architecture.
Another disadvantage of serverless is that, by design, it is an opinionated solution. If the programmer conforms to the model, the architecture is agile, but it can become clumsy if the programmer resists the model.
The same can be said about programming languages as well. With training in a programming language, it takes a lot of time to become an expert in a domain, and, rarely, people can easily switch languages either. This creates rigidity and may limit serverless adoption in some cases. However, this happens to be from the standpoint of a developer and not the architecture since as previously stated, serverless enables a polyglot architecture.
What awaits us in the future of serverless?
This pandemic has revealed to many minds how the landscape of application development is rapidly changing. Nowadays, developing in/availing a serverless architecture for your processes is an essential part of it. However, for IT enterprises, which have already developed much of their workflow (post investing a lot of resources in establishing their current process), migration to a serverless way of life might not be the most feasible thing to do.
Some possible ways serverless architecture may help us can be:
- IoT Applications
- Virtual Assistants and chatbots
- Image Rich Applications
- Agile and continuous integration pipelines
- More robust customer relationship management tools
And many more as developers keep looking to create efficiency in the process. The inclusion of more languages to improve flexibility is one avenue that will help diversify the possible cases for implementation. There is no disputing whether technology is here or not. It is here, and here to stay. The question now is what different use cases we can expect to solve from this.