Choosing the right software tools can give your company a competitive advantage. With so many different ways to do the same task, however, it can be easy to develop tool bloat, which causes confusion and inefficiency. Therefore, it’s essential to use only the best tools for the job, no matter the context, and DevOps tooling is no exception. According to “The DevOps Handbook,” three factors enable developing a DevOps culture within an organization: flow, feedback, and continual learning and experimentation. By being selective with tooling, companies can minimize confusion and inefficiency while improving the three most important factors for DevOps.
Flow is the ability to get changes into production quickly and then improve their quality and reliability. Tools such as Jira and Trello contribute to your organization’s flow, by making work more visible and managing the size and duration of tasks. In addition, boards, issues and cards can help you break larger projects into smaller tasks.
This visibility will improve workflows in several ways. For example, the ability to see where a unit of work is in the overall process, in an easy-to-read format, will allow stakeholders to see any bottlenecks. This visibility also helps employees prioritize their work in the context of their company’s overall goals. It’s common for teams to use tools like kanban or scrum boards to display their work.
Decomposition, in which tasks are broken down into smaller units, is a common way to work more efficiently. Decomposing clarifies daily goals, enables quicker feedback and makes work seem more approachable and less overwhelming. It’s crucial to have a proper tool that can help your teams and your company manage the size of projects and tasks by breaking them down into minor units.
Feedback is simply information about the results of your processes and projects. For DevOps, this centers on feedback from teams downstream in the process and from production applications. Collaboration tools like Slack and Mattermost have instant-messaging functionality, enabling feedback from downstream and across the organization. Meanwhile, tools like LogDNA provide application feedback via logs that developers can use to create safer, more efficient and resilient software.
Since one of the central tenets of DevOps is to fix problems as far upstream in the creation process as possible, getting feedback from everyone that your work impacts can make a dramatic difference. It’s helpful to contact those who work upstream and even downstream from your team. Also, as more employees are working remotely with fewer face-to-face interactions in the office, having a tool that enables easy remote collaboration will help them incorporate fixes at the earliest possible point.
In addition, it’s critical to implement effective application performance monitoring (APM). Proper logging will help developers maximize the efficiency of the code they write, troubleshoot issues in production, create automation to recover from incidents and more. However, the more complex the environment, the more critical it is to use a tool that centralizes your logs in a single location and gives teams the ability to sort through them. It’s almost unavoidable when more teams are using the environments, including developers focusing on new features. The right tool will minimize the time they spend sorting through logs for insights.
Continual Learning and Experimentation
Finally, companies must ensure that they also focus on continual learning and experimentation. Doing so facilitates learning and individual professional development, which will in turn contribute to both team knowledge and company knowledge. Your company should provide controlled test environments to experiment correctly. Specifically, you should create the environment via automation to change only the variable you are testing. Companies typically use some form of source control, automated builds, containerization, infrastructure-as-code, or even a configuration management tool to enable this level of control.
For example, you might begin by writing and committing code to a source control repository like GitHub or GitLab. That would trigger a build in an application such as Jenkins or CircleCI to create an image for a container runtime (containerd or CRI-O, for example). Then, you would run that image on infrastructure created by a tool like Terraform or Pulumi. If necessary, you’d use Ansible or another configuration automation tool like Puppet for configuration.
It’s essential to keep in mind that DevOps is not a team, it’s a culture. With that in mind, it’s typical for what we would traditionally call the operations team to be the group that drives DevOps. To create a DevOps culture, your company’s processes and tools must align well. By staying focused on the principles of flow, feedback, and continual learning and experimentation, you can carefully select the best tools for enabling DevOps in your company.