Collaboration and Software Development (Part 1 of 2)

I believe quality software development is a collaborative process and I personally consider myself a collaborative person (there could be some cognitive bias here)  I am happy to be working in an organization in which being Collaborative is a recognized as a core value.

The above assertion raises some questions:

What is collaboration?

Collaboration is the act of working together, caring about the common product and each other. Collaboration is often confused with cooperation which is different. I found the distinction cited here very well done:

Dillenbourg et al. (1995) make a distinction between cooperation and collaboration.

They define cooperative work as “... accomplished by the division of labor
among participants, as an activity where each person is responsible for a
portion of the problem solving...” They define collaboration as “…mutual
engagement of participants in a coordinated effort to solve the problem
together. They further note that work often is split also in
collaboration. But the difference is that in cooperation the task is split
(hierarchically) into independent subtasks, and in collaboration the
cognitive processes may be (heterarchically) divided into intertwined
layers.

Another concept that is similar and confusable is contribution. Which is doing your part towards the goal but not necessarily as part of a team or together.

What is the opposite of collaboration?

Sometimes helps to identify and understand the opposite of a concept to appreciate the concept itself. So what is the opposite of collaboration. Some would say Coercion but I think it is Competition.

I have seen it many times in my 10+ years of software development experience where individuals would get in a competitive mode due to internal reason like personality types or external reason like management’s scarcity mentality where people are stack ranked on basis of individual contributions.

How does competition looks like in a Software team?

  • My code is better than yours.  There should be a joint ownership of all of the code in team.
  • I don’t have time for your problem. If this is a team they should be working towards a common goal hence any problem is our problem.
  • Common use of hand waving help where you don’t really get engaged in the problem solving just try to give an idea to try to get back to “your” project/piece.
  • Rubber stamp code reviews
  • No passionate disagreement or challenging of individual assumption. This is passive competition or lack of care.
  • Criticism without owning the problem or offering a solution.

I will address the next two question in a follow up post soon:

What does collaboration look like in a software development team?

If collaborative is a personality type then what are some other types of personalities?

One Response
  1. December 30, 2010