How to Help a Struggling Team π
My favorite strategies to reverse course and create long lasting change.
Last month we had a great mastermind session about how to raise the quality bar of your team.
Intentionally, we kept the term quality generic. We didnβt want to fixate on code quality specifically, but rather on the all-round quality of the work of your team, which has many shapes and facets, and see what participants needed the most help with.
Out of the various stories, we spent a long time talking about how to help a team that was struggling.
I wonβt go into details, because I donβt think these are particularly helpful: they may or may not apply to you. But I will try to take the best advice that was shared, and distill first principles and ideas that should be useful to most.
By the way, this is always hard to do, because of the Anna Karenina principle. Anna Karenina starts with a famous line:
Happy families are all alike; every unhappy family is unhappy in its own way
What looks as a witty statement about humans, is actually a precise property of systems whose success depends on a number of factors all working well.
Since failures are born out of deficiencies in any number and combinations of factors, the amount of different failure modes is bound to be high in any moderately complex system. Conversely, when success is born out of all (or most) factors doing well, it creates less variance.
But I digress!
Now, if we trust this principle, one way to treat this topic could be to model software engineering as a system, identify all these factors, and write recommendations for each of them. This is too hard though!
Instead, Iβll try to address this as a doctor who visits for the first time a patient that is not feeling well. Where do you start? How should you think at the system (the team) as a whole?
So here is what I would like to cover today:
π₯ Most people want to do good work β and they generally care about it.
π Create a shared vision β setting a north star goal and rallying people around it.
π¬ Identify problems β figuring out what is truly holding the team back.
π Find your allies β lasting change needs bottom up support.
π Create visible progress β create small victories, and show them!
πΌ Help the team from the outside β provide external help once you can show momentum.
Letβs dive in!
π₯ Most people want to do good work
What does it even mean that a team is struggling?
Visible problems can be many β speed, reliability of commitment, accuracy β but there is one property, to me, that is the true mark of a struggling team: people have capitulated. They have gotten used to problems and believe they canβt be solved.
This is an important preface. Problems happen all the time, but as long as people are aware and working to do better, they are in a good place. Sometimes, instead, the same problems have been there for so long that people feel they have become a (nasty) part of your culture. Issues are evident, but people stop addressing them. They donβt even talk about them. It is what it is.
When problems are not addressed, you might think itβs because people donβt see them β especially if you joined a team that was already struggling, you might ask yourself: βhow tf people donβt see how bad we are doing?!β
Well, they most likely do. But they also think there isnβt much they can do about it.
I have met and worked with hundreds of engineers, and I can confidently say >99% of people want to do good work. Our default state, as humans, is caring about what we do. When we stop, itβs because we donβt think itβs possible to do work worth caring about.
So what do you do?
π Address the elephant in the room
There is a time and place for small wins and iterative improvements (weβll see later) but when you are in a hole you also need a singular moment that starts the inversion. The moment you stop digging and start climbing back.
Hard conversations need to be had sometimes, and if you are in a leadership or management position, this might be one of those times.
In my experience, there are two main things that you need to address: 1) the team is, indeed, not doing well, and 2) you care about improving. Thatβs it! Chances are you donβt have to bring detailed proof or numbers, because people already know. They wonβt be surprised.
But they need to hear it: the team needs to identify the fact that they are falling behind, and working to get better. So they need someone who 1) addresses the elephant in the room, and 2) brings the initial spark that eventually turns into momentum.
π Create a shared vision
Once people agree the team is struggling, the next step is to create a shared vision for what a high performing team looks like.
This is useful to do before you even start to address problems. In an ideal world, ask people:
How would you spend your engineering time?
What would you work on?
How often would you ship features?
How would you work with product and the other stakeholders?
Which meetings would you have, and which not?
How would CI/CD work?
Think big, but also be realistic:
You might love tests to run instantly, but you should know that e.g. 15 mins is achievable, down from 1 hour that they take today.
Spending zero time on maintenance and tech debt is an impossible dream, but going from 60% to 30% is probably doable.
Visualize your high-performing reality. Imagine a sprint / dev cycle: what type of work do you commit to? How do engineers spend their time? How does communication work?
Try to run this as a mini-workshop, and write down everything. The goal is to create some initial momentum, plus giving the team a north star to work towards.
π¬ Identify problems
The next step is to identify what the struggle is about.
Before you talk any specific parts of the process, what are the visible problems in the teamβs outcome?
Here are the four big candidates: