SDM Insights: Own the Failures - Yours and The Team
In celebration of my fourth anniversary as a Software Development Manager (SDM), I've written a series of reflections on some lessons learned. See the full list here.
About 6 months into my time as SDM, I had to kill a major project, one that had seen three developers invest many months, an entire year for the Senior Dev on the project. The project was the baby / brainchild of my predecessor, and everyone assured me that it was almost complete, just a little more time and effort would get it over the top.
SDMs are not always in the position to green-light or kill significant client-facing projects, but as we made our strategic plans for the coming year for Development, it became obvious that we had higher priorities and more lucrative opportunities to pursue, ones that we would miss if we continued to pursue this overdue, over-budget, over-complicated project. So it was terminated, and I reassigned the three Devs to other projects.
The post-mortem of the project identified several issues that could have been early-warning signs: it was over-architected for a million concurrent users before knowing if we would have any users; its technology choices introduced several elements that were new to the whole team and no one understood well, including me; the senior developer was not ready to be a team lead; the Product team did not have a coherent set of use cases, and so on. Lots of blame to go around.
But ultimately, as the SDM, I needed to own a significant share of the failure. In hindsight I was too slow to get up to speed on the project and especially its architecture and technology. I relied too much on inherited evaluations of the skill level on the team and the senior developer, rather than trusting my own judgement. I could have pushed for clearer Use Cases or a more-articulated Business Case for the project.
The SDM did not cause the failure of this project, or at least not alone. But the SDM needs to take on the responsibility. It gives higher Leadership a place to focus their attention (see the related Protect the Team post). It would not do, for example, to have fired the lead developer. But it should and did spark more honest evaluation, discussions, assignments and professional development of the individuals, the team and the processes in place.
Owning the failure does not mean being the sacrificial lamb, or a heaping of self-flagellation. But it does mean digging into it, understanding the many complex factors that led to the failure - design, architecture, product, timelines, commitments, abilities, team size, composition and more - and working on a plan to address the weaknesses for better success next time.
Part of the SDM role is to juggle and balance all those complex factors. When they don't work out, the SDM needs to shoulder more than just "their share" of the blame - they had responsibilities both up and down the chain.
Taking responsibility for your own mistakes and failures is a mark of character and integrity.
Taking responsibility for those of your team is a step toward addressing those failures and weaknesses, and building your team into one that is stronger, more resilient, more talented and more able to succeed the next time.