Saturday, 24 January 2015

A Tool To Help You Estimate - Kind of

I think of Estimation is a necessary evil, but an evil all the same.  I read something once to the effect of, and unfortunately I'm paraphrasing as I can't find the original, "An estimate should inform a decision. If it is not informing a decision you should ask yourself why you're estimating in the first place." I can't remember where I read it, or who to attribute it to, but the premise resonates with me.  I've stuck the original quote up at work and bring it up if I'm asked for a frivolous estimate.  Obviously I don't feel the need to look at it, which implies that I'm not asked for frivolous estimates all that often.

Given how I feel about estimates (evil) I was greatly amused by this comic from Commit Strip the other day. It reminded me of a small app that I wrote, when I was first starting out developing software, to randomly generate estimates for me.  The original was crude but it gave me a laugh.  I've made a less crude version and published it to my sandbox here.  I hope someone else can get some enjoyment out of it.

If you're looking for another distraction I greatly recommend Commit Strip.

Saturday, 17 January 2015

Communication - The most important software development skill

I recently listened to an episode of Dot Net Rocks featuring John Sonmez focusing on working on your career.  One key point that John brought up was that the key skill that we as developers can need in today's environment is the ability to communicate effectively.  I've been pushing this same point of view for a while.  As I went though university I was aware the communication was important, but the scale of the importance didn't dawn on me until I worked with someone who was truly lacking in communication skills. For the purpose of this blog I will call him Thomas (not his real name obviously, it's actually part of mine).  

Thomas' integration with the team was a daily struggle, we could not exchange ideas or build a working relationship.  The team worked hard to include him and provide avenues for him to join in discussions that were work related and non work related.  I can only assume he was also working towards this goal, if he was, it was hard for the rest of us to see. Despite all efforts there was a general failure getting him to integrate and become part of the team.

This lack of integration withe the team impacted on more than simply the relationship with the team.  Not being able to communicate restricted his ability to learn from the rest of the team, as well as inhibiting his ability to grasp the concepts required to develop applications using Domain Driven Design principles.  Our developers have drunk deeply of the DDD Kool-aide and it is the backbone of our the way we design software. 

The lack of social and communication skills meant that the only interaction with the rest of the team was in code review. Given the problems with grasping concepts it should be no surprise that code reviews were consistently negative.  This took a big tole not only on Thomas but on the rest of us as a team.  For Thomas he stopped enjoying work, it's hard to enjoy being somewhere where all your interactions with people are them being critical of you, I'm sure we can all relate to this at an anecdotal level and there is actually research to back it up.  The ideal ratio is nearly 6 to 1, positive interactions to negative, bear in mind that these don't all have to be related to your work.

So Thomas' productivity went from low to lower and the rest of the team's productivity also took a hit. There were assorted meetings, official and unofficial, within the team and with external parties (human resources, and multiple levels of management) as to how to fix the problem.  We asked how we could draw him out, what activities could we do to include him, was there ways to improve his work so that hey would get positive interactions in his code reviews.

In the end I have no solution for you as to how to fix the communication problem, his story ends in a very predictable manner, eventually Thomas found work somewhere else and moved on to a new company and hopefully a new beginning and the rest of the team learned a lesson about the importance of communication and relationships in the workplace.

I think about Thomas from time to time and hope that he's doing well, wherever it was that he ended up.  I hope that he did manage to learn something from us, we all learned a lot from him; Communication is one of, if not the, most important skill in succeeding in today's software development workplace.