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.

Monday, August 17, 2009

What's in a Name...

Some people have asked about the name of this blog, so I thought I might indulge them.

First, let's have a quick look at the definition of exoteric:

Main Entry ex·o·ter·ic
Pronunciation: \ˌek-sə-ˈter-ik\
Function: adjective
Etymology: Latin & Greek; Latin exotericus, from Greek exōterikos, literally, external, from exōterō more outside, comparative of exō outside
Date: 1660
1 a : suitable to be imparted to the public — compare esoteric b :
2 : relating to the outside : external
ex·o·ter·i·cal·ly \-i-k(ə-)lē\ adverb belonging to the outer or less initiate circle

From http://www.merriam-webster.com/dictionary/exoteric

Ultimately the ideas and themes will be about all kinds of things that most people could likely figure out themselves, but I will hopefully add some value and clarity from my point of view.

The URL of the blog also has some meaning: randomfishies.

Anyone who's taken a statistics course will cringe at a poisson distribution that defines the extent of a series' randomness. Poisson is also french for fish. Random fish ;) There is of course a less politically correct interpretation dealing with the source of propagation of mammals, which is itself a random and chaotic event. All of this reminds me of the chaotic non-linear multi-order systems of nature that will be the major themes of my discussions and thoughts.

Friday, August 14, 2009

Green Software Development?

Although the term ‘green’ really means a colour, I think everyone uses it because it reminds us of grass, trees and generally anything with chlorophyll in it – plant matter.

So why are plants so important? I think it’s because they represent our world, our planet, the beauty of Mother Nature and the chaotic symphony of balance that she performs daily with which we human beings systematically interfere.

What does this have to do with software development? Well, let’s just say that my conscience has been telling me that there has to be a meaningful way for what I do day-to-day to make small impacts on everyone.

First, I think I need to start to define in my own terms what green software development is. Well, there is the concept of green computing (http://en.wikipedia.org/wiki/Green_computing), which can be integrated into my everyday life by ensuring every line of code is optimized and FLOPS are not wasted. But how do you try and slowly change the world and make a difference if all you do is write software? Software is well, soft: it is intangible, it exists as a series of binary code that makes a computer perform operations. In some of these worlds it will interact with some IO and drive a device, actual hardware, but that is rare for a web developer like me. I’m slowly starting to focus in on the idea that unless you are actually building control systems/software for something that will have an immediate impact as a software developer, it’s hard to change the world.

How do you live with the thought that it’s nearly impossible with software to change the world, especially if you really want to make a difference; and I am not talking about just recycling your pop cans?

Things brings me to my point - I came across a web site http://www.mokugift.com – that takes the ideologies of web 2.0 and slams them together with a very interesting idea: Give someone an e-card that makes a difference by spending a buck and choosing to planting a tree in Asia, Africa or South America. Brilliant!!! This idea almost seemed like salvation to this old web developer. How can we integrate community, web technologies and a few simple business ideas to build something truly unique that CAN make a difference? In the case of mokugift.com it was simple – take an old idea, add some value, find some venues for getting your name out there and plant some trees!

What I’m getting at here is that maybe my moral salvation is not IN the software, maybe it’s how I use the software to do something different. And that - I can live with.

Thursday, August 13, 2009

What is green computing? Lately I've felt the pull of my moral compass telling me I need to do something significant, something that helps change this world that I live in, that my family lives in, heck everyone lives in. I'm not living any kind of delusion that I will invent something so ground breaking that I'll fix our climate issues (I'm not exactly a scientist). But it has to be something more than recycling my pop cans or buying biodegradable diapers for my 1 year old.

I guess the hard part about this process is trying to understand what is 'green' computing? What is 'green' software? Can software be 'green'? I feel I'm at the beginning of an interesting journey and I wanted to share it with everyone. So welcome to my blog.