What makes a good engineering culture?
Empowerment. A healthy culture creates empowerment which breeds ownership, proactivity and resilience. A healthy culture creates happiness. Happiness is an important factor in achieving focus and focus is essential for quality. Culture is expensive. You buy empathy and respect at the cost of a lot of time and effort. But it's worth it. Here's why.
In previous articles I've talked about what motivates me and keeps me happy as an individual and what my responsibilities are to my team as an Engineering Leader. I want to take this one step further and talk about what I've done to create a culture that helps others understand, embody and grow this environment of mutual accountability and continued success.
I've worked hard to very deliberately create a culture that I want to be part of.
I want to:
- Be part of a world class team. To be part of an excellent environment that creates amazing products and solves real problems it starts with finding the right people so that you can grow together. Great culture not only attracts great people, but it's also influenced by them.
- Continuously innovate. There are so many problems to solve. I want to be at a company thats solving the ones that I feel will make a real difference. But more than that, I want to be on a team that does it in a way that keeps me interested so that I'm excited to do it. A culture that focuses on outcomes instead of outputs emphasizes quality over quantity.
- Grow responsibly. As an individual I have big goals and aspirations but I want them to mean something. It's natural to want purpose. A solid cultural focus on value and mission helps remind us of what we set out to do, especially during periods of growth. Disappointing the right people is essential to staying true to who we are.
The best way to learn is through experience. Below are some situations I’ve been in, the lessons I’ve learnt from them and the guiding principles I’ve identified to create and maintain a healthy culture on my team.
we should always meet people where they are instead of setting unrealistic goals or expectations of them.
I once hired a Senior developer, we'll call him Harry. Harry had fantastic technical ability but lacked in people leadership. I decided to put Harry on a team that needed both technical and team leadership skills with the reasoning that I'll coach him on how to work on his weaknesses. Harry was already very aware of the values I'd established on my team and wanted the chance to show that he embodies them so I wasn't surprised that he agreed. But I missed one fundamental thing. I was forcing values on to him. It wasn't that he wasn't already the type of person to take ownership or display resilience, it was just that by putting him in in a position that doesn't set him up for success he was being made to be needlessly selfless for the sake of the team. The lesson I took away is that we should always meet people where they are instead of setting unrealistic goals or expectations of them. I'd emphasized ownership and resilience and my team felt obliged to show these values. I would have saved Harry a lot of stress if I listened and understood first.
Everyone has different motivations and thats absolutely ok. How I've found balance is by creating some autonomy on my team to make decisions by giving us the choice of tooling, language, process etc, but using the mission to keep us rowing in the same direction as the rest of the company.
I'm very mission driven. I feel the problem overrules everything. But I've had engineers that didn't feel as mission driven as me. They wanted to be on my team because they valued the culture and how we do things more than what we're doing. We ended up having regular disagreements because we had different priorities. Eventually, that engineer, Sue, ended up leaving because she felt she wasn't getting what she was looking for. I spent a lot of time thinking retrospectively about this situation and what I could have done differently to meet her half way. The big take away here is that not everyone will be driven by the mission, especially at larger organizations. Everyone has different motivations and thats absolutely ok. How I've found balance is by creating some autonomy on my team to make decisions by giving us the choice of tooling, language, process etc, but using the mission to keep us rowing in the same direction as the rest of the company.
When someone asks for time off I redirect them to their peers because because they're accountable to each other to get things done.
My organization has created two separate hierarchies. One is the typical org chart outlining report chains. The other, more interesting one is an accountability chart which looks slightly different. The accountability chart decouples people from positions and outlines the five most important accountabilities for each position. While creating this chart I realized my accountabilities go both ways. This small epiphany led to much bigger ones. When someone asks for time off I redirect them to their peers because because they're accountable to each other to get things done.
By recognizing my own weaknesses and the weaknesses of my team and finding people that complement them I was able to remove these bottlenecks and create an ever improving team dynamic. I now encourage my team to bring solutions, not problems.
When I first started building a team I realized I have to put my ego aside and find people that are smarter than I am. By recognizing my own weaknesses and the weaknesses of my team and finding people that complement them I was able to remove these bottlenecks and create an ever improving team dynamic. I now encourage my team to bring solutions, not problems. This helps in the feeling of empowerment because rather than waiting for others to solve your problems, you feel like you can solve them yourself. They now come to me with what they need to get their job done rather then coming with whats stopping them from doing it.
I set the ground rules that everyone has the right to their opinion, but should disagree with each other respectfully.
Intelligence often goes hand in hand with ego, and ego drives conflict. I have an engineer on my team who looks at the world very skeptically. If I don't let this engineer make their point, their skepticism grows and their trust diminishes. Instead, I set the ground rules that everyone has the right to their opinion, but should disagree with each other respectfully. Keep conversations to the point and driven by facts rather than charged by emotion. The result I've seen is the engineers growth in empathy and the ability to see things from other peoples point of view without immediately jumping to conclusions.
I make sure everyone feels heard and then make a decision.
I hire smart people to solve hard problems but just because someones smart doesn't mean they're always right. I used to push for consensus when making decisions but this rarely happens, especially in a room full of opinions. Instead, I make sure everyone feels heard and then make a decision. Most of the time there's no problem, but because we're a healthy team we have a path forward even when everyone doesn't agree.
Shared accountability leads to us wanting to set each other up for success because we don't want someone else to fail.
I can't count the number of times I've been in a situation where somethings gone wrong in a production environment and the team has ended up in a retrospective meeting to have a "post-mortem" conversation. So many times these conversations have ended up being about trying to figure out who to blame or to "call people out" and i've thought to myself what are we even doing here?! I've moved far away from this culture by pushing for processes where there are multiple people with multiple accountabilities each doing their part. Our development process includes PM's defining acceptance criteria and doing final reviews, developers writing and peer reviewing code and QA constantly pushing for higher levels of quality. If something goes wrong in production it wasn't just one persons fault because everyone missed it. This level of shared accountability leads to us wanting to set each other up for success because we don't want someone else to fail.
"don't fear failure, fear inaction."
I used to have a saying, "don't fear failure". I thought if I set up a team that's not afraid to fail then we won't be scared to push themselves. But this mentality came with a side effect. My team became so afraid to fail that I realized in a lot of cases they didn't even try. What I meant to teach was, "don't fear failure, fear inaction."
Not everyone is happy in every situation but by reminding ourselves of why we're doing what we're doing it becomes an easier pill to swallow.
My team likes taking the time to do things right, but my companies growth team moves quick and wants clients set up as quickly as possible, as they should. This creates conflict. We resolve this conflict and find compromise by holding the same core values and letting the mission drive us. We work together to measure risk and create a plan to mitigate it as much as possible. Not everyone is happy in every situation but by reminding ourselves of why we're doing what we're doing it becomes an easier pill to swallow.
If you could get all the people in an organization rowing in the same direction, you could dominate any industry, in any market, against any competition, at any time.
- The five dysfunctions of a team
A company that focuses on people will experience success as a side effect. A great Engineering culture needs a balance of getting things done, getting them done well and making sure everyone feels like they have the power to contribute. It takes effort from everyone but in the end everyone benefits.
I tweet about this type of thing a lot. If you enjoyed this article, you may enjoy following me.