I believe the goal of an engineering manager is to build a world-class engineering team. In this article, I break down the responsibilities of an engineering manager and provide pointers of what to focus on.
It roughly boils down into three parts:
- Product - Build a product users love
- Retention / NPS: Tell their friends about it
- Revenue: Willing to pay for it
- People - Build a high performing team
- Collaborative: Values driven culture
- Motivated: Focused on learning and excellence
- Speed: Highly efficient team
- Technology - Build robust systems.
- Simple: Ease to understand
- High Quality: Free from bugs and security issues. Resilient
Focus On What's Important: Help your team understand what's important to the business. Often when it comes to new feature development, "done" is better than "perfect". Other times when working in a production environment with customer SLAs, stability and service availability are at the top of the list. Business priorities can shift and it's the manager's responsibility is to align their team around the right goals and objectives.
Make Decisions in the Presence of Ambiguity: Keep your team moving fast and in the right direction. When making decisions, teams can often be slowed down by their desire for perfect information or lack of understanding as to what's important. During these times, a manager needs step in and make a decision to keep the team moving forward.
It's also important that your team understands how your company makes decisions. For example, Amazon's decision making framework focuses on reversible decisions which can be made quickly with 70% of information versus irreversible decisions which require a slower and more deliberate process. Gitlab's decision making framework focuses on taking the best of a consensus organization to gather data points and the speed of a hierarchy organization to make faster decisions.
Psychological Safety: Team collaboration begins with having a culture of Psychological Safety where people speak up with ideas, questions, concerns or mistakes without fear of punishment or humiliation. Having the belief that team members won't be punished for their ideas, questions, or mistakes encourages more creativity and risk taking instead of fear while also creating a space for honest feedback within a team.
Sharing and Receiving Feedback: Help team members see sharing feedback as a way to improve the team and the process, and receiving feedback as an opportunity for personal growth. Gitlab's handbook provides great examples of how to do this. When sharing feedback, speak from your own experiences, keep it actionable, and focus on behaviours instead of labels. When receiving feedback, first acknowledge that it can be difficult as it requires team members to be open and vulnerable - come in with an open mind, assume positive intent, avoid reacting or being defensive, and ask a lot of questions.
Creating a Project Plan: Project management is the ability to effectively deliver scope within time and resources (for client-facing projects this is time and money). The first step in project management is to work with the product manager or client to fully understand the scope of what's being delivered. The second step is to create a project plan which is a high level plan that tracks what's being done, when it's being done, and who it's being done by. The third step is to execute against the plan at a set cadence and while ensuring time, resources, and scope remain balanced.
De-risking: Every project plan contains risk whether it be technical or business. A diligent project manager will aim to remove these risks as early on as possible. For example, if your team is adopting a new technology, your team will need to test whether the technology is performant and if there are unforeseen complexities in the implementation. My approach is to "spike" these risks as early as possible by allocating a resource early in the process to begin R&D and building a proof of concept before the implementation phase.
Unblocking: Occasionally, every team gets blocked and it's the engineering manager's responsibility to be resourceful and quickly unblock the team so they can continue moving forward. For example, if a team is blocked by dependencies, see if it's possible to parallelize other work, if there are unclear requirements, work with the product manager to clearly define requirements, if there are technical limitations, bring the right people together to find another path forward.
Tools and Methodologies: There are several project management methodologies (Waterfall, Agile, Sprint, Kanban) and tools (Asana, Trello, Excel, Gitlab, Gantt Charts) each with their own benefits and drawbacks. The debate about which methodologies or tools to use are out of scope for this article however here are some useful links to help you decide. My preferred approach is using agile-scrum with bi-weekly sprints. I typically use Excel to write project plans while keeping sprints (milestones) and issues in Gitlab.
Engineering Metrics: It's important to quantifiably track a team's progress. Here are a few metrics I use:
Define the Technical Process: The technical process defines how a team ships software. It includes all the processes that surround the stages of the DevOps lifecycle including plan, create/code, releasing, and monitoring. Here are some of the questions that should be answered:
Provide Technical Leadership: Technical leadership is the ability to lead a team of engineers through the technical process and ensure they move forward with quality work. This requires the engineering manager to have a strong technical background and to lean on their past experience as an individual contributor. Technical leadership includes leading and facilitating technical discussions, recognizing and avoiding technical pitfalls, identifying where a team needs assistance and bringing in the necessary help, and providing context and understanding between technical and non-technical stakeholders. In some companies, an engineering manager's role may also be expanded to include being the technical expert (typically the tech lead or senior engineer's role), writing code, or defining architecture - each company varies and how much an engineering manager leans in depends on the company's needs.
An engineering manager will typically have weekly one-on-ones with all of their direct reports. Here's how I approach my one-on-ones:
Year-to-year focus: These conversations are focused on the long term career development of the team member. Set a regular cadence (either monthly or quarterly) to ensure each each team member is growing towards their longer term goals. The key is to try to find alignment in a team member's goals and your company's needs. First Round Capital's blog post provides a simple framework for which questions to ask. Have your team members articulate:
Managing Underperformance: Talking to team members about underperformance is one of the difficult parts of being an engineering manager. First, it requires management to self-reflect and ask if clear expectations were set and if the team member has been setup for success. When underperformance is identified, take action as soon as possible.
Documenting 1:1s: In order to track progress, it's important to keep track of discussion topics, action items, and goals covered in your one on ones. I personally use tools such as Lattice to track performance management.
Bringing in the right people to join your team is one of the toughest jobs as a manager. The saying "hire slow, fire fast" resonates as you want to ensure each candidate goes through a thorough, deliberate, and unbiased interview process.
Capacity Planning: The recruiting process typically begins with laying out your team's objectives over the upcoming quarters and creating a capacity plan to meet those objectives. A capacity plan lays out the required skillsets, available resources, and any gaps which need to be filled with new hires.
Sourcing: Software engineers are in high demand and sourcing candidates requires a multi-channel approach to successfully build a team. Here are some of the strategies I've personally used:
Interviewing: See Conducting technical interviews
Onboarding: It's always exciting for a new employee to join a team. Here are a few ideas of how to provide them with a great onboarding experience: