The Biggest Mistakes I Made as an Engineering Manager
Management has a nasty habit of punishing the instincts that made me a great engineer. When I stepped into my first engineering manager role, I brought years of technical experience and almost no people skills to the table. I assumed the hard part was staying technical. I was wrong.
In this guide I share the mistakes that cost me most, in roughly the order I made them, plus what each one taught me to do instead. This is the retrospective I wish someone had handed me on day one.
A different job, not a senior version of the same one
I became a manager the way most people do: I was a good engineer, and someone assumed that meant I would be a good manager. Nobody trained me and nobody warned me, so for the first couple of years I made mistakes that were both painful and entirely predictable in hindsight.
Looking back, almost every mistake traces back to the same root: I managed the way that made me comfortable, not the way the role required. Coding instead of leading. Answering instead of asking. Avoiding conflict. Saying yes. Performing certainty. All of them were comfort-preserving behaviors, and all of them exported the discomfort onto my team.
I kept coding instead of learning to manage
For my first year I clung to coding tasks, usually the fun ones rather than the strategically important ones. I told myself I was staying close to the codebase and leading by example. What I was actually doing was avoiding the uncomfortable, ambiguous work of managing humans, and cherry-picking the interesting tickets while leaving the boring, necessary tasks to my team.
The moment I finally let go, something unexpected happened: velocity went up. A manager who actually manages is worth more than a manager who writes mediocre code between status meetings. My test now is simple: am I coding because the team genuinely needs it, or because an empty calendar makes me anxious. If the team’s delivery depends on my commits, the mix is wrong.
I gave answers when I should have asked questions
When someone came to me with a problem, I solved it. I was fast, I was usually right, and I felt useful. It was also one of the most damaging things I did. By jumping in with answers, I trained my team to outsource their thinking to me. The same people came back with the same types of problems, because I had trained them to escalate, not to think.
The shift that changed everything was replacing “here is what you should do” with “what have you tried so far, and what do you think we should do” – and then sitting in the silence that followed. It felt agonizing. Coaching is slower than solving, but solving creates dependency and coaching creates autonomy.
I waited until feedback became a crisis
I once had a brilliant engineer who left a trail of bruised colleagues behind them. I noticed it within the first two months and said nothing. Not in month three, or six, or nine. I told myself I was giving it time and letting the team sort itself out. What I was really doing was protecting my own comfort at the expense of everyone else on the team.
By the time I finally addressed it, two good engineers had already quit, and the conversation was far harder, and more unfair, than it would have been months earlier. They were genuinely blindsided, because from their perspective I had been fine with the behavior all along. I had been.
I absorbed pressure instead of making trade-offs visible
When product or leadership asked for more, my reflex was agreement. I wanted to be reliable and helpful, so I committed to a date I had computed with overtime baked in, then returned to the team to figure out how to fit it in. I did that several times in one quarter without ever going back and saying that the new thing replaces the old thing.
The team shipped, barely. Then the medical leaves and the quiet quitting started. Saying yes to everything without capacity math was not flexibility. It was silently passing the cost to my team in hours and health. A silent yes is a deferred invoice with interest.
Most urgent requests become less urgent when they carry a visible cost. My job at that table is to represent reality, not to be liked.
I ran the team like a ticket factory
Velocity was our north star, and I celebrated the weeks we shipped the most stories. I reported green dashboards upward while the product went nowhere. We optimized for tickets closed instead of problems solved, and velocity looked amazing right up until someone handed in their notice.
My VP asked me once what the team had changed for the customer that quarter. I talked about velocity. He said that was not what he asked. Now I push for one question in every planning: what outcome will be different for a user if we do this well. If we cannot answer that, we do not build it. Sometimes the most valuable week of the quarter is the one where the team deletes a subsystem and the roadmap shows nothing shipped.
I shielded the team into a vacuum and ignored my boss
I believed a manager’s job was to absorb chaos, so I translated every messy organizational discussion into a clean task list and hid the rest. Smart, motivated people were asked to execute decisions they did not understand, for reasons they were never given. Humans do not take ownership of things they do not understand, and the people closest to the code often spotted flaws in plans I had already committed to.
At the same time I spent years thinking that managing my boss was politics, and politics was beneath me. I did not negotiate deadlines, so my team absorbed unrealistic ones. I did not communicate our wins, so we lost headcount to louder teams. I did not explain our technical debt, so we never got time to fix it.
I gave my best people the least attention
My best engineers were the most self-sufficient, so they got the least of my time. My weeks went to fixing problems, the struggling project and the struggling person, while my top performers ran on autopilot. Then my two best engineers left within four months of each other, and both exit conversations had the same theme: I stopped growing here. I had confused no complaints with no problems.
High performers are the least likely to ask for help and the most likely to leave without warning. They get my attention first now: stretch assignments, visibility, sponsorship, and honest conversations about where they want to go, even when that path might eventually lead them off my team. I also learned to hire for slope rather than speed. A brilliant engineer who makes everyone around them worse is a net negative, and one toxic hire once cost me two good ones.
Comfort-preserving behaviors, exported onto the team
Being liked is not the same as being good for people. The teams I have seen thrive have managers who are kind but demanding, who care about people deeply enough to make them uncomfortable.
Popular questions about engineering management mistakes
Q1Should an engineering manager still write code?
Enough to keep judgment, not enough to sit on the critical path. Spikes that unblock others and occasional reviews are fine. Owning feature slices or being the merge gate means you have centralized risk in the least available person.
Q2How quickly should I give difficult feedback?
Within days of noticing a pattern, not quarters. Small, specific, and frequent beats large, vague, and late. If you feel a knot in your stomach about a conversation you are avoiding, have it that week.
Q3How do I push back on unrealistic deadlines without seeming difficult?
Bring the trade-off, not just the refusal. Show what the date displaces and offer an alternative scope or sequence. Stakeholders respect a visible cost far more than a silent yes followed by a quiet slip.
Q4What should I measure instead of velocity?
Outcomes for users and health of the system: adoption or reliability deltas, incident trends, and whether the team can sustain the pace. My guide on how I measure team performance covers the full scorecard I use now.
Q5How much context should I share with the team?
Share the messy strategic picture, including competing priorities and constraints, while being explicit about what is confirmed and what is unknown. Protect them from noise, never from signal. People can handle ambiguity. They cannot take ownership of things they do not understand.
Q6How do I keep my strongest engineers growing?
Give them your attention first, not last: stretch assignments, visibility beyond the team, and honest career conversations, even when the path leads off your team. No complaints is not the same as no problems.
Q7Is it ever fine for one person to be both tech lead and manager?
Temporarily, on small teams, and only with explicit hats: be clear about which role you are acting in. Past roughly eight engineers the 1:1 load and the technical complexity both demand full attention, and doing both means doing both badly.
Q8What is the single fastest way to improve as a new manager?
Notice comfort-preserving behaviors early and name them out loud, to yourself and to the team. Admitting uncertainty and mistakes publicly gives everyone else permission to be honest, and it is the fastest culture change I have ever seen work.
You will make these mistakes too. Just make them quickly, notice them early, and be honest about them.
Management is a job where instincts honed by years of engineering are often exactly wrong. The good news is that every one of these mistakes is correctable, usually the moment you notice you are making it.
I still get it wrong regularly. But at least now I get it wrong in more interesting ways, and I catch it sooner. That, more than any particular technique, is the real skill.