Perhaps the most important change in today’s business landscape—and possibly the hardest thing to manage expectations around—is the role that DevOps plays in making an entire organization more competitive.
The rapid pace of digitization has produced increasingly competitive market spaces. Businesses that create software are pressured by the fact that users are constantly demanding more from their applications, and have more choices all the time. Customers have grown accustomed to having access to the most advanced, user-friendly technology in the world, and the providers who are unable to quickly and efficiently deliver on those expectations and keep pace with them over time will get left behind.
Intense competition for the connected consumer, coupled with a radical increase in engineering productivity, has created an environment in which any business that creates and/or operates software on a global scale is in competition with any other business that does the same. Quite simply, every non-trivial company is now a software company, and whether your organization realizes it or not, engineering productivity has become a primary driver of competitive advantage.
Competition between software creators now plays out in the form of innovation and execution cycles, in which ongoing improvements to software and the services derived from it correlate strongly with successful achievement of business goals over time. This means that for any such business, its software development and operations capabilities set the boundaries of its ambitions. This has made ongoing improvement of the software lifecycle a strategic necessity. There is now a premium on innovation, and innovation depends on hypothesis-testing through experimentation.
In light of this, companies in all verticals have begun asking themselves “How do we use emerging technology to take advantage of the opportunities that rapidly changing market dynamics and consumer demand create?” One critical part of the answer is DevOps.
Continuous delivery powered by a DevOps culture, operational visibility, and automation enable organizations to run more experiments at significantly lower cost, and to rapidly incorporate learnings from product improvements and user engagement. This is what becoming a data-driven organization looks like.
Until recently, a customer-facing release cycle could often be measured in quarters, and involved a complex sequence of error-prone manual steps that could only be performed by very few trusted souls. Today, the most advanced teams in the world release each developer’s changes automatically to huge environments many times per day. Deploying more often and in smaller increments allows for significant risk reduction at the time of deployment. These smaller change deltas, coupled with fast feedback loops enabled by rigorous automated testing of each change increment, reduce the time it takes to find and correct bugs and further reduces deployment risks.
The Road to Maturity: Elements of a Mature DevOps Practice
Below is a brief overview of the environment you need to create, and the technologies your organization needs to embrace to ensure ongoing improvements to your software and services to achieve your business goals.
- Create a culture of experimentation: Every product organization must make ongoing tradeoffs between velocity, performance, reliability, cost efficiency, and security, so it’s imperative to have blameless, respectful, and truthful discussions about decisions and outcomes. Adopting DevOps requires a deep commitment to continuous improvement throughout the organization. Continuous experimentation with a deep commitment to constant learning leads to continuous improvement, also known as “Kaizen”. The successful organization will learn to seek answers and limit the risk of bad assumptions. Learn more about creating a culture of experimentation in our second blog post in this series.
- Get executive attention: The modern executive team should concern itself with improving its engineering leverage, and must be willing to seek help through the inherent disruption.
- Be customer focused: Commercial innovation is judged by the market. Empathy for the customer is a major differentiator.
- Embrace tool-driven collaboration: Mature DevOps teams are characterized by deep, efficient, tool-driven collaboration between skilled, cross-functional individuals working as part of a team, or teams, who execute a product development and operations lifecycle.
- Adopt data-driven decision making: Success comes from making good decisions over time. Business strategy and financial planning cycles must adapt to the reality of continually evolving markets by constantly seeking alignment with product and technology objectives — and vice versa. This requires an even-closer and more data-driven decision cycle at all levels.
- Get Lean and Agile: Adopting Lean principles and Agile methodologies is crucial to delivering DevOps in a highly productive, scalable, and efficient manner.
- Take an infrastructure-as-code approach: All development efforts should be cloud native, incorporate an infrastructure-as-code approach, and avoid dependence on manual operations by leveraging appropriate public, private and/or hybrid cloud infrastructure. This approach allows you to automate manual and repetitive tasks and eliminate human errors as you configure, maintain, scale, and recover from faults, and ultimately fully automate the end-to-end infrastructure lifecycle.
- Automate application deployments: Application deployments should be guided by the principle of delivering value to the end user as quickly as possible. To attain a high velocity, deployments must be automated, undergo rigorous automated testing, and upon successfully passing the tests, deployed to production. The entire software deployment pipeline should be optimized for defect detection, speed of delivery, and rapid feedback, with CI/CD as the goal.
- Optimize orchestration: Design, coordinate, optimize the full infrastructure and application lifecycle processes by creating fast feedback loops, eliminating repetitive steps to optimize the speed and quality of new application capabilities.
- Integrate operational visibility early: Integrate operational visibility services as part of the development process, not as an afterthought. Select and configure tools to monitor KPIs to maintain performance, detect issues, and provide alerts when those issues arise. Use pre-built operational visibility platforms like Pythian’s OpsViz stack, CloudWatch, datadog, Splunk, logg.ly or sumologic for general data aggregation, dashboards, triggering of actionable alerting, as well as reporting. Drive development efficiency and service quality using APM tools, like New Relic and AppDynamics.
- Create a continuous integration/continuous delivery environment: With CI, you have an automated software integration and unit test environment that enables continuous validation of development changes. CD gives you an automated production test, release, and rollback environment that enables frequent, high-quality production releases. When combined with a culture of experimentation, continuous delivery equals competitive advantage.
In a nutshell, DevOps supports an experiment-driven, fast-learning, highly-adaptive and flexible, high-velocity, high-performing engineering culture. It is designed to automate the repeatable parts and sequences of an application’s lifecycle (like build, test, deploy, scale, failover, recover, etc.) in order to make changes to the resulting software and production services as close to zero-cost as possible. Cloud is the enabler of this process. It allows for highly automated, disposable environments that in turn enable a culture of collaboration and experimentation. That efficiency enables the human collaboration at the heart of innovation to be as productive as possible by focusing on continuous data-driven improvement at massive scale.
The next post in this series will look at how to establish a culture of experimentation in your organization.