Learnings as a new Engineering Manager

Mitesh
6 min readApr 27, 2020

--

Over last year, it was a transition from a tech lead to an engineering manager. Engineering Manager is a completely new and different role than being an engineer and doing a lot of coding. As an engineer, it always felt good to complete a feature in time with fewer bugs, modular and scalable design while following design patterns and object-oriented principles. As an engineering manager, your definition of completeness changes a lot from just writing code to hiring, managing, mentoring, and delivering a product to end-user. It took some time to understand that it’s not just about code but much more than that. I tried to add a few actionable learning that any new engineering manager can try to follow.

  1. Find A Mentor: As engineering manager expectations are very different than an engineer. Having a mentor who crossed this role and knows about your work is very helpful. Your mentor can give you suggestions on your estimation of feature timelines, guidance on managing people, how not to fail in communication, how to balance speed vs stability and lot more. These things are not one-time guidance but an ongoing one. It gives you confidence in the start as you have someone who can show you a path if you feel stuck and want to go back to a happy life of coding. If there is no such person in your company, look for outside help. Talk to people in similar roles, discuss what they think of this role and how they improved, read articles, etc.
  2. Stop Coding: Your company or peers may expect you to do some coding, as moving a good coder to a management role can be hard at the start. This is hard for you too, as you aren’t able to constantly give the attention required for both roles. Even at times, you want to go back to coding as you are not sure how you adding value in this new role. You need to understand that coding is 30% writing actual code and 70% thinking, designing, testing, etc. Try not to go and write code, as there is no end to it. On the other hand, be involved in all design discussions. Focus on the effective running of the team with high motivation and alignment with product and company.
  3. Start Code and Design Review: Code and design review helps build empathy with the team. This helps improve programming skills and build an understanding of functioning and loopholes in the product. This is a great way to provide mentorship to developers in the team. Code review acts as a platform to discuss coding practices, design, and architecture. This is the most important aspect of your work and creates a connection between the team. Don’t try to be a sole reviewer for everything and let other’s involved in this process, as that way you are creating a bottleneck on yourself as you might be busy with other managerial tasks.
  4. Build Radical Candor: “Care Personally” and “Challenge Directly”. It is important to care about people you work with and honest at the same time. Listen to them, understand their concerns and path they want to take. Give candid feedback on things to improve to reach there. Do 1:1s religiously even when you have very little to discuss. This helps in doing hard conversation and build trust among the team which is very important to well function.
  5. Don’t Micromanage: When you moved from the role of developer to a manager, seeing someone writing bad code or making bad design decisions feels really frustrating. That is the time when you want to go and help them make a better decision. While doing so, you need to make sure you are not dictating your decisions and making sure everything happens as you want it to be. You should give suggestions, help the developer understand the flaws in code or design. Make them realize mistakes and support them in improving it. At the same time, micromanagement is not always bad. Sometimes you need to do this for a short duration of time to help the overall team achieve a goal while making sure you don’t keep doing it.
  6. Be a mentor: People are the most important pillar of any team. You need to make sure your team is happy, have product empathy, getting good technical learning while giving their fullest to the product. You are not only a manager who creates and assign tickets, asks for updates, doing design discussion, etc but a mentor for your team. You need to grow your team by helping individual members grow in their careers, not only technically but a productive person. Always remember, there is no team without its members.
  7. Understanding Team Speed: Understanding the speed of execution of your team is critical. You need to understand the strength and weaknesses of each person on the team. This can be done by giving different tasks, discussing design architecture, and code review while keeping a watch on time spent. This will help boost confidence in their ability to execute a given task in a timely manner. You should help members to gain different strengths which are more like investing in the future, initially, they will be slow in execution but with time speed will increase. All this helps make you better decisions on the timeline on your team’s behalf while making your team stronger.
  8. Set Clear Expectation: Clearing telling expectations is very important instead of assuming it is known. An expectation setting is needed not only inside the team but outside too. Don’t commit too much which your team can’t achieve. Try to understand the strength of each developer and give timelines based on that. If you push your team too hard, it can backfire and some of them might leave. Creating a balance is very important. The product team will always want your team to release as many features as possible. Try to sit with them and help them understand how much you can achieve. Sit with each developer and explain their roles and responsibilities. What is expected from the current level as well as the next level? Keep giving feedback regularly on the mismatch of expectations.
  9. Respecting Processes: Too many processes can cause delays, annoyance among the team. While the right set of them can help boost productivity. The most important part is to respect processes and understand why they are there. Always question an existing process by asking do we need this now? Create new ones that are important and help boost the productivity of the team. A process like having spec and design finalized from the product team before taking any feature in development can help reduce ambiguity among developers. Having a pre-planned release cycle, regular release cadence with development, QA, automated and stress testing before every release is a must. You need to understand the need of the organization and evolve with that instead of following the same processes as other organizations as every product and organization is unique.
  10. Release Planning: Planning for your team’s tasks is one of the critical jobs for an engineering manager. The product team will provide a set of tasks that they want you to get completed from your team. Now it’s your responsibility to estimate them based on your team member’s strength, assign them to the right people, and make sure they are completed on time. You need to make sure that estimation is based on a team member’s speed, not on your own speed with an additional bandwidth kept for any unexpected delays due to bugs. You need to make sure that everyone is aligned with their commitments. You need to get complete visibility in the release’s tasks and make sure to provide it to the product team in case of any expected delays as soon as possible.
  11. Keep Learning: Be an infinite learner. Always keep learning about new technologies, architecture designs, tools, etc. It helps you make design decisions that can help reduce tech debt for the future. Removing tech debt completely is impossible but you can make decisions with knowledge and come back to them later when time is right. This helps in better code review and helps the team improve during the feature design phase. This even gives you confidence during new feature discussions, identifying timelines, managing scale problems, and giving a boost in confidence to the team.

This is in no way an exhaustive list and just some things which I am learning during this journey as an engineering manager. There are a lot of aspects of being an engineering manager which include hiring new members, making them productive faster, help them grow, and eventually deliver maximum value for the product you love and work for.

PS: If you liked the article, please support it with claps 👏. Cheers

--

--