I thoroughly enjoyed reading Ben Horowitz’s The Hard Thing About Hard Things. The chapter on Good Product Manager / Bad Product Manager especially caught my attention. Motivated by the insights from that chapter, written in collaboration with Adelina Persa, we decided to compile our own observations, tailoring them to the modern practices that, in our opinions, differentiate Good Engineering Managers from Bad Engineering Managers.
Good Engineering Managers understand that technical debt is not just an inconvenience but a strategic liability.
They don’t merely manage engineers; they manage the codebase, technical architecture, and even the technical culture. They are responsible for ensuring that the team can adapt to new challenges efficiently and aren’t slowed down by legacy decisions.
They own the technical health of the project, not just its timely delivery. Effective engineering management involves finding a balance between meeting immediate needs and ensuring the long term health and viability of the codebase. It requires strategic decision making and commitment to addressing technical debt as an integral part of the development process.
Bad Engineering Managers ignore technical debt and prioritize short-term speed over long-term health.
They blame the team for slowdowns and bugs, without taking responsibility for the systemic issues that cause them. It’s understandable that managers are under pressure to deliver results quickly, especially in fast-paced environments. Though, short term speed often means prioritizing rapid feature development to meet immediate business needs or deadlines.
This usually involves cutting corners, skipping tests, or disregarding best practices to ship code faster. Engineering managers who ignore technical debt and prioritize short-term speed over long-term health may achieve short-term gains, but they risk sacrificing the overall quality, sustainability, and efficiency of their software projects.
Good Engineering Managers serve as the interface between their engineering team and the rest of the company.
They can translate business goals into engineering tasks and also articulate engineering challenges in a way that the business side can understand. They protect their teams from external distractions, ensuring that engineers can focus on what they do best. The interface role involves several key responsibilities and skills:
Are good communicators: A good engineering manager can translate complex technical concepts and issues into understandable language for non-technical stakeholders, such as executives, product managers, and customers. They bridge the gap by explaining how technical decisions affect the business.
Align with Business Objectives: Effective engineering managers ensure that the engineering team’s work aligns with the company’s strategic goals. They work closely with product managers and executives to prioritize projects and features that drive business success.
Advocate for Technical Excellence: Good engineering managers advocate for technical excellence and the importance of maintaining a healthy codebase. They ensure that necessary time and resources are allocated to address technical debt and improve the quality of the code.
Bad Engineering Managers act as mere message relays between upper management and their engineering teams.
Part of a manager’s role is to advocate for their team’s needs and concerns to upper management, so when managers only relay messages without actively advocating for their team, the team’s interests and priorities may be overlooked.This is turn leads to failing to shield their team from external pressures, leading to burnout and reduced productivity.
The engineering manager that acts solely as message relays can create a range of problems, including lack of leadership, communication breakdowns, inefficiency, low team morale and a failure to advocate for the team.
Good Engineering Managers are adept at resource allocation.
Resource allocation involves making decisions about how to distribute various resources, including people, time, budget, and tools, to maximize the efficiency and productivity of the engineering team. Effective resource allocation is essential for achieving project success, meeting business objectives, and maintaining a healthy and high-performing engineering team.
They assess the skills, strengths and weaknesses of their team members and assign tasks and projects accordingly. They consider factors such as expertise, experience and individual development goals when making these assignments. They also ensure a balanced workload, avoiding overloading or underutilizing team members. This not only maximizes productivity but also helps in preventing burnout and maintaining a positive work environment.
They also know when to hire, how to onboard new members effectively, and when to let someone go for the betterment of the team and the individual.
Bad Engineering Managers treat every engineer as interchangeable parts.
Managers who treat every engineer as interchangeable parts overlook the individual strengths and contributions of their team members. By not tailoring tasks to the skills and career goals of the engineers, this approach can lead to disengagement and turnover, demotivation, inefficient resource allocation, poor team dynamics, a lack of career development, and decreased quality and innovation.
Good Engineering Managers measure their success in terms of their team’s output and individual growth.
Good engineering managers measure their success not only in terms of the team’s output, including project delivery and quality, but also in terms of individual growth and well-being. They balance the needs of the team with those of individual team members, fostering a culture of continuous learning, innovation, and high performance. This approach creates a motivated, skilled, and cohesive engineering team that is not only productive but also focused on long-term success. They are committed to the professional development of their engineers, and they understand that people, not just projects, are part of their legacy.
Bad Engineering Managers measure their success by their own visibility within the company.
Bad engineering managers neglect the well-being and success of their team. Their behavior leads to a toxic work environment, short-term focus, lack of empowerment and micromanagement. They show little interest in mentoring or developing their team members, with a negative impact on everyone’s innovation and productivity.
They take credit for their team’s achievements and avoid accountability for their failures. Feeding many conversations that end up looking like drama filled soap operas.
Good Engineering Managers have a pragmatic approach to methodologies.
A pragmatic approach means that managers are flexible and use methodologies and practices in a practical and context-specific manner. Good engineering managers understand that Agile, Scrum, or Kanban are tools to aid the development process, not dogmas to be followed blindly.
They adapt their process to fit the needs of their team and the project at hand, by balancing structure with flexibility, and prioritize outcomes and business goals. They are willing to make changes if it leads to better results aligned with the organization’s strategic objectives and project’s success criterias. They prioritize value over methodology adherence.
They understand that code provides non value on itself, but only on the value that it brings to the business, and prioritize the team goals in alignment with business measurements and value indicators.
Bad Engineering Managers are slaves to methodology.
They force their teams into a one-size-fits-all approach, ignoring the unique challenges and dynamics of their projects. By becoming slaves to methodology, managers risk creating an environment that is overly focused on process compliance, resistant to change and overall inefficient. This approach to methodology can stifle innovation, as teams may be discouraged from experimenting with new ideas or approaches, fearing that they will not conform to the prescribed methodology.
Good Engineering Managers keep up-to-date with technological trends and continuously assess the relevance and utility of new tech.
They are not afraid to advocate for necessary changes in tech stack or architecture to keep the project efficient and modern. They consider the long-term impact of tech choices and assess whether new advancements could improve efficiency, scalability, or security. Recognizing that technology is a dynamic field, they are unafraid to advocate for changes in the tech stack or architecture, even if it means challenging the status quo.
Bad Engineering Managers stick to what they know, ignoring advancements that could benefit their team and project.
They resist change, even when their tech stack becomes outdated and begins to hinder development. This reluctance to adapt manifests as a resistance to change, becoming particularly problematic when their tech stack grows outdated. As a result, they not only miss out on opportunities for improvement but also create roadblocks that hinder development, slow down project timelines, and even put the team at a competitive disadvantage.
Good Engineering Managers foster a culture of constructive criticism and openness.
Good Engineering Managers cultivate an environment where constructive criticism is valued and openness is the norm. They actively encourage team members to speak up, whether it’s about code quality, architectural decisions, or the dynamics within the team itself. They have a bullet-point in every 1:1 about feedback to themselves, and motivate teammates to provide them with feedback by probing for their thoughts on every conversation.
This open forum for dialogue not only helps in promptly identifying and resolving issues but also contributes to a culture of continuous improvement and trust. By valuing feedback on both technical and interpersonal matters, they create a more cohesive, agile, and effective team.
Bad Engineering Managers create a culture of fear and silence.
Bad Engineering Managers perpetuate a culture rooted in fear and silence. When faced with even the mildest constructive feedback, they are quick to dismiss, deflect, or rationalize away the issue. Rather than taking responsibility when things go awry, they resort to assigning blame to others, thereby demoralizing those around them.
Their negative responses to criticism not only closes open dialogue but also creates an environment where team members are afraid to speak up. This lack of open communication extends beyond interpersonal interactions and seeps into the technical work. Engineers may hesitate to flag issues or propose innovative solutions, leading to suboptimal technical decisions. In such a stifling atmosphere, problems go unaddressed, opportunities for improvement are missed, and the team’s morale and productivity inevitably suffer.
They frequently interrupt others in conversation, shutting down the free flow of ideas before they can even take root. This tendency to talk over people extends to a general dismissal of opinions that don’t align with their own.