Let's start talking about what makes a bad one.
A bad Engineering Manager is:
- One who for one or more reasons loses team members.
- Fails to deliver as promised.
1. Losing developers
As manager, you can't prevent your developers from leaving your team, or the company. But your duty is to minimize that risk.
Developers leave for multiples circumstances:
- Around ~50% due to the lack of interesting projects.
- 20%-25% due to leadership related topics.
- And about 10%-15% due to their manager.
As you can see, the good news is that you can (to some extent) affect all these situations.
Leaving due to the lack of interesting projects
You should try to get interesting projects for your team. An attractive one could be a fun project, or a challenging one. It could also be one that will have a considerable impact or bring a lot of value for the business. People are more motivated when they see their work having an impact on others: #significance.
Let's say that the project assigned isn't the one your team expects. What should you do? A way to "hack" this is by using an interesting stack/library or piece of technology to tackle the problem. Some developers engage more with projects where the stack does appeal to them.
Legacy projects are something you should try to avoid as much as you can. While some developers like the challenge of understanding why things have been done in a way, or why they break..., most of them prefer to "create new things".
If you can't avoid them: Set challenging goals. A refactor, if possible, could be a great way of motivating a team.
Leaving because of the leadership
Sometimes #choosing the company direction or strategy is far away from developers' duties. Your work as manager should be to listen, register, and communicate your reports' ideas to them. Is not about their wishes or frustrations. But rather about identifying criticism or feedback that the leadership could use in its favor.
This is especially important when the perception is that the leadership has been erratic, and the team lost trustworthiness on them. Your duty as manager is to make sure that communication is open and fluid.
#Predictability is key, uncertainty makes people worry and ultimately leave due to lack of information.
Leaving because of you
If you are doing a great job, hopefully, this would never occur. But if it does, the first question you should ask yourself is: "What am I doing wrong that made this developer leave?". And adjust appropriately.
When did it happen? If a member of your team leaves as soon as you join, it may be because you suppose a threat to him/her in some way: they wanted your role. Or (ideally) it has nothing to do with you, and the problem is something their previous manager was not able to solve. In any case, now is your responsibility.
Tip: Before changing anything, listen to their needs, and adapt. Don't run implementing big changes too soon or they may feel they have no control over the team's direction or that they don't #belong to it.
Lack of growth or improvement
Good developers want to learn continuously. They want to progress in the ladder, to get praised for their good work, and their salary to get increased. If you fail to recognise any of those situations, expect your reports to leave.
Some actions to take:
- Keep progress on their goals, if they are not motivated, adjust, set new goals based on their interest.
- Help them to identify areas to improve. Feedback is key.
- If their desired path is as an individual contributor: Set good expectations, and when reached, promote and set new ones.
- If their desire is to become a manager, work on this: help them to replace you.
- When it comes to salary: Make sure there are good guidelines set at company level. Having them will make your job and have discussions around it so much easier. It's also about #equality. People doing a similar job should have similar salaries. Don't forget that.
As I said before, predictability is crucial. Uninformed employees may rush to take quick decisions and leave. Your work as manager is: Communicate timely about company changes or important decisions. If your reports are informed, they can make right choices based on their needs.
Photo by Venti Views
Tip: Filter what you say. Saying too much could be harmful and you should avoid gossiping. Keep it balanced. Inform facts, some information should be shared timely.
2. You team fails to deliver as promised
Up until now, we have been talking about why a bad Engineering Manager is one that loses team members.
Let us talk now about the other aspect that differentiates a bad one from a good one: Your team's output.
While they are responsible for the team's deliverables, you are accountable for them.
Your work as a manager is to have a high-performing team that is able to estimate, plan, execute, and deliver according to expectations.
The question is: How would you achieve that?
The answer in theory is rather simple: support. In practical terms though, it is not that strait-forward.
Estimations are hard
Your job as manager is to support your team so they have discussions about how to estimate, and provide the tools to do so.
Senior developers may have a better understanding on how much work it is required to achieve certain tasks, while junior developers need more guidance.
#Equality and fairness play a key role. You should create an environment where everyone is listened to and every opinion matters.
Junior developers may be afraid of giving high estimations, and then work extra to meet the deadline. Senior developers may set estimations based on their experience and knowledge but those tasks may be later performed by others.
Estimations are... that, estimations. Your work is also to keep an eye on the development progress, re-plan, and adjust. Remember: You are accountable for your team's deliverables.
Planning / Executing
You may think that planning is the project manager's task. And that is, in part, correct. But when it comes to people, it is yours. While the project manager, with the help of the team, plans the work needed, your work is to make sure that the team is executing that plan the best it can. For example, managing the resources based on availability. Or less fancy: Holidays.
Keep high performance. 1:1's could also give you clues on why certain people are underperforming, and you must revert that situation.
Delivering on time
Your team needs your support to deliver in time. Unblock them if they are stuck. If you are strong technically, identify processes that make the execution slow. For example, allocate time for automatisation. Release often.
You may have seen some keywords during this post that should resonate to any manager:
Indeed, these are six core needs researchers find are important for humans.
To simply answer our question: "What does make a good Engineering Manager?":
- Identify which of these core needs are the most important to your reports and team, and help to fulfill them.
- Support the team with the tools, processes, and ways of working to make their deliveries on time.