Empowering Teams to Choose Tools
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.
Common pitfalls
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.
What’s next
- For links to other articles and resources, see the
 DevOps page.
