How to lead a high performing engineering team
Building a high performing engineering team is not a one-size-fits-all process, but it’s also not rocket science.
Building a high performing engineering team is like constructing a Lego set: it’s not a one-size-fits-all process, but it’s also not rocket science. It’s all about getting the pieces to fit together and working seamlessly, and adding pieces that make you and your team unique.
It’s not as much about having the best and most knowledgeable engineers as it is about creating an engineering culture where everyone respects and trusts each other, and knowledge is shared freely.
A shared context and vision
The foundation to building a high performing engineering team is to make sure that everyone has a shared context and vision. This means that everyone needs to understand the goals and objectives of the team and the project, and that everyone is on the same page when it comes to the timeline and deliverables.
Write. It. Down. The only way to get everyone on the same page is to document your vision and values. This should include the goals, timeline, deliverables, and any other key information. Having this all in one place will help to ensure that everyone is on the same page and that there is no confusion.
Set up a regular all hands meeting. Make sure everyone is up to speed on the latest news and progress and that everyone has the opportunity to voice their opinion.
Define the long-term goals and objectives for the team and the organization. This will help to ensure that everyone understands why the team exists and what it is trying to accomplish. It will also help to ensure that everyone is working towards the same goal.
Communicate expected values and behaviors across the organization to ensure everyone is on the same page. This includes things like the company’s mission statement, code of conduct, and core values. This might feel like a little too much when you’re a small startup, but as you start breaking down to multiple teams it will help tremendously.
Define processes and clarify responsibilities
Once everyone has a clear understanding of the big picture, the next step is to define processes and clarify everyone’s responsibilities. This will ensure that everyone knows what is expected of them and that there is a clear plan of action. It will also help to ensure that tasks are completed in a timely manner and that everyone’s efforts are maximized.
Write down individual role expectations at different levels and make sure everyone is clear on the scope of their work. Starting from a simple job description, to defining a career ladder.
Co-create team agreements with your team members which will help to ensure that everyone is on the same page and that everyone knows what to expect. Some examples of those are:
- When we work
- How we communicate (e.g. public vs private slack channels, jira tickets, ...)
- What "done" means
- How we reach consensus
Define and write down technical processes (especially if not fully automated)
- What's expected from QA
- On-call rotation
- Bug escalation process and prioritization guidelines
Measure. Improve. Repeat. You cannot consistently improve something you don't measure. And here we don't mean counting commits. How do you know your team is shipping faster and more frequently from sprint to sprint? How do you know whether you have improved stability? The hot topic these days are DORA metrics from Google.
- Deployment frequency
- Lead time for changes
- Time to restore service
- Change failure rate
It's up to you to add more, especially when it comes to efficiency of how you communicate, or how you resolve incoming issues. But only pick a few and make sure your review them with your team and discuss how to improve.
Open and clear communication
The third step is to set up an environment for open communication both horizontally (cross-team) and vertically. This means that everyone should feel comfortable voicing their opinions and ideas, and that everyone should be willing to listen to others. This type of communication will help to foster collaboration and ensure that everyone is able to contribute to the team’s success.
Have a single source of truth, document decisions, and share them freely so that everyone has access to the most up-to-date information.
Encourage feedback as a standard day to day activity and provide a platform for it. This can be implemented in multiple ways, you can block out a few minutes at the end of every meeting, encourage sharing it later through slack, through an anonymous channel, or simply in comments on a document.
Run regular retrospectives and establish a no blame culture where mistakes are seen as learning opportunities. Discuss the results of incident or bug resolutions.
And this is a big one when making organizational or process changes, explain why they're implemented and allow space for questions and feedback. (Bonus point for including the team in defining these changes.) Knowing the intent behind them is really important for adoption.
Foster supportive leadership
Finally, it is important to support your team and to create an environment of trust. This means providing the resources and support that your team needs to be successful. It also means being open to feedback and being willing to make changes when necessary.
Trust comes first, and this starts with the leaders. You need to trust your team to do their job without your involvement. And also prove that they can trust you by being accountable, showing that you have their best interest in mind, and that they can count on you. A great starting point is BRAVING framework by Brené Brown's Dare to Lead.
Don't solve your team’s problems. Give your team agency and responsibility by removing yourself from the day to day operations but make sure to check in, coach, inspire and expect more from them in your 1-on-1s and retrospectives.
Finally, it’s important to reward and recognize good work. As engineers we over-index on problems and often take their resolution as a given. That's why as managers we have to make sure to consciously share positive feedback with the team and celebrate wins.
- Encourage public shout outs on Slack
- Celebrate feature launches
- MVP prize at the end of each sprint
The rest is on you
By taking these steps, it is possible to create an engineering team that is high performing and successful. It takes time and effort, but the results are well worth it, so get those Lego pieces out, and start building!
In retrospect, Lego pieces hold together much better than team habits, so prepare yourself for checking in, helping fix up a thing or two here and there to keep things running smoothly. In that sense it’s more like an engine. Yes, an engine reference would’ve been better. Sustaining the culture would be like keeping the engine well-oiled. But it would be a little discouraging to tell you that we’re building an engine right at the beginning of this post, wouldn’t it?