Practically every professional developer can name a great, and a terrible, manager they have worked with in the past. Good Engineering Managers are kind of like the bass line in a song, you might not notice them when they're there, but something will definitely sound wrong if they're absent. For one reason or another, I have somehow ended up leading a team or acting as an Engineering Manager at each of the four companies I have worked for over the past decade. As time has progressed, I have become increasingly aware of "management" as a skill, rather than some intristic talent. A skill which can be practiced, honed, and improved upon.
Most "new" Engineering Managers in startups seem to be individual developers who are promoted (or demoted depending on how you feel about it) into the position because of their technical acumen. I think this is how I have ended up, against better judgement, in the position of Team Lead or Engineering Manager in the past.
Being technically skilled doesn't mean jack shit with regards to becoming a good Manager. However, being a good developer does hold some correlation to management potential. In case you've missed the memo, a "good developer" is someone who:
I think the list could probably be longer, but you get the point. Skilled development is less about writing code, and more about collaboration with other people.
The problem with that promotion from Developer to Manager is, unfortunately, that being a good Manager is all of those qualities cranked up to eleven, with additional responsibilities like: career growth, budgets, and other boring nonsense thrown in. As if that wasn't bad enough, nobody talks about, or trains you to be a good Manager. Most of the good Managers I have worked with were fortunate enough to work with "good Managers" in the past.
Most of the "bad" Managers I have worked with fit into one of two categories:
Personally, I don't know if I am a good Manager or not. But I do know that I have been working at it, and I believe that I am getting better.
The fundamental shift in thinking which I experienced was to understand that: Management is a skill just like building software. If you don't work at it, you'll never get better at it.
One of the hardest parts about being a Manager, or a leader, in any hierarchical organization is that it can feel "lonely." You become the "One" in the "One-to-Many" relationship. This can not only be personally isolating, it also means you might not be learning from your peers in the organization.
My mind sometimes goes to this famous photo of John F. Kennedy during the Cuban Missile Crisis:
Spending your day between hearing, mostly justified, complaints from your direct reports and arguing with Product Managers who want to squeeze every last bit of Feature out of your developers, consequences be damned, can be extremely isolating and exhausting. In the past I have felt, at times, besieged by everybody around me.
The upside of being a Developer is that I can dump problems on my Manager; downside of being a Manager...
It took me a while to fully understand how ill-equipped many of us are for the role of Engineering Manager. Fortunately over the past 7-8 months, my employer has been paying for me to work with a Management Coach. My Coach has been extremely helpful to bounce ideas off of, to discuss situations which I need to address, and to provide mentorship, all to help me become a better Manager.
Working with a Management Coach alone hasn't been sufficient, but it's definitely helped frame my thinking. I have also read more books about organization psychology and structure over the past 8 months than at any point before. Additionally I have spent probably more time than at any time in my career proof-reading emails, mentally playing out scenarios, or having arguments with myself, attempting to provide both perspectives.
Unintentionally I have also started talking with my fellow managers more than ever before. Rather than only talking with my peers about projects, deliverables, or misbehaving reports, we're talking about Management itself.
Setting aside whether I'm actually a good Manager or not, all of a sudden, I'm able to employ many of the same techniques that made me a good developer. A little bit of research, mentorship, and experimentation.
Management is difficult. Management is having uncomfortable discussions. Management is bridging the gap between policy and understanding. Management is helping people succeed. Management is growing others. Management is recognizing each instrument must collaborate for the orchestra to work.
For me, the catalyst for my mindset shift was internalizing that: Management is a skill.
Find a mentor, find literature, find peers to bounce ideas off of.
Nobody deserves a bad Manager.