That's an important question for organizations because the answer can mean the difference between success or failure as a company. Think about it, consumers really don't care if you're agile or waterfall, or whether you're scaling or not. They're only interested in innovation that will improve some area of their personal life or help improve their business by making them more competitive. And they want that innovation to be of high quality, and they want it fast. Advances in technology have changed consumer behavior. The world is just a click away, and if your company doesn't offer what consumers desire, they'll simply click on the next and make a purchase. Brand loyalty is a scarce commodity these days.
So how do changes in consumer behavior impact the way businesses deliver value to consumers? Well, in today's environment, small, agile firms, are quick to identify opportunity gaps, and they're lean enough to deploy innovation to consumers rapidly without the obstacles that exists in large organizations. Many traditional companies are not in the same position, however, when smaller firms disrupt an industry and gain competitive advantage, traditional companies start to pay attention. They're realizing that in today's environment, methods that "worked" in the past won't sustain them as market leaders in the future. Consumer preferences, technology and business objectives are changing way too fast to rely on those methods.
As a result, traditional companies are exploring alternatives. Many seek a more incremental approach to planning and delivery, a desire to apply lean principles to eliminate waste and reduce risk, and above all, ways to accelerate delivering innovation to consumers and obtaining fast feedback. For many organizations, that desire leads them to incorporate some form of agility in their environment. Some choose to implement agility at the team level, while others, seeking a larger impact, implement agility at scale. Both perfectly acceptable depending on the organization and its goals. Planning is improved, collaboration is better, the business is happier, risks are under control, and teams are executing. At least those are the goals.
So, all is good, right? Problem solved? Well, not quite. While these are all significant and valuable improvements for an organization, unfortunately, in all too many cases, the constraints within the delivery pipeline are not addressed. And the gap between when work is completed in a development environment and when it's ultimately delivered to consumers, is way too long. Releasing innovation frequently to consumers gets overlooked. And that's really what it's all about. Until a business actually delivers value to consumers, all the work that's waiting to be deployed is just a depreciating asset, and as each day passes, that work is worth less since it's giving competitors another day to deploy that same value to consumers before anyone else. And if that happens, not only do you miss an opportunity to attract new customers, you may also lose a portion of your existing customer base. Not a good situation.
Why do companies find themselves in this position? One reason is due to organizations pushing work from an optimized (maybe agile) development environment to a traditional delivery pipeline, a pipeline that relies heavily on manual activities (configuration, testing, deployments), has inadequate feedback loops, lacks reliability and repeatability, and is unable to scale. Getting through such a process takes time and frequently results in delay, rework, cost overruns and a lot of stress.
So, how do we begin to overcome those obstacles and move towards a more modern approach that delivers high quality software to consumers fast? One approach is to embrace the concept of CONTINUOUS DELIVERY (CD). The goal of CD is to create a delivery pipeline that supports the notion of software always being in a state that's ready to be deployed to production. We look at the delivery pipeline as those activities necessary to take software from version control to production. A basic example, for illustration only, follows.
To elaborate, as code is introduced to the Continuous Integration process, that code undergoes a build process and execution of a suite of automated tests to ensure that recent changes integrate with the existing code base. If they do, they're allowed to continue through a series of environments, each executing an additional layer of testing that instills more confidence that the combination of code, configuration and environment, all work together. Eventually, a point is reached where the combination is ready to be released to production. Meanwhile, the cycle is repeating for subsequent changes that are being introduced and working their way through the pipeline.
So, how does CD help deliver value to customers faster? What's changed to make it a more effective approach? Much is the result of automation;
- Continuous Integration to ensure new code integrates with the code base upon check-in, not days or weeks later.
- Test frameworks that can execute thousands of automated tests in minutes to reduce the feedback loop from days or longer, to the time it takes to get a cup coffee.
- Infrastructure as Code to ensure consistency across environments as opposed to manual configurations and all the error and rework that follows.
- Automating deployments from one environment to another with the press of a button.
- Service Virtualization to emulate dependent systems and perform tests early in the pipeline that would normally have to wait until later in the cycle when there is more risk.
Manual processes have limitations and are error prone. With automation, we're able to create a pipeline that's reliable, repeatable, scalable and fast. The by-products are fast feedback to address issues early in the process, a reduction in delay across the pipeline, and limited surprises late in the delivery cycle, when risk and rework are most disruptive and most expensive. And, of course, value is being deployed to consumers fast.
However, the journey to Continuous Delivery won't happen overnight and it's not just a technology solution. Ask anyone who has been through a delivery transformation and they'll all say that the most difficult part of the transformation doesn't revolve around technology, it revolves around the cultural impact to the organization and general resistance to change. Another key component of a transformation is value stream optimization. Here, we've focused on the delivery pipeline and automation, but a value stream has many transition points outside of the delivery pipeline, and any one of them can be a bottleneck. So, a key goal of a transformation is to incorporate lean principles and Optimize the Whole.
In today's environment, software is driving revenue. Industries who were never concerned about software are now exposed to all the challenges of technology, changes in market conditions and consumer behavior, and disruption from non-traditional organizations with a new generation of leaders who cannot only challenge market leaders, but surpass them as well, and do so with only a fraction of the resources.
Understanding these challenges, their impact, and how to address them is a time consuming and challenging process, but it's important to adapt and start the journey knowing full well that similar efforts to deliver the next state of innovation are underway by your competitors and industry disrupters. And they will target that innovation not only to their customers, but to yours as well!