It’s been approximately six months since I’ve entered engineering management. Here are some thoughts reflecting back on that season now.
I didn’t like it at first.
Let’s face it: I didn’t like the feeling of being a “manager” now. It comes with too much baggage of pointy-haired bosses or ineffective waste layers. Why do we need managers anyways?
More to the point: I love coding. I love working on rewarding projects. I hated the thought of being tied up in meetings while day by day getting more and more disconnected from code.
So I struggled a lot in those first few months (still do), trying to maintain the balance of working with product management to get a strategic vision communicated, or with other engineering teams to get a tactical vision in place, versus trying to be deeply involved with the code base and doing code reviews.
You can’t code anymore.
In the end? I had to come to grips with the reality that my team needed me in a different role — a strategic role, helping them see the big picture, sniffing out dependencies and destroying blockers before they got to them.
But I still needed to be spot-on with the code — I still needed to be in the know with new product features as they are being developed. So it’s my priority to be in design discussions, but I can’t be the implementer anymore.
So I’ve started a change in mindset — how can offload all the random codebase knowledge I’ve acquired over the years to the team? How can I effectively share my expertise so I’m out of a (coding) job? I’m starting to be more convinced that the answer to that is pair programming.
Pairing your way out of a job
Nowadays if there’s a story or task in which I am the only one (or one of few) with domain knowledge about the feature, I’ll ask a team member to pair with me on the feature. That way we get a really effective teaching tool about the domain model, and the extra plus in that if I get pulled into a meeting, development can continue.
But you still have to code.
So I code on the weekends (not everybody can do this!)
We’re a Rails team taking on a new Ember project. I need to get my chops up around Ember so I’ve decided to pull in a side project to hack on the weekends. My side work on Wejoinin lets me do all the Rails things I don’t get to do anymore at work.
And it works for me because I love to code, and to be honest, I don’t ever want to get weak in that area.
To be honest, I’d love more feedback from other engineering managers in that area. How do you keep your chops sharp?
People are your priority.
I’ve read often that empathy is everything when it comes to management, and it still rings true. No matter how this product launch goes, in the end your team will remember how you treated them, how their thoughts and feelings were taken into account.
One thing I’m trying to check myself is my tendency to jump in on other people’s sentences and cut them off. It sounds silly, but sometimes I realize I like to talk a lot more than listen. As a manager, sometimes you need to dwell on the feedback of a team member for some time before you write it off. There’s usually a core message in there that’s completely valid — a frustration, a desire for change. Empathy means communicating the message: “I heard you, and I respect your thoughts.”
It’s your attitude
And finally, here’s what I think: your attitude toward your company and the team make ALL the difference.
- Is your orientation truly to support your team? How will it be clear in the long run that your supported someone in their career?
- Where are places in your workday where you can connect and sympathize with people — share a joke, listen to someone’s frustration, or just simply go out to lunch?
- How are you giving people something to work toward to: a vision of changing the world (for Blurb, it’s about transforming the publishing industry).
- How are you addressing negativity? Grumbling is important to address head on in its own space, but how are you empowering people to take charge of issues of culture or organizational friction?
- How are you checking your own negativity — sometimes we forget that we’re the solutions to our own problems, and I’ve found oftentimes that the very issues that you assume are impossible to change are crackable by having the right relationships with the right people.
The little things matter.
Lord knows I have a lot to learn here. One area I’m learning to grow in is how to give honest and accurate feedback to team members, without fearing how they’re going to receive it.
Another area? Delegation. I’m learning to delegate the little micro-responsibilities in my job that I just kind of expect that I’m supposed to do. Case in point: every week we accept a translation import from a third-party translation service. I realized that I was burning a lot of time reviewing hundreds of lines of translation keys every week, and the repetition of it was sapping a lot of my energy. I had to learn to ask a team member for help and give them responsibility to own that function of the process.