Blog

Where to deploy – a choice between PaaS and Kubernetes

Tags: ,  ,  

In the evolution of software products as a significant part of the economy, more and more companies are seeking ways to improve their development process. As long as engineering teams opt in for improved efficiency, faster time to market, and ultimately, to a more successful project based on productivity metrics the technology landscape will evolve to offer more options.

Software delivery with a secure process

In particular, one stage in the pipeline – as we commonly call the whole software development process – is application deployment, which can occur with a frequency varying from a few times a quarter to hundred times a day depending on the software architecture and the size of the teams. Let’s delve into the details around software delivery to discuss the options in hand.

One note  here to suggest that for this article we will use the terms deployment and delivery of software with an identical meaning. That’s actually the common case in most software vendors, but it’s better to be clear on it. When it comes to deployment, choosing between Platform as a Service (PaaS) and Kubernetes can bring severe impact to the rest of the development process. So, it should be evident that securing the delivery path, regardless of the option taken, is critical.

DevOps, Platform, Site Reliability Engineering (SRE) roles

As technology evolves during the last decade, the rise of new engineering roles has emerged to address the abstractions imposed from adapting cloud-native environments compared to legacy models. 

The industry embraced DevOps culture to introduce automation in the pipeline, and this way DevOps engineering roles appeared. SRE emerged  almost in parallel to suggest that engineering teams should control the whole stack, from code changes to operations for improved stability in the delivered software. Platform teams build internal platforms to offer organizations’ teams with more flexibility without losing functionality when it comes to application infrastructure.

Building processes based on abstraction layers is, and will continue to be, the right way to scale, yet everyone should look out for increased complexity brought in, especially when this is unnecessary.

Leading the development with an extra responsibility

Nowadays, infrastructure engineering teams are essential in a company to allow developers to work without distractions. Their contribution to make sure that the infrastructure is secure, scalable, and always available is widely acknowledged towards a more efficient development process.

However, many organizations appoint the lead developer to carry out DevOps tasks. Why is that? Because of their high level of expertise and their familiarity with the project, which are required by the engineer who undertakes the role of setting up the infrastructure.

PaaS: the no DevOps option

Since the set of requirements for securing the deployment tasks includes time-consuming activities such as the setup and maintenance of automation tools, management of computing infrastructure resources and choices that enable scaling, there are many software vendors who choose to go for a Platform as a Service solution. 

The landscape of offerings from services like Heroku, fly.io, Vercel, and others provides a wide range of options to find the right fit for your product. Moreover, it is evolving with new services being introduced constantly. 

Teams using PaaS have a head start to many DevOps activities that are built in with these cloud services and are able to offload a valuable portion of their human resources capital to actually make a better software product. When it comes to deployment things get really simple by only adapting to the model suggested by the provider. In most cases you just need to connect the code repository and the rest is fully managed.

DevOps heavy-lifting with Kubernetes

Open-source tools are quite popular to cover all things related to application infrastructure and give teams a large pool of technical resources to build on top of them. In particular, Kubernetes is the dominant choice in this case. With the native support for Docker containers, combined with well-engineered solutions for scaling, high-availability and customisation kubernetes can be a game changer for managing infrastructure.

Most teams opt for managed Kubernetes services offered by major cloud providers. This helps them avoid the cumbersome task of a full do-it-yourself approach.

Teams start with a simplified solution and gradually add more Kubernetes features as their engineering capacity evolves. This approach continues until they reach a certain maturity level for the infrastructure.

Balance easiness with complexity

There is room for new solutions that offer a balance between the simplicity of PaaS solutions and the complexity of managed Kubernetes solutions. My take on the topic is to work on a ground with the minimal tradeoff between ease of use and increased functionality. This way, teams will be empowered with a simple solution that fulfills their requirements to deploy software products. 

One critical aspect for the software product environment I work on is to offer access to all stages to all teams. And yes, that must include deployment.

Continuous deployment for all teams

During the last years I worked on giving the liberty factor to development teams on all application lifecycle activities. It is incredible to see how the basic concept of DevOps, to break down traditional silos in a software development company, can work to produce a great culture and timely delivered applications. 

Leaving behind the conflicts created by traditional workflows is a huge relief for software teams. People’s creativity comes with the choice to allow them to directly express their ideas.

Development teams need to test, deliver and operate software. Let’s give them the keys to deploy new solutions, release updates and intervene when something is not working on production.