CI/CD / DevOps / Sponsored / Contributed

Paving a Path to Continuous Delivery

25 Apr 2022 9:00am, by

Stephen Atwell
Stephen develops products to improve the life of technologists. Currently, his focus is on policy and compliance products at Armory. Stephen holds a bachelor's of engineering in computer science and has worn hats ranging from network administrator, to software engineer, to product manager.

For virtually all businesses today, developing software competency is essential. Of the world’s 10 most highly capitalized companies, eight are technology firms whose core value is software. Businesses such as Airbnb, Uber and Netflix have changed the rules in their industries and achieved stunning valuations despite owning almost no assets. Their businesses center on delivering innovations through software.

One thing nearly every one of these businesses has in common is excellence in continuous software delivery. They’ve mastered the use of continuous delivery (CD) to automate the process of building, testing, configuring and deploying software from the build stage through to production.

They accomplish this by creating release pipelines that automatically generate the infrastructure and deployment tasks necessary for new builds to successfully navigate the journey to production safely, securely and reliably. Elite companies build distributed applications using microservices, packaging them in containers and deploying them to multiple targets, including multiple cloud platforms. And they perform this process on demand, at high frequency, with incredibly low change rate failures and recover from failures at speeds that ensure they meet their customer’s demanding service level expectations. Everything that can be automated is automated, and developers work with a consistent set of best practices and guard rails that ensure that they are followed.

Companies that are at high levels of software development maturity deploy code 973 times more frequently than low performers, experience a three times lower change-failure rate and are 6,570 times faster at recovering from incidents when failure does happen. Their businesses also grow five times faster, deliver 60% better shareholder returns and see 20% higher operating margins, according to McKinsey & Company.

Business leaders often make the mistake of believing that continuous software delivery is solely the responsibility of their IT organization. In reality, it needs to be tightly woven into the corporate culture. The necessary changes can’t happen if data is siloed, managers withhold information from each other and processes are opaque. Continuous delivery needs to be seen as a cultural imperative and not just a development tactic. Buy-in is needed across the board, and each stakeholder needs to be fully invested in the understanding that they are in the software business.

Benefits of Continuous Delivery

In a business environment in which speed is essential, the strategic advantage of being able to deliver software faster than your competitors is clear. But there are numerous other benefits:

Improved developer experience. Developers are happiest and most motivated when coding. Organizations can increase job satisfaction, retention and productivity by providing tools that make it easier for developers to work quickly and maintain control of their projects. Software containers have been a huge leap forward in this area because they make it possible for developers to provision fully configured infrastructure in minutes instead of days or weeks.

Increased speed of deployment. Replacing homegrown and legacy tools with modern, cloud-native environments and breaking projects down into modular components that can be coded in parallel and integrated quickly dramatically reduces delivery times. Netflix, for example, deploys new code thousands of times every day, leaving its competitors in perpetual catch-up mode.

Ability to quickly scale the product and business. Stateless containers and microservices enable new resources to be deployed quickly to meet demand. Businesses need only spin up new clusters in elastic cloud instances to accommodate usage surges or push new services to the market. Software built on cloud-native principles is inherently and almost infinitely scalable.

More consistent code and environment. Adopting best practices and standardized toolsets minimizes the risk of conflict between code modules. The best development teams use a standard set of well-documented application program interfaces to allow for simple integration that doesn’t require developers to dig deeply into code. New functionality can be easily plugged in and APIs exposed as services to partners and customers.

Smoother rollback process. Updates cause 70% of outages in production. Manual rollbacks cause deployment to be halted and often introduce new and unnecessary steps to prevent reoccurrence. In contrast, automated rollbacks enable the last error-free version of an application to be restored immediately so that issues can be corrected without disrupting production.

Faster delivery with automation. Virtualization allows infrastructure to be managed as code. This, in turn, enables high levels of automation to be applied through scripting, notebooks and declarative configuration. Mature development organizations virtualize everything possible. Eliminating manual tasks not only makes everything go faster but removes the risk of human error.

Time and cost savings. Automating and standardizing on a common set of tools reduces errors, improves compliance and streamlines training and deployment times. Google’s Accelerate State of DevOps Report found that high-performing development organizations experience 50% fewer failures and restore service 12 times faster than low performers. With the hourly cost of downtime exceeding $1 million for many organizations, the benefits are clear.

Improved compliance. Adoption of DevOps and CD allows organizations to overhaul their software development operations, modernize tooling and standardize procedures and reports. These contribute to faster and more transparent reporting for compliance purposes.

Improved customer satisfaction. Users of software-as-a-service (SaaS) and mobile applications (which is everyone) have become accustomed to seeing new features and updates appear as if by magic. The annual or semiannual update schedules that were typical of traditional development environments are no longer acceptable. Continuous delivery provides a way for enhancements that improve the user experience to be introduced quickly and unobtrusively.

Moving to Continuous Delivery

Migrating from a traditional “waterfall” development environment, with its rigid requirements definitions, lengthy review and test cycles and infrequent code deployments to a CD model is a big shift in thinking as well as process. As with most transformational changes, the biggest impediments are not technical but cultural.

Organizations must shift from centralized IT teams with often competing priorities to a process that puts developers at the center. The journey starts with an organizational commitment to making software development a core competency. This message needs to come from the very top of the organization, not just from the chief information officer. People need to understand that fiefdoms will need to be broken down and processes made more transparent. The greater good is to move the organization forward as a whole, even if some people must cede power in the process.

Stage 1: Prepare the Teams

Start by collapsing centralized teams and shifting the decision-making power to developers, who should be logically and even physically aligned with business users. Evaluate the application architecture to identify which monolithic programs should be shifted to microservices, replaced, discarded or modernized in stages.

Teams can then begin adopting best practices like creating new workflows and inventing ways to gather feedback on an ongoing basis. Planned projects should be reevaluated to see if they can be modularized and parallelized. The goal of these steps is to move toward shorter release cycles with multiple code deployments each month.

Organizational impediments need to be found and addressed. For example, misalignment between development and operations is commonplace. The people who write code want to move fast, even if some imperfections need to be tolerated. Operations teams value stability and predictability. Leadership must explain the new paradigms to operations people and put their minds at ease by making clear that DevOps and continuous delivery tactics reduce downtime and improve visibility.

New roles may also need to be assigned to accommodate the adoption of new processes like “shift-left” and “shift-right” testing, which move testing both earlier and later in the development process. DevOps also requires a more collaborative approach to building software in concert with the people who will use it. Not all developers are well suited to this process, so customer ambassadors will need to be identified and trained.

Stage 2: Shift to CD

The next step is to overhaul the toolkits that developers use and train accordingly. The goal should be to move to an architecture based on microservices and containers, while simplifying the computing landscape. Platforms should be virtualized wherever possible, and opportunities identified for automation. Every development team should use the same platform for deployment; containers simplify this significantly. As teams gain confidence in the new roles and processes, they will see deployment cycles quicken and delivery schedules compressed to one or more releases per day.

A structured and documented release and rollback process should be put in place at this point, along with a feedback loop for quickly gathering comments from users as code is released. Appropriate permissions should also be assigned for access to toolsets, container libraries, databases and other sensitive elements.

You should also give some thought to metrics, since they are critical to evaluating effectiveness. There are many options in this area, including service-level agreement compliance, service-level indicators, time-to-deploy, frequency of outages, releases per month, number of rollbacks and time to roll out new services.

Step 3: Elite Performance

Organizations at the highest level of software maturity suffer from few outages and define their service-level agreements on a per-application basis. Instead of reacting to customer complaints, they use analytics and feedback mechanisms to proactively discover and fix issues. Their rapid deployment pace makes it possible for them to adopt new feedback techniques, like “canary” and A/B testing, and to streamline delivery with blue/green deployment.

Most important, elite teams consistently work as a single cohesive unit without siloes or approval bottlenecks. They can focus on innovation and not process. That carries the entire organization to new heights of performance and sustainable advantage.

Choose the Right Tools

Organizations that start with the right technology from day one typically see the greatest success.

By using the right tools to automate your CD process and create a consistent experience for every developer, you can make your journey to CD smoother and faster. Netflix did this when they created and open-sourced Spinnaker, a multicloud continuous delivery platform. Many companies, including the one I work for, do the same.

It’s never too early to start moving to continuous delivery — and to learn from the advice of others, including Snap, to make the switch.

Featured image courtesy of Armory.