At this point, you’ve completed the first two phases of your DevOps transition and are starting to see success within your teams. Now is the time to level up the rest of the engineering organization—demonstrating and delivering the full business value of the DevOps operating model.
In this final phase, you’ll focus on optimizing your DevOps teams. You’ll
- Resolve dependency risks within your applications.
- Measure and iterate on customer experience.
- Improve infrastructure resource allocation.
- Automate your instrumentation.
- Create a cross-functional operations review to track your success and identify areas for improvement.
Resolve application dependency risks
Successfully scaling DevOps practices across an engineering organization requires a robust understanding of dependencies across application teams and related services. A microservices architecture, for example, likely involves dozens, if not hundreds, of services that make requests to one another, and your DevOps teams must understand how to mitigate risky up- and downstream dependencies in these complex environments.
Building visibility into critical dependencies improves collaboration across teams—reducing outages and supporting more consistent performance.
Working from both frontend and backend services, begin by creating an action plan to reduce dependency risks and achieve your SLOs. As you do so, keep these four principles in mind:
- Understand your risk tolerance. It’s helpful to have a clear picture of your tolerance for risk, which ideally should be informed by your SLOs. Use alert policies to monitor dependencies that you’ve determined have a high relationship to SLO achievement.
- Minimize dependencies. Removing unnecessary complexity is an important way to ensure you have a maintainable system that meets your customers’ expectations.
- Localize dependencies. When your teams write code, encourage them to package together functions that depend on each other whenever possible.
- Stabilize dependencies. When dependencies are unavoidable, mitigate risks by ensuring dependencies point to modules that are the least likely to change or are easier to substitute.
After you complete your action plan, monitor the results. Your SLOs should reveal whether your efforts to resolve dependency risks are paying off.
Improve customer experience
An efficient, well-functioning DevOps culture enables organizations to make rapid, frequent releases and product changes. Such environments also enable teams to share data about the customer experience with other stakeholders, including your customer service, support, sales, and marketing teams.
A single point of reference, such as a dashboard, brings together business-level information alongside performance data—and makes it all very easy to share across teams. When considering how or with whom to share your dashboards, consider the following questions:
Which teams are responsible for applications that have high levels of end-user interaction?
What non-engineering teams could benefit from this information?
a. Customer support: Could customer issues be resolved faster?
b. Product/engineering: Could product make more informed roadmap decisions?
c. Customer success: Can this data be used to make customers more successful?
d. What other teams can benefit from end-user analysis that includes performance metrics?
A clear understanding of what creates successful customer experience will help your DevOps teams drive greater efficiencies in their work efforts and, in turn, deliver greater productivity.
Optimize infrastructure resource allocation
No DevOps transformation is complete until you’ve optimized your infrastructure resources to operate more efficiently without degrading application performance. Whether you’re in the cloud or on premise, better utilization of your resources is key. You need the ability to scale, but you shouldn’t pay for resources you don’t need.
Often, this comes down to a decision between downsizing and consolidating resources. In most cases, it’s generally more cost effective to consolidate applications onto larger hosts than it is to downsize host count and run fewer applications on smaller hosts.
Containerization also figures very prominently in most DevOps teams’ optimization efforts. Container orchestration platforms like Kubernetes and Amazon Elastic Container Service (ECS) provide an efficient means for managing compute resources, handling the distribution of container instances based on the available capacity within host clusters.
Beyond such infrastructure changes, DevOps teams can also use proactive alerting and team dashboards to ensure efficient usage of infrastructure resources, while still knowing they’ll quickly detect any impact on customer experience.
Moving fast in DevOps means reducing toil. Visibility should be the default for DevOps teams—not a burden. As a team’s application scales, it becomes increasingly important—and increasingly complicated—to effectively monitor the entire software lifecycle, from code deployment through build and deploy to alerting.
Whenever possible, your DevOps teams should automate tasks with CLIs and reduce toil as their development ecosystem grows by replacing manual instrumentation with an automated setup.
Create a cross-functional operations review
The ultimate goal of DevOps is the ability for teams to deliver stable services in a timely manner that meets customer expectations. To ensure your DevOps teams can continually meet this goal over time, create a cross-functional team with which you hold regular operations reviews. The best cross-functional teams have broad representation, including:
- Product owners, engineering managers, and technical leads
- Individual contributors from DevOps teams that develop applications, work with service delivery, and maintain your ecosystem
- Representatives from business operations, marketing, and support
Use the time with your cross-functional team to ensure that your service-delivery process is strongly integrated with customer expectations. Work on a weekly or bi-weekly basis to identify how and where technical improvements meet customer expectations, or find new ways to ensure they do. (Ideally, you’d track your service record against the SLOs established by your DevOps teams.) Dashboards are a great way to hone in on specific time periods and metrics so you can gain a quantified understanding of whether you’re meeting service-delivery objectives or need to set specific actions to improve delivery.