Sunday, March 11, 2012

Positive Software Development

A few days ago I watched a video by Shawn Achor. Its about positivity and how it can affect our productivity. So that got me thinking: How could I apply this in my work as a software engineer? Wait a minute! I am already!

It's really nice to get scientific support for things you've been doing intuitively until now, isn't it? What I've been doing intuitively while leading software development teams is to try and make the team relaxed and positive. It's not always easy and it doesn't always succeed. But when it does succeed, the result is loads of fun, productivity and friendship.

So how does it work actually? It might help to think of software development as a learning process. Here's a quote from Wikipedia article on Lean software development:
Software development is a continuous learning process with the additional challenge of development teams and end product sizes. The best approach for improving a software development environment is to amplify learning.
And how do we amplify learning? In his speech, Shawn Achor lists the following things:

  • 3 gratitudes (3 positive perceptions every day)
  • Journaling (going through one positive event of the past day)
  • Exercise 
  • Meditation
  • Random acts of kindness
Ok so many of those are something you as a team leader can't do much about. The last one is really important tool for a team leader though. Giving random, peer-to-peer positive feedback makes people generally feel good about themselves. Your feedback does have to be down to earth and honest though. People can tell - at least highly intelligent people you work with - when you're like a kindergarten teacher. For this to work you need to understand what your team is doing. This is also why praise from a manager usually just makes the team uneasy.

What else can you do? Apparently there's a consensus in the academia that fear of failure is a big obstacle when it comes to learning. See Andrew Martin's work for example. I have an in-built high fear of failure and I'm sensitive to what other people think of me so naturally I always try to do everything I can to alleviate this. 

Software developers are for some reason often unforgiving when it comes to making mistakes. We're doing possibly one of the most complex things us humans are able to do with a staggering amount of variables and forces that can affect the outcome. Yet I often meet attitudes of "I don't make mistakes, ever, and I don't expect anyone else to do them either". What's terrible about this is that its impossible not to make mistakes when developing complex software systems. And in an environment that sneers on people who make mistakes, the mistakes are of course hidden resulting in crippling technical debt and loss of productivity.

In my opinion its almost the duty of a good team lead to set an example of failing fast and failing positively. With this I mean that mistakes and failures should be treated positively as chances to learn together and even more importantly, get rid of the fear of failure. When I work as a team lead, I always bring out my mistakes in the open, make sure everyone understands that I'm not perfect and that I don't expect anyone else to be either. That its ok to make mistakes and show them to others so they can learn from them as well.  My habit is to make jokes of my mistakes because, let's face it, if you're not able to laugh off some of the absurdity of our work, you're going to end up insane.

The funny thing is, I've sometimes been accused of being "unprofessional" when I'm trying to create a relaxed working atmosphere with laughter and permission to make mistakes (as long as you fix them, of course). You can safely ignore this. It's the 21st century and its ok to have fun at work, especially as its now scientifically proven that its more productive that way!