Imagine you are the customer experience officer of an e-commerce company. A customer visits your website, browses through the products and adds a few of them to their shopping cart. Just when the customer clicks on the checkout button, the server at the back end crashes. The load balancer detects that the server has failed and redirects the user to another server. However, there is a problem. The shopping cart details were stored in that failed server and have not been redirected to the functional server. This means that the user now must log in to the website again and may also have to add the items back to their shopping cart.
This type of user experience would have been acceptable a decade ago. In today's age, however, where customers are accustomed to omni-channel experience and frictionless shopping, such outages are unacceptable. As a customer experience officer, this type of low-quality customer experience can have very detrimental impacts on your company. Should this type of issue recur frequently, it could even damage the reputation of your company.1
While server outages are common, you cannot let an outage negatively affect your business. That's why an increasing number of organizations have begun migrating from traditional applications to cloud-native applications.
What is a cloud-native application?
A cloud-native application is an approach used to develop and deploy applications in a container-based environment and manage them through DevOps processes. It offers on-demand computing power to companies to help them accelerate the process of bringing new ideas to the market and to respond to the demands of their customers in a short turnaround time.2
Andi Mann, the CTO of Splunk, a cloud service provider, says that for cloud-native applications, the big difference is how the application is built, delivered, and operated. He further explains, "Taking advantage of cloud services means using agile and scalable components like containers to deliver discrete and reusable features that integrate in well-described ways, even across technology boundaries like multicloud, which allows delivery teams to rapidly iterate using repeatable automation and orchestration."3
Let's revisit the previous e-commerce example. By shifting to a cloud-native application, you would be able to offer a smooth and seamless shopping experience to your customer. Should a server fail, the customer wouldn't have to log in a second time, nor would they have to rebuild their shopping cart. In fact, they would not even know what happened in the back end as your business is no longer dependent on a single, dedicated server.
Four clements of cloud-native applications
- Microservice architecture helps companies move from monolithic applications to smaller components that enable easy scalability.
- Agile development makes the development process fast and simple by breaking the development process into smaller time frames for rapid and effective development.
- DevOps helps organizations create and ship products within days instead of months.
- Cloud provides a platform for different types of deployments from large monolithic systems to small clusters of containers.
Shifting from a traditional system to a cloud-native application
The shift from a traditional application to a cloud-native application 4 is not an overnight transformation story. It's a 15-year process that evolved with changes to the way companies previously functioned and responded to the market.
The story began with non-virtualized servers manufactured by Sun Microsystems in 2000. In those days, if a company wanted to launch a new application, they had to buy a server or a rack of them. Within a year, the world was introduced to the concept of virtualization. VMWare introduced virtual machines, which meant that the companies could manage their applications with fewer servers. VMWare allowed companies to run many virtual machines through a single physical machine.
As years passed by, companies realized that they had to spend a lot of money on buying and maintaining servers. The companies also found it cumbersome to scale the servers according to their business demands. That's when Amazon Web Services (AWS) came to their rescue. Introduced in 2006, AWS created the Infrastructure-as-a-Service (IaaS) market by launching the Elastic Compute Cloud (EC2). AWS helped companies to convert their CAPEX into OPEX by giving them an option to rent servers by the hour. Companies found it favorable, as they had to pay only for their usage.
In 2009, Heroku introduced the concept of Platform-as-a-Service (PaaS) that was built on buildpacks containing open source scripts used for compiling apps, while in 2010 OpenStack introduced an open source IaaS to bring together a diverse group of vendors. In 2011, Pivotal launched Cloud Foundry, which was an open source alternative to Heroku's PaaS and one that could contain Heroku's buildpacks, Docker containers, and non-Linux OS.
In 2013, Docker created a container standard by combining LXC, Union File System and cgroups. Millions of developers across the world have embraced the use of Docker containers.
Finally, in 2015, the cloud-native application approach was launched and enabled developers to segment applications into microservices, package them into containers, and orchestrate them using the DevOps process. This helped companies reduce their cost on maintenance and operations and optimize their resource utilization.
Organizations have come a long way from having to depend upon a closed source, single vendor and servers. They're now able to leverage lightweight, open source containers to reduce their costs and time to market.
Today, a cloud-native application approach has become so pivotal to the growth of the companies that recent research by Capgemini predicts the adoption of cloud-native applications will double by 2020. According to the study, business agility, innovation, and improved customer experiences are responsible for this surge in demand.5
While businesses cite agility and innovation as primary reasons for the demand, cloud-native applications offer many other advantages that are a delight to developers and managers alike.
Advantages of cloud-native applications 6
- Development language choices. In the past, developers did not have the flexibility to choose the language for developing applications. Since the applications had to be written to run on company servers, they were written in languages such as C, C++, Java, etc. Cloud-native applications are polyglot. This offers developers the ability to choose from an array of languages, runtimes, and frameworks depending upon the task. Cloud-native applications are most commonly written in HTML, CSS, Node.js, PHP, .Net, and Ruby.
- Continuous delivery. The US-based retail company, Nordstrom, worked in silos making it difficult for the company to accelerate its development cycle. The application developers spent more time fixing the environment than writing code. They wanted to speed up their development cycle to improve the user experience for their e-commerce website. The company underwent a DevOps transformation. This evolution meant that the software development team and the operations team had to work in close collaboration to deliver small releases to the market more quickly.
The company launched a continuous integration/continuous deployment (CI/CD) project that reduced their deployment time from 3 months to just 30 minutes. To accelerate their development process, the developers wrote their applications on Docker containers orchestrated with Kubernetes. The results were phenomenal as the company was able to improve its operational efficiency and increase the CPU utilization by 40%.7
Similarly, the US Air Force's IT operations department adopted cloud-native application architecture to implement new capabilities. They were able to save time on implementing new ideas by 70%.8
Like Nordstrom and the US Air Force, many companies are focused on improving their development process to accelerate the software delivery process. With CI/CD, companies have been able to deploy new features to their customers within a short timeframe. Companies like Amazon have been able to deploy code into production within as little as 12 seconds. 9
- High Elasticity. One of the primary reasons for companies to shift from a traditional application to a cloud-native application is its ability to adjust and scale resources according to usage. Should your application experience a spike, scaling without sacrificing a seamless user experience.
- Stateless apps. Traditional applications are called stateful, which means they store the details of the applications on the infrastructure on which it runs the code. When the server is affected, the application is affected too. Cloud-native apps, on the other hand, are not dependent on infrastructure. They are stateless and function in a distributed way. So, even if one server is affected, the elastic nature of the infrastructure ensures that the app continues to run smoothly.
- Self-Service. Unlike the traditional applications that are managed manually, cloud-native applications can be managed through automation. Cloud-native applications enable engineers to automate anything they do to promote scalability, self-service, and to reduce errors caused by manual process. This approach greatly accelerates the speed of delivery and deployment.10
- Bridges the gap between developers and operations. While a cloud-native application approach helps companies respond to the demands of the customers within a short turnaround time, it also helps change the culture of the organizations. This is achieved by increasing the collaboration between the Developer and the Operations teams, enabling them to make iterative changes to the application easily.11
- Easy to update. Updating an application can take time and may even lead to downtime. With cloud-native apps, companies can ensure that their applications are up-to-date and always available for use.
- Modular design. Unlike traditional applications that are monolithic in design, i.e., managed and deployed as single entities, cloud-native applications are broken into microservices, making them modular. This approach makes it easier for companies to shut off the application when not required or roll out updates in modules rather than updating the whole app.
How the Australian government improved its digital yransformation using a cloud-native platform
The significance of cloud-native applications is so impactful that even governments are shunning traditional applications and adopting a cloud-native strategy to enhance their digitization. The Australian government leveraged a cloud-native approach to development to drive digital transformation. They were operating around 1,500 to 2,000 websites, which made it difficult for the citizens to interact with the government. They wanted to simplify and improve their user experience. They selected Cloud Foundry, a cloud-native platform to build simple and accessible online services. To carry out this change, they built a cross-functional team that included DevOps, security, UX, and content authors to build a better product. Every team was responsible for delivery at every project stage.
Instead of the old approach of creating a portal and receiving feedback from end users, they decided to opt for a more agile approach. This approach allowed them to get early feedback during the development stage and led to an accelerated product development cycle. They reduced churn on time and resources and reduced costs. This approach helped them standardize the technology while simplifying the onboarding process and making it a more democratized project. Today, the Australian government has a cloud-based PaaS called cloud.gov.au that has simplified delivering and operating digital services for their users.12
The shift to cloud-native applications is not restricted to the change in infrastructure or architecture alone. It requires the company to change its development methodology and the culture of functioning between the teams to optimize its usage. For example, cloud-native applications may not function well with the waterfall model as it takes time for a product to be developed and shipped to the customer. It goes against the major benefit of using cloud-native applications, which is to respond to the demands of the customers quickly by deploying the application within days or even hours.
Similarly, you will have to shift from the silo approach to the DevOps approach. As Matt Stine, the principal architect of Pivotal says, "You have to be doing DevOps, and you have to be doing continuous delivery in order to do microservices. They are about enabling business agility and enabling resiliency of software. If you look very closely at those approaches, they are enabled by taking small teams working on small batches of behavior from a software perspective and delivering them continuously. And by continuously, I mean we're making deployment of software a non-event."13
So, if you are planning to shift to cloud-native applications, you need to first realign your company's development methodology and culture to optimize its benefits. Cloud-native applications are changing the landscape of computing and developing applications. It will help you to stay ahead of your competitors by listening to the customers and responding to their demands by developing and shipping the products to your customers quickly.