Wednesday, October 28, 2009

Constructive criticism

In any leadership position it is very difficult to be the bad guy. But I've asked myself this hundreds of times - why do we hate being the bad guy? AND Why do we even have to be the bad guy? I think it's because companies and organizations like the word 'CRITICISM'. It's an HR term, used in most HR interviews with that HR person who always inevitably asks: How do you react to constructive criticism. Everyone answers - 'very well <insert awkward laughter>', and tries to give a positive example (or makes one up). But in reality that isn't how it goes.

I think the typical response to 'constructive' criticism is:
  • Initially accept it, but be slightly offended.
  • Think about it, and be very offended or put off.
  • Rebel - stop documenting your code, expect reviews to be a disaster, make it hard for the reviewer (or tech lead)
  • Be criticized again
  • job hunt
  • comply while job hunt in progress

This highlights one of the biggest challenges of being in a leadership position in the software industry (and probably in most industries) is how do you give this so called 'criticism'? And how do you give it well? To complicate things, software development is a craft, we are like master carpenters, we subjectively put together approaches and tools to solve problems, there is no right answer. And we can solve software problems in an infinite number of ways! Being a technical lead means you have to ensure that a particular approach is adhered to, as everyone on your team can solve the problem differently. We call this applying best practices or coding styles.

This applying of best practices brings me back to being the bad guy, as it can easily be misconstrued as being negative. A colleague recently talked about how he's going to have to be the bad guy and be a little stronger with a team mate about some coding quality issues. He was worried that it would be taken the wrong way, or the person would react poorly (see steps above). I tried to frame to him how to give this 'strong' feedback as an educational process and not one of criticisms, ideally start by pointing out how you have made the same mistake and it can be solved this way. Which highlights my hatred for the word criticism. Why don't we just give feedback or work on team building (not just outings to restaurants or awkward social events). We as leads need to educate our team, not criticize.

I was recently asked the very question at the start of this blog. And in all honesty, I had a hard time answering it. I don't think I give constructive criticism, I teach, I work with, I mentor and I sympathize. If the developer on my team isn't getting it, I work harder at finding another vantage point to make them understand it (note: I don't hire idiots, I know they have talent). This skill (I'll call it mentoring) I think is lost in our world of HR political correctness and tight deadlines, and not given enough support to flourish. Either it's something someone does well or something they don't. To top it all off, if you don't 'mentor' well or if 'mentoring' is not well supported in your organization (tech leads bogged down with too many tasks, no buffer built for it in estimates etc...), you might find your turn over to be a little bit higher than you like, and your team not performing as well as you want.