I have been thinking about the level of control one should have on team and project without being a control freak. It is said that with a good manager, people will not feel like they are being managed. One idea that stuck to me from the book Peopleware is, you put a person on a job and if you trust him with it, don’t try to second guess and rob him of the chances to make decisions.

There are couple of types of managers – those who came up the ranks and know how to do the job and those who don’t know the nitty-gritty of their team’s day to day job. If you think you know more about how to do something than your team member, how do you control the urge of doing the job yourself instead of teaching them how to do it without actually doing it? If someone else is taking 10 days to do something that would take 1 day for you, can you grit your teeth and let him or her go through with it and learn?

On the other hand, one downside of having a manager who don’t know or don’t have capability to comprehend the details of job is explaining things to him in layman’s terms all the time and answering umpteen questions on progress and status and such.

It is a balancing act to reduce dependency, delegate authority and at the same time make sure the task is delivered.

Following are some things I would like to practice:-
1. Transfer knowledge upfront as much as possible for people to be able to do the job. Equip people with what they need or rather make sure that they are setup for succeeding.
2. Let them take decisions, you may hint or suggest course of action, but avoid making decisions for them.
3. Check progress, but not every hour of the day. Give meaningful feedback, not once in 6 months.


I attended a java user group meeting yesterday. Topic was State of Aspect oriented programming.

20% of audience had used aspect oriented programming in their projects. Compared to the demos given using Ant, JaaS, AspectJ, Sping, Log4j etc, I felt like a barbarian who still use System.out.println(“I am here..”) for debugging and Notepad for coding.

I am convinced that these tools or methodologies increase programmer productivity, code maintainability and durable design. But how many actual customers who pay for IT projects understand or even care about using these? Then again I guess it is not a choice to be made by customers, but by the programmers.

That leads me to next question:- there are so many frameworks, tools and patterns out there. I got involved in one open source project in Sourceforge to get an insight about open source, but had to drop out because of the pace at which people with various strengths (specialists) collaborated. I think the question is beyond which language or which database to use, but whether to use one or other framework should be used for connection pooling, authentication, logging and almost all aspects of programming. It is hard to know what is out there in the first place, so unless you are a specialist how will you choose what to use instead of resorting to old barbarian ways?

On a non-technical note – it is fun to attend such meetings. First objective is to shake out of routine to see what is happening out there in the world. One other interesting thing is to see the community – it was a diverse one in all shapes and sizes. There was one that looked like a cop or a wrestler, another one probably a biker, some students, some grandfathers, many with port bellies (like beer bellies, there is something called programmer bellies), many Chinese and some Indians (I seem to always take a ratio of Chinese/Japanese/Koreans Vs Indians in such gatherings – it is like a performance metric).

നോൺ ഫിക്ഷൻ

"Chinua Achebe - Man of the People. ഫിക്ഷനോ നോൺ ഫിക്ഷനോ?" "ഫിക്ഷൻ" "നോൺ ഫിക്ഷൻ നിർത്തിയോ?" "ഇല്ല...