The Software Engineering Manager Role
A Software Engineering Manager (SEM) is a multifaceted role, blending the technical expertise of a seasoned software engineer with the leadership and strategic skills of a manager.
At their core, SEMs are responsible for leading teams of software engineers (SWE). They typically:
- Manages the design, development, and maintenance of software applications or services;
- Directs or supports the work of software engineers to promote the best practices and foster improvement;
- Has a good comprehension of software development, including topics such as programming, testing, building, deployment & delivery, software architecture & design, and many more.
There are a variety of software engineering concepts, practices, tools, etc., essential to understand, such as but not limited to:
- Software Development Lifecycle (SDLC).
- DevOps, Cloud Computing, Microservices, etc.
The Engineering Manager by Camille Fournier
When reading The Manager’s Path, written by Camille Fournier (Managing Director of Engineering at JP Morgan Chase & Co), I found the following description for the Engineering Leader role, which is the leader of a team.
The description is helpful for SEMs who want to understand their place and want to develop skills, as it covers all the basics of the role.
The engineering lead will spend less time writing code, but they still engage in small technical deliverables, such as bug fixes and small features, without blocking or slowing down the progress of their team. More than writing code, they hold responsibility for identifying bottlenecks in the process and roadblocks to success for their team and clearing these roadblocks.
The person who fills this role is expected to have a large impact on the success of [the organization] as a whole. In particular, leaders in this role are capable of identifying the most high-value projects and keeping their team focused on these projects. As part of keeping the team focused, the engineering lead will partner closely with the product lead to manage project scope and ensure the technical deliverables are met. In addition to focusing the team, they are capable of identifying headcount needs for the team and planning and recruiting to fill these needs.
The engineering lead is an independent manager. They are comfortable managing team members with different skill sets from their own. They communicate expectations clearly to all team members, and solicit and deliver individual feedback frequently (not just in the scope of review periods). In addition to strong management skills, the engineering lead acts as a leader for the technical roadmap for their product group (pillar). They clearly communicate the timeline, scope, and risks to their pillar partners, and lead the delivery of major initiatives on clear timelines. Additionally, they identify areas of strategic technical debt, do the cost/benefit analysis for resolving this debt, and communicate suggested timelines for prioritizing this to the management team.
The Engineering Manager by Dave Anderson
Dave Anderson (former Amazon GM and Tech Director and author of Scarlet Ink) shares a great discussion on the importance of technical skills for effective engineering management. We can summarize the key takeaways from the article as follows:
Balancing Involvement and Delegation
- Long-term vs. Short-term Impact: SEMs must involve themselves in projects with long-term impacts, such as major service designs, while delegating short-term tasks like temporary scripts.
- Big Risk vs. Small Risk: High-risk tasks that could severely impact customers necessitate SEMs involvement, whereas low-risk tasks can be delegated.
- One-way vs. Two-way Doors: SEMs should engage in decisions that are difficult to reverse (one-way doors), such as designing external API schemas, while delegating reversible decisions (two-way doors).
- High vs. Low Political Impact: Projects with significant visibility or political implications require SEMs involvement, whereas low-priority tasks can be delegated.
Critical Technical Skills
- Operations: SEMs need a deep understanding of system operations to lead through high-severity events, discuss operational issues, and explain crises to leadership.
- Architecture and Design: A thorough grasp of system architecture and design principles is essential for discussing system dependencies, scalability, and performance with the team.
- Coding: While not required to code regularly, SEMs must understand the coding process, including development workflows, code reviews, and deployment procedures, to ensure quality and efficiency.
Skill Development
- Building a Mental Model: Managers should engage with engineers to develop a comprehensive understanding of system operations and interdependencies.
- Understanding Customers: Managers need to grasp how their technical systems impact customers and monitor these interactions closely.
- Learning Engineering Processes: Shadowing engineers and asking questions helps managers understand coding and deployment processes.
Acquiring Technical Vocabulary: Continuous learning and seeking explanations for technical terms are crucial for managers to bridge knowledge gaps.
Learning
Books
- The Manager’s Path, by Camille Fournier (Managing Director of Engineering at JP Morgan Chase & Co). An excellent overview of the journey from an individual contributor (IC) to senior leadership for software engineering managers.
Blog Posts and Articles
- Engineering Manager Archetypes, by Pat Kua.