Engineering management mistakes we need to stop making
Most engineering-management failures do not begin with bad intent. They begin with pressure: reduce cost, recover a late project, replace an awkward system, or show visible progress. The mistake is choosing a response that hides the constraint instead of addressing it.
Leadership without technical judgment
A technical team does not require its manager to be the strongest programmer. It does require leadership that can recognize engineering risk, ask useful questions, and know when specialist judgment should override a convenient schedule.
Problems appear when authority and understanding are separated without a bridge. Technical decisions become status reports, estimates become commitments before uncertainty is known, and architecture is judged by how confidently it can be presented.
The opposite failure is the “superman” engineer who becomes the only person trusted to decide, review, and repair. Output may look fast until that person is unavailable or becomes the queue through which every change must pass. Senior engineers should increase the number of people who can make sound decisions, not accumulate every decision themselves.
Team composition is a system constraint
A team built almost entirely from junior engineers can learn quickly, but it cannot be expected to supply experience it does not yet have. Mentoring, review, incident leadership, and architecture all consume senior attention.
Contractors create a related trap when selected only by rate. The cheapest hour is not the cheapest outcome if the work needs to be rediscovered, corrected, or operated by somebody else. The useful comparison includes onboarding, supervision, maintainability, and transfer of knowledge.
This is not an argument for titles or expensive hiring by default. It is an argument for matching the experience mix to the risk of the system.
Late work needs a smaller problem
Adding people to a late project can make it later because communication paths and onboarding grow before useful throughput does. This is the dynamic described by Brooks's Law, not a claim that staffing can never help.
People help when the work can be separated, the interfaces are understood, and experienced owners can absorb the coordination cost. When those conditions do not hold, reduce scope, remove dependencies, and identify the unknowns blocking the current team.
The same discipline applies to architecture. Copying a system built for a company one hundred times larger imports its operational costs without importing its traffic, staff, or failure modes. Start from measured constraints: volume, latency, consistency, recovery, and the people available to operate the result.
Complexity is often a delayed decision
Technical debt cannot always win over product work, but ignoring it indefinitely converts delivery time into an increasingly expensive tax. The useful conversation names the consequence: which changes are slowing down, which incidents are recurring, and what minimum investment changes that trajectory.
New technology and new process can both become substitutes for that conversation. A service split will not repair unclear ownership. Another approval meeting will not repair a manager who avoids making a decision. A rewrite will not recover domain knowledge that nobody has documented.
Before adding a tool, service, role, or ceremony, ask which observed failure it removes and how the team will know. If the answer is only that the new shape looks more mature, the change is likely adding another system to manage.
Good management makes constraints discussable, assigns decisions to people able to make them, and reduces the problem when the current plan cannot hold. Those practices are less visible than a reorganization or rewrite. They are usually more effective.