Speed in development thanks to cloud-native

Cloud-native development reduces the vertical integration of applications and leads to more speed and agility in the development process.

Authors: Daniel Albisser & Andreas Pfenninger

Application development today is increasingly cloud-native on PaaS or containers/Kubernetes platforms. However, the trend is strongly towards serverless. All hyperscalers such as Microsoft Azure, Google Cloud Platform or Amazon Web Services provide corresponding services and are expanding them strongly.

Cloud advantages are often not fully exploited

Our customers operate in a dynamic and innovative environment. Data-driven services are changing the customer journey, collaborations with partners and ecosystems are enabling new business models. And the digitalization of customer interfaces is raising expectations: customers want easy access to innovative services around the clock. To keep pace with this development, a company must have the ability to bring new products to market quickly and adapt them quickly.

Many organizations have realized that while they are using cloud services, they are not fully benefiting from the promised benefits. A traditional application that has been hoisted into the cloud with «Lift&Shift» may run in the cloud, but does not benefit in any way from all the underlying capabilities of cloud-native. In many cases it is therefore worthwhile to break up existing software monoliths and develop them from scratch according to cloud-native principles.

Modern applications are built cloud-native

Cloud-native technologies enable companies to implement and operate scalable applications in modern, dynamic environments. An application is called cloud-native when it is developed according to the principles of cloud-native and takes advantage of cloud technologies. These can be public, private and hybrid clouds. Benefits include business agility, scalability, resilience, automation and cost savings.

Best practices such as containers, service meshes, microservices, immutable infrastructure and declarative APIs support this approach; see Cloud Native Computing Foundation (CNCF) for more information: 

  • The parts of an application are implemented as loosely coupled microservices, packaged in containers and dynamically orchestrated and scaled to make optimal use of IT resources. Provider independence is increased and solutions can be ported between different cloud providers.
  • At best, a service mesh is used. This is an infrastructure layer that facilitates communication between microservices and the implementation of cross-cutting issues such as security and monitoring, often with the help of a so-called «sidecar proxy».
  • In an immutable infrastructure, components are not changed, but replaced. An application or service is rolled out completely new whenever a change occurs. 
  • Full automation & continuous delivery makes it easy to test and deploy applications. A complete copy of the application can be provisioned for the development of a specific feature. This allows a developer to work and test undisturbed, and then discard the environment once the features are complete. This results in faster releases and higher quality releases.
  • A cloud-native application uses only cloud services. The higher the level of abstraction, the more developers can focus on the business logic.
  • There is a tendency to use a declarative programming style. In it, the developer describes the «what» and not the «how» on a high level of abstraction.

The underlying techniques enable the implementation of decoupled systems that are resilient, manageable and observable. Combined with robust automation, software developers can react flexibly and quickly to changes with little effort. These characteristics are the goal of cloud-native development. For the design of cloud-native applications, the 12-Factor App Methodology can be applied, which contains a detailed list of best practices.

More efficiency and resilience thanks to cloud-native

Cloud-native application platforms offer development services and features that go beyond pure compute, storage and infrastructure services. They offer abstractions of these underlying services to enable the features of cloud-native architectures.

Cloud-native applications reduce the vertical integration by building on the highest possible level of abstraction. While traditional and «cloud-ready» applications are built on virtual machines, for example, «cloud-native» applications are based on app services and serverless functions. Aspects like availability and scalability are automatically guaranteed by the platform. This reduces the complexity of the application.

The illustration shows the increasing level of abstraction from cloud-ready, cloud-optimized to cloud-native applications.

Container (Kubernetes) and Serverless Functions are not mutually exclusive, a cloud-native application can combine both technologies in a meaningful way. For example, containers are better suited for the migration of legacy applications. And serverless functions are especially suitable for event-driven architectures with «nanoservices» - read more in the article Cloud Native! But how? Container vs Serverless. The right mix makes the difference.

A high degree of automation is essential for cloud-native development. This is achieved on the one hand by DevOps and automation in provisioning and application deployments, and on the other hand by scaling the underlying infrastructure.

The key benefits of cloud-native applications

The step to cloud-native development brings many advantages:

Speed and lightness

New products can be developed and brought to market quickly with cloud-native services. Due to a high degree of abstraction, the focus of development is primarily on business logic.

Elasticity and resilience

Cloud-native applications benefit from the elasticity of the cloud, for example when they require additional resources during peak loads. Aspects such as availability are guaranteed by the cloud provider. If an important IT system of a cloud provider fails, the counterpart in another region can take over its task. Managed cloud services are always up to date and always available.

Innovative strength and business agility

The use of the latest technologies as PaaS services from the cloud, such as machine learning and analytics services, make it easier to implement innovative use cases. Furthermore, changes from the business can be reacted quickly.

But watch out: Cloud-native development also requires some changes in the way software solutions are developed and the corresponding know-how. Design decisions need to be made even more consciously, because the dependence of a software solution on a specific cloud provider is increasing sharply and needs to be taken into account due to «business continuity» and a certain degree of independence.

Bring your IT to the next level of software development. The advantages of cloud-native are crystal clear and help IT to industrialize! But it's the right mix that makes the difference: on the one hand, to profit from the advantages to the maximum and, on the other hand, not to become too dependent on a single cloud provider - more about this in the article «Cloud-native development with manageable risk»