If you want to achieve higher software delivery performance and increase the job satisfaction of your technical staff, you should empower them to make informed choices about the tools and technologies they use to do their work. Research (PDF) from the DevOps Research and Assessment (DORA) team shows this contributes to better continuous delivery and higher software delivery performance. Teams that can choose their own tools are able to make these choices based on how they work and the tasks they need to perform. No one knows better than practitioners what they need to be effective, so it's not surprising that practitioner tool choice helps to drive better outcomes.
Allowing teams to choose tools doesn't mean each team is given free rein to select any tool they want. Introducing technologies without any constraints can increase technical debt and fragility. However, when you combine tool choice with other capabilities—for example, a full view of the system, fast feedback, and the understanding that they are responsible for the code that they write—it helps your technologists make wise decisions about tools they will use and need to support. This pattern has been observed at companies like Google and Netflix, where a preferred technical stack is supported by default. But if a team feels strongly that a different tool or technology is best for their case, they are free to choose it. Teams understand that their choice comes with the understanding that they must also do the work of supporting this new technical stack.
How to empower teams to choose tools
When your organization empowers teams to select tools, it's important to balance the freedom to choose tools with the cost to acquire and support them, and the added potential complexity of communicating between teams that use different tools. The following are some ways you might empower teams to choose their own tools.
Establish a cross-team baseline. With representatives from different teams and cross-functional areas (product managers, developers, testers, operators), establish a baseline of approved tooling. We recommend that the baseline set of tools be large and diverse enough to address the majority of the needs of your organization. Examples of tools to include in the baseline are programming languages and libraries, testing and deployment tools, monitoring infrastructure, and data backends.
Periodically review the tools. Periodically or as a part of sprint retrospectives, critically evaluate the baseline toolset to examine their effectiveness. These reviews also provide opportunities to discuss and demonstrate new technologies.
Define a process for exceptions. Create a clearly defined process for deviating from the base toolset. When a new technology is used that's outside of the baseline for a project, document what the new tool is and why it was used. This documentation is critical when troubleshooting and maintaining the project. Additionally, the documentation included in the projects can be used later to justify adding the tool to the baseline.
An alternative approach is to let teams select their tools. With this strategy, each team addresses as much of the software delivery process (business requirements, development, operations) as appropriate, using their own tool chain. However, be sure that you consider the impact on communication between teams and product areas when there are shared resources.
The most common pitfall when empowering your teams to choose tools is to take an extreme stance—for example, giving your engineers zero choice in the matter or giving your engineers too much choice.
Forcing tools and technologies on practitioners can improve standardization. However, what works in some cases is not necessarily the best solution in every case. This approach also limits opportunities for experimentation and growth, where emerging technologies can be tried and tested. Often, experimenting with new technologies and adopting them results in large performance gains. For example, if no teams had been allowed to experiment with containerization or platform as a service when those were new technologies, their organizations would not have realized the resulting performance gains.
At the other extreme, choosing different tools and technologies for every different project or service can introduce technical debt and increase fragility. Each time something is added to the tool chain, maintenance and operational expenses increase. Over time, those expenses can negate the performance gained from the new technology.
Ways to improve tool choice in teams
The key aspect of performance in tool choice is allowing the teams doing the work to select the best tools for the work. Based on that, here are some suggestions:
- Periodically assess the tech stack. During assessments, encourage team members to critically evaluate how well the current tools address requirements. Additionally, during these reviews, discuss issues with the existing tools and potential new tool experimentation can be discussed and planned.
- Proactively investigate new tools for new projects. Have members of the teams think about and experiment with new tools to determine whether those tools are worth supporting. Try implementing a key piece of the new system using both existing and proposed technologies to see whether the expected benefits materialize. When you select technologies, have a good understanding of the costs associated with the technology. These might include licensing, support, and the infrastructure required to run the tools. You might also need to hire more people to help with adopting and maintaining the technology.
- Schedule time to experiment with new tools. Periodically, hold sessions (such as hackathons) where teams can play around with new projects and new technologies. Not all tools will be kept as a result of these experiments. But the important point is that you're easing these new technologies into your stack or decide they aren't appropriate.
- Hold regular presentations to discuss new tools. Sponsor organized meetings (such as lunch meetings) where new tech is presented and discussed. They can be informal meetings where one person does a presentation about a project they are working on in a new tech, or something they are investigating. Informal meetings like these are a good way for the group to talk about new technologies and stay up to date. A good approach is to rotate the presentations, with team members taking turns presenting Or you can invite people from other teams or someone from outside of the company to present. Including people from outside the organization can be particularly helpful, because if they have experience with a tool, they can discuss hidden costs and complexities that will only be apparent after longer-term use.
The goal is to find ways to introduce technologies into the conversation and make sure the team is empowered to make the tool and technology decisions that are appropriate for them. An outcome of these conversations may be to stick with the tools they have right now.
Ways to measure if teams are empowered to choose tools
The best way to determine whether teams feel that they're empowered to choose tools is to ask. You don't want to measure this by counting how many tools the team uses or how often teams change tools, because the team might be sticking with the same tool, or might be changing tools, because they are being told they have to.
- For links to other articles and resources, see the DevOps page.