At Gofore, it is already a tradition to conduct an annual Project Radar survey to gain better insight into our current cloud projects and technological landscape. Cloud and DevOps related questions on used technologies and development practices are an interesting part of the yearly Gofore Project Radar.
DevOps is not only about technology, but rather an organizational and cultural movement with a goal to improve software delivery and operational performance alongside productivity and service reliability at organizational level. In terms of productivity and performance, the utilization of cloud infrastructure is a key.
So, where are we currently on the journey of cloud adoption? What are the current trends and the coolest technologies related to cloud and DevOps?
Buzzwords: microservices, transparent application lifecycle, infrastructure automation, CI/CD, and serverless.
Performance and productivity from the cloud
Cloud is a key differentiator for top performers and a driver for high software performance. It enables organizations to benefit from the speed, stability, and availability of the cloud.
AWS is the market lead among cloud vendors. That is also visible within our projects as AWS is used in almost 60% of our projects. The number of Azure projects has also grown steadily in the last two years and the growth seems to continue. We have some certified Google Cloud Platform (GCP) enthusiasts at Gofore as well. However, GCP is currently used mostly in our internal projects.
Agile and safe software updates
Containers are a type of technology that makes it easier to deploy and host applications in a consistent manner within the delivery chain. Containers are fast and easy to update enabling frequent software updates.
Kubernetes is currently the number one orchestration and operation system for the containerized application. It has been adopted widely within our on-going projects. On one hand, it might be a bit of a heavy technology for small scale projects. On the other hand, it might also be a strategic decision for multi-product organisations to use Kubernetes, even for smaller projects, as it provides a standard way of operations among different product teams. This can potentially help maintenance in the long run. Maybe even run multiple production applications in a centralized Kubernetes cluster in maintenance mode. Currently, more than half of our cloud and DevOps specialists use Kubernetes in their projects and this movement only started a couple of years ago.
The rest of the projects mostly rely on AWS ECS, AWS ECS Fargate, and Azure Containers as a cloud vendor-managed solution to run and orchestrate containerized applications.
Serverless further simplifies deployment and abstracts scaling, capacity planning, and maintenance away from developers and operators. Thus, the developers can only focus on the code without the need to worry about infrastructure. Serverless, such as AWS Lambda and Azure Functions, are used widely in our projects especially when complemented by container technologies.
On-demand deployments to the end-users
Continuous integration (CI) and continuous delivery (CD) means software can be shipped to a production environment with speed and reliability. It requires that build and deployment processes are automated and can be triggered by a change in the source code. Thus, teams can deploy on-demand to production or to the end-users throughout the software delivery lifecycle. This also enables a fast feedback cycle and an agile reaction to the feedback.
As one might have forecasted, Jenkins’s share as CI/CD solution has declined quite significantly in the past few years. Whereas GitLab CI/CD is currently leading within our projects. Also, Azure CI/CD has also grown its footprint. In general, the tendency is to firstly use SaaS tools and secondly integrated solutions where version control and CI/CD pipelines is sitting in the same environment (e.g. GitLab CI/CD and GitHub Actions). Thus, there is no need for a separate CI/CD tool or environment.
Infrastructure as Code (IaC) is a method to provision and manage IT infrastructure through formal descriptions, namely as source code. Use of IaC helps to configure and deploy infrastructure components quickly and consistently. It also enables you to automate the infrastructure deployment process in a repeatable manner.
Currently, Terraform seems to be a de facto tool for infrastructure automation. Within the past couple of years, it has grown it’s share significantly. Terraform is independent of the cloud vendor and can be used with AWS, Azure, and GCP projects. That said, AWS Cloudformation is still used in half of our software projects.
Some closing words
In general, the trend in software development is clearly towards containers and microservice architectures. Usage of virtual machines has decreased significantly as the aim is towards a more agile and DevOps style of operations through containerized applications. Currently, most of our projects make use of containers. Also, the use of serverless has increased within the last two years. More specifically, many projects take advantage of both container and serverless technologies. To mention some trending technologies, Kubernetes for container orchestration and Terraform as IaC tool have rapidly strengthened their footprint within Gofore’s cloud projects.
This Radar clearly comes with a technical focus. However, a cloud journey should always start by building a solid cloud foundation. Everything else is built on that enabling, for example, scalable and secure cloud infrastructure. In order to help our customers to succeed, we strongly believe that promoting agile methods and DevOps culture is the key. Also, our preference for tooling and technology selection serves this purpose by helping to incorporate DevOps technical practices in our customer organisations.