I recently was working on a project with a small group really skilled and talented guys. Everyone in the group (excluding myself for the sake of modesty) could safely be called brilliant.
We had a pretty important but straightforward task. Something that any of us should have been able to complete on our own.Piece of cake, right? This should be a total success story.
We failed miserably. Of course.
Well, maybe we didn’t fail miserably, but we did get into a stalemate, the collaboration on the project was essentially killed, and there’s now one guy working on it by himself.
At the time, I was thinking of it as mostly an interpersonal issue. I like to say (and I believe) that “all software is interpersonal”.
I was thinking about it a little more yesterday, and I realized that we failed because we didn’t have any common understanding of shared values. One person in the group valued management mandate, and a fixed timeline. Another person in the group valued agile/lean/empirical processes and didn’t want to design the entire thing up front. I valued egalitarianism and consensus-building, so I tried really really hard to negotiate and mediate between these two different values, trying to reach compromises, giving people a chance to save face, etc.
Which of those values should have been important to the project? I don’t know. My instincts lead toward the values that I try to bring to every project (the pre-packaged set of “agile” values, and my general anti-establishment bent). I can’t really say that if everyone thought like I did, the end result would have been as good as possible, although we wouldn’t have imploded in at least that way.
All of the things that I consider “qualities” or “best practices” such as strong cohesion, loose coupling, the ability to test things in isolation, those are really values. In collaborative projects, I’m not going to get anywhere unless I know that the other people on the project value them too.
I think that if more people were self-aware of the values they bring, and discussed them with a group to try to reach a set of “this is what we, as a team care about”, projects could go more smoothly.
It’s a lot better than one alternative, where you have one evangelist (often me) saying “Well Kent Beck says you’re supposed to…”