Wednesday, August 6, 2008

Productivity - A myth

What is productivity?

If you ask me, I would say that productivity is the most confused term I have ever heard. If you ask three people what do they mean by productivity you would probably get three different replies. Many people try to keep productivity and efficiency in the same boat. This is an attempt clear the air around what Productivity is. Do not mind if this adds a little more the confusion. Share your ideas and I would to learn from you.

Productivity in economics refers to the measures of output from production processes, per unit of input. Productivity is different from Efficiency which takes into account both the value of what is produced and the cost of inputs used.

In software product engineering, Productivity is the number of lines of code generated by a programmer in a given time period.

Do you agree with this? If you agree than it is important to read further. Time to clear some doubts.

If you disagree, you are welcome. Read on till the end and let us know if you still disagree.

Actually this definition is wrong. If this is true, I can use a code generator which would produce 50 times more code which I normally produce on a business day and I would be the most productive developer on that day. That is why most of the matrices related to lines of code are useful for nothing.

Let us think ahead. What about the following definition.

Productivity is the rate at which the end users enjoy new features. Looks interesting! Let us elaborate it using Agile methodology.

In Agile Software Development world, the productivity would be the business value delivered per unit. Here Unit can be iteration/release depending on at what level we are trying to measure productivity. Productivity and team's velocity would go hand in hand. The Velocity as measured in story points would be the productivity of that iteration.

But this is not as easy as data can be easily manipulated. Here we are considering story points as a measure of productivity. But it is easy to manipulate the story points and the team can show that the velocity a.k.a productivity is increasing iteration by iteration. The same case is with business value. Who would ensure that business value associated with easy story is correct. This can neither be measured nor validated.

Let us think further. Productivity is the rate at which the teams increase partner's (end users’) profits. What about this?

This would again be wrong. It is not the programmer's job to make the users profitable. Too many other departments are involved in between and too many actors who do not want to increase profits in any way.

The closest possible answer to what productivity is that no one has managed in 50 years of trying to define productivity in programming in any way that can't be corrupted by some means.

Tuesday, August 5, 2008

Collocated team vs. Distributed team – which is more productive?

Is there really any difference in working in a collocated team vs. working in a distributed team? I have worked in teams which were completely collocated as well as worked in teams which were so distributed that no two members were collocated. In my experience working in a collocated team is easy because of the effective and quick communication which is possible because all team members are sitting together but at the same time it would be wrong to say that there is a major difference in the productivity of collocated and distributed teams.

It is easy to claim that Productivity of collocated teams is more. This claim is based on the easiness and effectiveness of face to face communication. But the distance is not a barrier to those who want to communicate. Instant messengers, wiki or forums provide a quick and easy way to communicate even in a distributed environment. In the end it all comes down to how the team members communicate with each other.

In the following paragraphs, I have tried to share the challenges of collocated and distributed teams and how some of those can be addressed. Read on to go through my views and feel free to rave and rant through your comments.

It is easy to talk about the difficulties of distributed teams. Let us start with that. First and foremost, it is difficult to achieve the alignment and commitment of the whole team to the same goal and purpose. People do not really know each other and it is hard to build personal relationships.

Not everyone can perform well in a distributed team environment. The members should be self motivated, cross-functional and able to work independently. They need to be able to keep working effectively without much of big brother watching.

Some people feel isolated while working alone and therefore not able to remain focused.

To overcome these challenges, distributed teams rely heavily on communication and information technologies, such as internet, conference calls, e-mail, video conferencing, and various networking applications like instant messengers to tap into the intelligence expertise of team members.

It is time to move to challenges of collocated teams. Some people might think that there are no issues in collocated teams but that is not true. Face to face communication can bring issues if we are working in a multi-cultural and multi-lingual team. It is sometimes difficult to realize that we are getting affected by body language or other factors like hair style, clothing, smell, accent or whatever. Most of the communication in a collocated team goes undocumented and teams have to discuss the previously discussed topics again and again. If some key members miss the discussion then revisiting of same topics becomes more prevalent, obviously because of no formal documentation of previous discussions. People are more informal and they speak in their local language (slang, code words etc) in formal meetings too which is another problem. The body language might not support the words spoken during a conversation thereby reducing the effectiveness of what is being communicated.

Another interesting problem which is observed in collocated teams is that people avoid dropping emails and notes but rather waiting for other person to become free for a discussion. They continue to wait and sometimes it happens that the issue waits endlessly.

All the impediments whether working in collocated and distributed mode would impact productivity. Since I've had the opportunity to learn about agile methods I have realized that it’s literally a matter of choosing the communication methods that are suited to our environment.

To summarize, I’m not trying to claim that the potential problems of collocated teams outweigh the benefits. I prefer collocated teams, but I also acknowledge the benefits of distributed teams and distributed teams supported by the tools supporting effective communication can be equally productive. Distance would not be a barrier anymore!