When organizations embark on the journey of adopting DevOps practices, they often encounter significant challenges. One of the most common is what I like to call “regression” – the frustrating experience of making two steps forward only to fall five steps back. Let’s dive into these challenges and explore how to effectively navigate them.
In the traditional software development world – or as I sometimes refer to it, “the old days” – we had a very structured approach to managing risk. We would spend a substantial amount of time designing the product, defining the architecture, listing out features, and then marching toward a release date. This was followed by rigorous testing, usually performed by a separate test team, and finally, a handoff to an operations team for deployment. This approach was heavily reliant on a waterfall model, where each phase followed the previous one in a linear fashion.
However, the risk profile in this traditional model is vastly different from what we face today. In the old model:
Design and planning were extensive, often leading to a long development cycle.
Testing was a separate phase, with dedicated teams responsible for ensuring the product’s quality.
Deployment followed a strict sequence of environments, often starting with staging, then UAT, and finally production.
This method had its merits, but it also had significant drawbacks, particularly in today’s fast-paced environment where flexibility and adaptability are key.
DevOps changes the game entirely. It demands a new approach to risk management, one that prioritizes:
High quality: Ensuring that every release meets the highest standards.
Flexibility: Adapting to changes quickly without sacrificing quality.
Adaptability: Continuously improving based on real-world feedback.
In the world of DevOps, we no longer have the luxury of long development cycles. Instead, we’re working in a continuous delivery environment where speed is of the essence. This brings us to one of the biggest challenges in adopting DevOps: managing risk in a way that doesn’t slow us down but rather enhances our ability to deliver value rapidly.
One of the most critical aspects of DevOps is the concept of closing feedback loops. In the traditional model, feedback often came too late, after the product was already in the hands of users. This delayed feedback was costly and inefficient.
In DevOps, the goal is to:
Identify feedback loops: Determine where and how feedback can be gathered throughout the development process.
Eliminate waste: Streamline processes to ensure that feedback is gathered as quickly and efficiently as possible.
Close the loop: Act on feedback in a timely manner to continuously improve the product.
A great example of the importance of closing feedback loops can be seen in the development of Windows 8. Microsoft invested hundreds of millions of dollars in user experience studies, labs, and testing, yet the product still failed to resonate with consumers. The lesson here is that no matter how much testing and validation you do in controlled environments, the only place to truly validate a product is in production.
As one of my favorite people, Brian Harry, who used to run the Azure DevOps team, famously said, “There’s no place like production.” No matter how much testing or validation you do, especially in a service-oriented world with thousands of users, you can’t simulate production. The real test of your product comes when it’s in the hands of your users, operating in the real world.
This is why closing feedback loops is so crucial. It’s not just about collecting data; it’s about acting on that data to improve the product continuously. In a DevOps environment, feedback needs to be immediate, actionable, and directly tied to the product’s success in the market.
In today’s DevOps-driven world, the risk profile is continuously evolving. We no longer have six months or a year to test a product before release. The Windows team, for example, used to operate on a six-year delivery cycle. Imagine that – six years to build, test, and release a new version of Windows! But those days are long gone.
Now, we need to:
Understand our risk profile: Recognize that the risks we face today are different from those we faced in the past.
Mitigate risk effectively: Use modern tools and techniques to manage risk without slowing down the delivery process.
Adapt quickly: Respond to changes in the market and user feedback in real-time to maintain a competitive edge.
A colleague from Boeing once shared an insight that resonated with me: “Boeing doesn’t build quality in; they test quality in.” This aggressive testing approach is necessary in some industries, but in software development, we have the advantage of being able to release products quickly and gather real-world feedback.
In software, we don’t have to suffer from the same challenges as industries like aerospace. We can:
Release quickly: Get the software out the door as fast as possible while maintaining the necessary level of quality.
Test in the real world: Validate the software in production to see how it performs in the market.
Adapt based on feedback: Use market feedback to determine whether the product is increasing or decreasing market share, and adjust accordingly.
This rapid iteration and adaptation are at the heart of DevOps. It’s about closing feedback loops and using that feedback to continuously improve the product. It’s a mindset shift from the traditional model, where testing was a separate phase, to a modern approach where testing and validation are ongoing processes.
As we’ve discussed, one of the most significant challenges in adopting DevOps is closing feedback loops. To overcome this challenge:
Prioritize feedback: Ensure that feedback is gathered at every stage of development, from initial design to post-release.
Act on feedback: Don’t just collect feedback – use it to make informed decisions and improve the product.
Integrate feedback into the workflow: Make feedback a natural part of the development process, not an afterthought.
Another common challenge is managing risk in this new, fast-paced environment. To do this effectively:
Understand the new risk profile: Recognize that the risks we face today are different from those in the past.
Use modern tools and techniques: Leverage the latest DevOps tools to manage risk without slowing down the delivery process.
Adapt to changes quickly: Be prepared to pivot based on real-world feedback and market conditions.
Adopting DevOps practices is not without its challenges, but the benefits far outweigh the difficulties. By closing feedback loops and managing modern risks effectively, organizations can achieve:
High-quality releases: Deliver products that meet the highest standards of quality.
Flexibility and adaptability: Respond to changes in the market quickly and efficiently.
Continuous improvement: Use real-world feedback to improve the product and increase market share.
The journey may be challenging, but with the right mindset and approach, your organization can successfully adopt DevOps practices and reap the rewards. Remember, there’s no place like production – so embrace the feedback, manage the risks, and keep moving forward. 🚀
If you've made it this far, it's worth connecting with our principal consultant and coach, Martin Hinshelwood, for a 30-minute 'ask me anything' call.
We partner with businesses across diverse industries, including finance, insurance, healthcare, pharmaceuticals, technology, engineering, transportation, hospitality, entertainment, legal, government, and military sectors.