What would you consider quality software engineering management?
I've been in the software engineering industry for 20 years now, big chunk of which I was managing medium sized teams.
Recently I started understanding that I've rarely witnessed what I could consider quality software engineering management.
What properties such management would have? 1) regular one-on-ones, 2) zero tolerance policy for gossip, corporate politics and toxic behavior, 3) test driven development, continuous build etc. 4) giving positive feedback publicly, negative feedback privately, 5) promoting people for their real results
I'm eager to hear what would you consider quality software engineering management? What properties or checkpoints should it have?
3 comments
[ 2.6 ms ] story [ 20.4 ms ] threadI would start with creating an environment that allows everyone to do good work, cooperate and collaborate. A team people want to join and don't want to leave. A place where people get challenged and can constantly learn and improve their skills. And you have to look at the product of the team. Does their work align with the goals of the overall organization? Do the developers add value? Can you measure that value?
Defining things like "politics" and "toxic behavior" gets into subjective judgments. Certainly corporate politics and bad behavior can affect morale and productivity, but how do you enforce "zero tolerance" when it comes to how people behave, or what goes on in the organization beyond your team or department?
Do you have some way to measure "real results?" According to what metrics? Can you come up with fair and objective standards and measurements you can apply to everyone?
I would look beyond mere processes such as test-driven development and continuous build, because one can easily imagine a productive and "high quality" development team that doesn't have those processes (read the origin story of Unix, for example). Good communication, constant and appropriate feedback, and enabling career growth all sound good, but any basic management book will tout those things, more observed in the breach in my experience.
One-on-ones are a way to give an outlet for people to talk openly about what concerns them most and be there for them (and yes, each other too): basically a way to ensure you are in touch regularly.
Almost any "zero tolerance policy" is simply an act of agression: you should strive to not make gossip or politics influence your decision making, thus reducing it to side-chatter of no significance (and yeah, it shouldn't hurt the team dynamics if two colleagues joke on account of someone's mix of wardrobe colors).
TDD and continuous builds are not for a manager of engineers to decide on: they are tools to achieve iterative, piecemal delivery of value, and that should be the goal. Technical teams are fully capable of coming up with ways to satisfy this.
Even your rule 4 is too rigid: you want to both praise and critisize publicly while ensuring nobody is getting singled out and shamed (if a critique will make it obvious who did something bad, private may be the way to go). You should publicly bring up failures to ensure we learn from each others' mistakes too.
Sometimes you should also promote people on their potential, not on their results: some people might be great at architecting stuff or so you might believe, but there is simply no opportunity to put them into a role to show themselves off. You can either wait until they just move on from your company or team, or throw them into doing stuff they haven't done officially before (basically "promote" them, though the lines are very blurry in this example).
The gist of good management is:
1. Open, transparent and direct communication with continuous feedback and discussion of personal and team goals, but also with some checkpoints to look back on a longer period
2. Nurturing an environment where it is welcomed and encouraged to challenge each other, and especially your managers!
3. Enabling and encouraging engineers to take ownership and responsibility for projects, by incorporating their feedback and ideas into your process and roadmap.
4. Leaving as much of technical decision making to engineers, even if you have a lot of experience from your "past life" as an engineer: do give them feedback and opinions, but let them make the call (unless they ask you to choose between two similarly viable options)
5. Keep the process minimal, and
6. Try to teach them how to recognize the next minimal step that brings value for any project to enable proper incremental, iterative development and delivery.