The term continuous improvement dates back to the 1950s, when management pioneer W. Edwards Deming first described it as a “system” that incorporates and recirculates feedback for the benefit of the system itself. The Process Excellence Network went on to define the term as “the ongoing effort to improve products, services and processes by making small, incremental improvements within a business.”
Fast forward to 2019, and the concept of continuous improvement is central to the DevOps revolution that’s shaping technology workflows across industries. Gene Kim, one of the movement’s early protagonists, embedded the term in his “Three Ways of DevOps” framework for managing process, procedures and policies with a DevOps philosophy. Kim’s first two ways set the stage for continuous improvement: 1) emphasizing the performance of an entire system rather than a silo of work, and 2) amplifying the feedback loop. The third way drives the concept forward: developing a culture of continuous experimentation, learning and improvement – essentially a culture of incremental innovation.
Think Holistically, and Act Fast
At a high level, continuous improvement is a lofty and worthy goal for ambitious organizations. But how do you put it into practice? What are the benefits of doing it right? And what are the costs of doing it wrong?
The most important step for DevOps organizations is ensuring that continuous improvement gets infused into processes, procedures and culture early on. Organizations that wait too long find themselves scrambling to plug holes, rather than thinking holistically about building a system dedicated to ongoing innovation.
DevOps in the cloud requires continuous improvement in three principal areas. One is the software itself. To build, design and deliver a quality application, organizations need to have mechanisms in place to test and inspect the app itself. Second is the cloud environment supporting the app being designed, built and delivered. Is the cloud performing well, meeting the organization’s needs? Controls are needed to optimize the environment on an ongoing basis. Third are the processes you use to produce software and the cloud environment itself. This cuts a level deeper. To be a true, peak-functioning DevOps organization, you need to make process part of the improvement cycle – all the way down to how you are implementing and developing your processes.
Continuous improvement requires a steady stream of feedback from customers – both internal and external. This applies to software companies as well as to enterprise IT software providers. To do this, organizations need to implement a rock-solid logging and monitoring strategy. This requires a centralized mechanism to capture customer feedback, track it, log it and integrate it back into the knowledge system. Tools need to be robust and capable enough to work in context with the organization’s cloud platform.
Test Early and Often
Automated testing plays a big role in an advanced software delivery process. Installing a series of tests – for performance, security, integration and system usage – is a first step. But the true value is not just in automating the testing framework but in integrating all functions, creating a system that feeds the continuous improvement loop.
Continuous integration (CI) pulls the functions together. Putting software development practices in place that leverage feedback, automate the practices and amplify the feedback flows will generate steady improvements in the overall delivery process. The real trick is to speed things up to the point where feedback flows in fast enough to fuel daily commits. Letting commits pile up until release can be a nightmare. To continuously improve, you need to embrace continuous integration.
Cloud is a target area, too. In the cloud, you can automate the building of infrastructure and integrate it with software applications. Managing the environment in code (infrastructure as code) allows an organization to steadily improve the performance and scale on an ongoing basis.
The third area of improvement is to fully master and incrementally improve the way you design, build and deliver your software delivery processes. This is where the true power of DevOps lies. There are several ways to continuously improve facets of software delivery.
Practices to continuously improve your software development life cycle (SDLC) model:
- Always seek to increase flow. If the process is well defined, then the team can analyze and find efficiencies.
- Always seek to achieve profound understanding of the system. Like a craftsman or an athlete honing their skills to unconscious levels, repeated exercises and knowledge of your value stream leads to well informed and expert flow-improvement decisions.
Practices to continuously improve your automation:
- Ensure each step is built in a repeatable way. Repeatable procedures replace ad hoc and one-off steps.
- Never pass defects to the next step. Fix problems immediately, as they become visible. Do not pass the problem downstream.
- Never allow local optimization to create global degradation. Do not introduce shortcuts that impact other workstations or process steps in the value stream.
Practices to continuously improve your collaboration:
- Embed knowledge where it is needed. Source control, documentation and any specialized knowledge should remain inside the loop and not outside.
- Allocate time to spend on improvement. Dedicate resources and projects to “technical debt,” which includes fixing bugs and refactoring code and processes.
- Establish rituals to reward risk taking. In annual employee reviews have managers focus less on bug fixes and more on “how many experiments or new tools did you try this year?”
- Introduce faults to test resiliency. Fire drills and failover exercises test the system’s ability to endure failures.
- Set ambitious stretch goals. Try reducing one-week application release cycles to one day.
Where can a company start building its continuous improvement muscles early? Using a tool like value stream mapping is a good start. This helps an organization understand its processes end to end, and gets all stakeholders involved in the software development life cycle. This exercise creates a visual map of the whole process – identifying where the lag times and bottlenecks are. Using this information, stakeholders at all parts of the process can work together to strengthen the loop.
Continuous improvement is a concept that has been around a long time yet is still driving change in modern times. It is not a program that is just implemented, wrapped up and reported on. To work well, a continuous improvement initiative has to be continuous – ongoing, without a formal end. It is a journey, and it is everybody’s job to make that journey a success.