Berlin

November 4 & 5, 2024

New York

September 4 & 5, 2024

The four habits of highly effective teams

The secrets behind successful engineering teams
April 11, 2022

You have 1 article left to read this month before you need to register a free LeadDev.com account.

Over my years working in many different organizations in the tech industry, I’ve noticed successful engineering teams tend to share a set of core habits.

Here I’m sharing these habits so that you too can make your teams more effective.

1. Focusing on the team over personal ownership

Effective teams succeed and fail as a group. Every teammate should feel comfortable proposing a change to a section of the codebase they’ve never touched before. Furthermore, every teammate should be encouraged to change a part of the team culture or rituals to feel more natural to the team.

When we create something, whether a section of code or a document, it’s natural to feel some personal ownership over that thing. When we empower our colleagues to suggest edits or refactor, it allows the team to move with greater agility by removing bottlenecks. We also begin to remove the bus factor and naturally distribute knowledge allowing for steady operation, especially when team members leave.

I remember working on one project where my entire team was new to the company (we had all joined via an acquisition). It took us a while to feel like we could modify the large codebase we were integrating our project into. Not because of the technical challenges but because we were afraid of stepping on the toes of the original authors. We eventually had an epiphany that we could change just about anything, and no one would care; in fact, they wanted and expected that.

From that point on, we took a chainsaw to the codebase and were able to launch a wildly successful project within a few months. Before that tipping point, we struggled to develop even the most modest capabilities. We spent too much time designing around the existing system instead of walking in our power to change the system in the ways that made our job more manageable. Having learned that lesson, I get so happy when someone I don’t know or have a relationship with goes and modifies the code I built for their use case.

2. Assuming the best intent

‘Happiness is a conscious choice, not an automatic response.’ – Mildred Barthel

This habit is perhaps the simplest one, but the easiest to forget. When tensions are high and frustrations are peaking, it becomes easy to assume that someone purposely failed you. It’s much harder to make the choice to find happiness and assume no one intended to frustrate and irritate you.

There may be circumstances where your assumption is wrong, but that tends to be the exception, not the norm, especially on high-performing teams. Taking a moment to pause and assuming positive intent helps reframe circumstances in a way that reflects positive light.

3. Keeping a positive emotional bank balance

Everyone has an emotional bank account. When someone does something helpful and delightful, they make a small deposit in your bank account. When you do something you’re not thrilled about, there’s a withdrawal. Keeping a positive balance will help with burnout and stress.

Withdrawals are significantly more expensive than deposits. It may take two or three deposits to keep a positive balance on one withdrawal. Even the most minor withdrawal can cause outsized stress and fatigue when your balance is negative. Have you ever been on a team where it felt like pulling teeth to get someone to cover for your on-call shift? Contrast that with a team where it’s easy to swap shifts with someone. Typically teams with a lower collective balance find it more challenging to support teammates by absorbing inconvenience.

4. Being empathetic to other teams we depend on

Effective teams know it’s important to build strong relationships with the other teams they depend on. It’s important to let these other groups know we want to help them succeed, we’re rooting for them, and we like them.

Being empathetic to the groups we depend on can manifest itself in several ways. Taking the time to ask a question concisely with links to relevant information and debugging steps taken can reduce the back and forth between teams. Also, provide design solutions to the problem you encountered. For example, recently I was struggling with getting a network connection to establish. So, I contacted the network team with a bug report:

Hi @team-network, I’m having trouble connecting from host [zebria-mule] to [turtle-ardvark] on port 9000. I’ve checked the access groups via the cli and have inspected the logs [link to logs here], but for some reason, the connection cannot be established. Have you considered adding logging when a connection attempt is made? Anything you can do to help us?

This report is short, to the point, and includes debugging information that will help diagnose the problem. It also provides a suggestion that can help others who encounter this problem in the future. Contrast this reaction with an alternative:

I’m having network issues :rage: !!!

Not as helpful for the person looking into the request, is it? When there are follow-up questions, be responsive in answering and providing greater detail. Don’t fire off a request for help, then go to lunch or sign off for the day. Instead, wait to file the report at a time when you can assist in debugging.

Reflections

Being aware of these habits and working them into your culture and workflows can help your team operate at a higher level. When your teammates are supportive of each other, you’ll see a reduction in stress and burnout. And whenever I’ve been a part of teams that embrace these habits, the hard things become easier.