3 Keys to software engineering “management”
When I first became a lead developer, I really didn’t know what I was doing when it came to management. I avoided making horrible mistakes from sheer luck. I had the space and time to get better, and here’s what I learned about doing it right.
Lead and grow developers, don’t “manage” them.
I think the word manager needs to go away. Management is for problems: crisis management, care management, etc. The entire philosophy and much of the history around management tends to be dehumanizing and exploitative. Unsurprisingly, people don’t like feeling “managed”.
People do like to grow, and people like to be around good leaders. And if people are given the opportunity to grow and work with an excellent leader, they will usually CHOOSE to do what is asked of them. And that’s the whole reason you wanted a “manager” in the first place, right?
What is leadership then?
Leadership doesn’t mean being the “best”. In the beginning I thought that I had to be the biggest and best tech in the room in order to manage. But this isn’t true and it’s impossible to sustain anyway. In a large team you can’t be the best at everything all the time. Your job isn’t to be better than the team, it’s to make the team better than they already are.
Leadership isn’t a singular skill. It’s a toolset, one you have to grow and develop like you have developed all the others you have in life. Leadership is what we call the set of tools that help you convince others to follow.
A good analogy is this: “Being a boss is making someone walk a plank. Being a leader is getting everyone to go swimming. In both cases people get wet, but only in the second case are they enjoying it”
What about growth?
The other side of “management” is growing your team — and I don’t mean growth in headcount. Helping your team grow both as individuals and as a group is one of the most rewarding parts of “management”.
Let’s talk about what growing someone isn’t: telling them how wrong they are. Sometimes, yeah, you gotta let someone know they are doing it wrong. Nor is growing someone being a teacher (at least in the sense that typically comes to mind). A lot of engineers are surprisingly good teachers (even if they pretend they hate it) and this is good but it’s still not what I’m getting at. Growing someone is like proactive teaching, but without as much talking. It’s why I think introverts tend towards being better at growing others. It’s less obvious, and they get less credit, but I think it’s far more effective. Growing someone involves giving them tasks and challenges that push them just a little out of their comfort zone.
As a manager or a lead, you don’t have the time to teach everyone on your team. Moreover, you might not be able to because you aren’t the smartest person in the room any more, remember? And you don’t want to be running around telling people that they are screwing up because that is terrible for morale and just pisses people off. None of these activities scale. Growing people scales.
Align Careers and the Company
This is hard to do if you can’t lead and grow your team capably, but if you can it’s a goldmine for the company and the employees. By aligning interests as much as possible you can really help everyone.
Part of this involves managing upwards. Do employees want to try a new framework, a new approach, take on something a little different? Then it’s worth seeing if there is a small project that could be done that utilizes these skills. Good companies are constantly trying small innovations and proof-of-concepts. If you are at a company that doesn’t, then that’s something you want to sell — cheap projects that can grow internal expertise and knowledge.
Some companies have an obvious career path. It’s worth talking to your team to see if their goals and the company path line up. If so that’s great and it’s easy for the both of you. If there isn’t an obvious fit, then either they will eventually leave or something will have to be created for them. Either way, be proactive in working towards the best outcome. If that outcome is that they leave, then be prepared and possibly even help introduce them to the right people.
Some might say that introducing an employee to others is bad for the company. But that’s not true if it’s done right. I’ve worked at a few companies where someone left and ended up working for a future-client. The relationship generated a career move for the employee and a business relationship for the old employer. That’s the power of thinking ahead. It’s worth having conversations about this with your managers as well. Intelligent companies know people leave and intelligent managers do too.
Create a Supportive Culture
There are a lot of companies that have internal environments that are political and hostile. These are not places where great people thrive. These cultures involve people and teams tearing each other down to try and get ahead rather than building each other up. Over time, these companies eventually eat themselves alive and fail.
So why do people create these cultures? Insecurity and mediocrity for the most part. In a culture where everyone is trying to cover their ass instead of proactively get ahead of problems, it becomes a blame game. Greatness performs, mediocrity covers its ass. It’s very easy for companies to fall into this trap as they grow. Human nature is to go “Well, I maybe did X, but THEY did this other thing Y” and deflect whenever something goes wrong. But when things go wrong, that’s an opportunity to grow and improve, not deflect.
To truly lead, you have to internalize a truth: no matter what, it’s your fault. Everything your team does wrong, it’s your fault. When they do things right, it’s on them (and on you), but if they are having issues it’s your fault.
Taking that attitude with the team, taking pro-active ownership of risks, failures, and problems is the type of behavior you want to model for them. When things go wrong, you accept responsibility and then say “Ok, I clearly needed to get you all X so that we could have avoided this. What do you need from me today to get back to smooth sailing?”.
Once you’ve modeled this behavior yourself, hold other people to it as well. How do you do this? Grow them! Give someone the lead on a task and a small team or even a pair programming assignment. Let them have small failures so that they can be strong for a big success.