Wednesday, 14 March 2012

How well do you handle truth?

How do you react when someone in your team honestly owns up a mistake? Do you flip out or do you react constructively and help take corrective action?
What I've learnt from my personal experience is - if you become angry in such situations, then gradually most of your people (except for the really upright kind) will stop being completely truthful to you. They will start building elaborate lies to protect themselves and/or their peers/subordinates. Eventually, you will fail to get crucial information that would have helped you steer your project away from trouble.
If instead, you appreciate the honesty and react to it constructively, then you can be sure of getting the right kind of information every time.
The key then, is to be able to handle the truth dispassionately but constructively when it comes to you. This applies not just to managers, but to organizations as well. Organizations that are more open to honest criticism and incentivise (rather than penalize) honest data collection are bound to do well in the long run.

Saturday, 17 September 2011

The Agile Pyramid

(The story is not mine, but this is the best analogy I've known for Agile.)


There were two pyramid contractors in Egypt (guys who built pyramids for a living that is) and they are both hired by a really old pharaoh for building one for him. His requirements were.


1) It should be the biggest possible pyramid that can be built

2)It should be ready when he is dead.


Contractor A: Decides to build the largest pyramid ever. Bigger than the biggest. He estimates that this would take him a year with the laborers that are available to him.


Contractor B: Has a good long look at the pharaoh, and realizes that the pharaoh may not last that long, maybe a month or two. He decides on an interesting approach. He decides to build that largest possible pyramid that he can build in one month. The next month, he’ll build an even bigger one on top of that, the month after, an even bigger one.


The pharaoh died in 3 months.


Thursday, 1 September 2011

The obvious and not so obvious benefits of Test Driven Development

The basic principle of Test Driven Development is simple. You write your test code before you write your implementation code. Counter intuitive when you first hear it, but after you start doing it, you ask yourself why you haven't done it all these years (well, aren't most great ideas like that?)

The benefits are obvious and also not so obvious.

1. Big picture thinking. As you write your test case, you start thinking more about how your application is supposed to behave. You start catching gaps in the specification well ahead of implementation and integration.

2. Test coverage happens automatically, since unit testing is no more an afterthought - test code is the fist thing you write. By the time you are done with your application, you are left with a test suite that covers every line of code that your wrote.

3. Effective multi-tasking. Most important but not so obvious, TDD helps the developer focus on one thing at a time and there-by multitask effectively. Good multi-taskers possess a knack for dividing their time among multiple tasks throughout the day, while giving their undivided attention to each single task when they are at it. The challenge, where most people fail is in dividing tasks into small enough and un-ambiguos units, with un-ambigous results. TDD, I've found helps a great deal in this. Each test case defines an unambiguous unit of work, with an unambiguous result - the test either passes or fails.

4. Context switching. Another not so obvious benefit - even if you are distracted during your work by something urgent and you pick it back up hours or even days later, you know exactly where you left it by simply running your test suite and checking which test case is failing.

For a detailed reading on the subject>> http://jamesshore.com/Agile-Book/test_driven_development.html

Thursday, 25 August 2011

The good mentor

As people move up the management ladder, mentorship becomes a very key part of the job description. Invariably, it gets attached to their goal sheet and targets. While this focus is good to see, I often feel that somewhere a fundamental aspect of good mentoring gets missed. It is that a good mentor has to be selfless. Which to me means the following things.

1. Putting the interest of your junior ahead of yours. If your mentee fails, then you take it as your own failure. You stand up and take the blame.
2. Don't mentor someone just to meet your own "mentoring targets", but because you genuinely want to bring someone up to your level. Your meeting your target or not is simply a by-product.
3. Be patient. Spend time, teach, guide, show the way sternly as you would do to your own son or younger brother. But if you see your efforts are not bearing quick results, don't lose your patience and give up on him or her. Try again. Maybe you are not doing it the right way.


Sunday, 31 January 2010

Work and life

The greatest and the clearest advice on work-life balance that I ever got, came from a senior manager at a client location once.

This is what he said, "If ever there is a choice in front of you between life and work, consider this - imagine, God forbid, you get run over by a truck on your way out of work today, your company can probably find a replacement for you within days. Not your family."

Saturday, 23 January 2010

The fundamentals

You can solve most problems associated with a system if you understand the fundamentals of how it works.

A programmer who knows how each line of his code really works, can crack a bug by simply reading over the code he wrote.
A doctor who knows how a wound is formed, can heal it in weeks.
A bowler who knows how reverse swing really works, can produce it at will. (okay he may need some luck too:))

I'm guessing, life, works pretty much the same way; if you are strong on the fundamentals, there probably is no unsolvable problem.

Sunday, 25 October 2009

The partial solution

There are many problems in this world. Some of them do not really bother me, while some do, in varying degrees. If I am worried enough about something, I have tried to be part of voluntary groups that are specifically trying to solve these problems. For example, TidyCity is one such group which was formed about half a year back to spread awareness against littering, and to spread civic sense in general. We have been involved in activities like voluntarily cleaning up public spaces, conducting awareness sessions, conducting surveys, etc.

One question though that I often get from people, even very close friends and family, is how do you think this so and so group or activity will produce any positive change - I'm sure anyone involving in voluntary activities would have faced these questions from people around them. We for example get questions like, what effect do you think cleaning up the museum campus on one Sunday will have? What use is it talking to a handful of people about the ill effects of burning plastic?

Tough (not impossible) questions to answer, but I always felt there ought to be a very generic answer. What follows is the generic answer:

***

Given a problem, social or otherwise, there are some fundamental questions you have to ask yourself.

1. Does this problem bother you enough so that you want to do something about it?

A)Yes
B)No

If your answer is (B), then you can live with the problem, you can ignore it. If you have answered (A), then it follows that you have to do something about it, there are two questions here -

2. Do I have a complete solution to offer?
A)Yes
B)No

3. Is there a partial solution which I can offer my support to
A)Yes
B)No

(The partial solution here is partial because it doesn't solve the problem completely. A solution that introduces another set of problems doesn't qualify as a partial solution for the purpose of this discussion)

If you look are most social problems, you may end up answering (B) for #2 and (A) for #3.
i.e. There may not always be a perfect solution, but there are almost always a few partial solutions.

Now, coming to the point. If you answered (A) to question #1, and (B) to question #2, and (A) for question #3, i.e. if there is a problem that really bothers you, and all you have are partial solutions, then the best option is to strive to find the perfect solution, while at the same time, committing yourself to the partial solutions that are available.

If you do not agree, then probably you have not been totally honest in answering question #1:).