Tuesday, July 31, 2007

Collective Code Ownership Discourages The Blame Game

One thing that nobody ever wants to see is people scrambling like terrified rabbits as the wolflike specter of blame approaches.

A lot of workplace dysfunction involves blame. We call it the blame game because it isn't really about blame, it's about getting out of doing stuff. If it's not your fault, you don't have to fix it, right?

Collective code ownership can discourage that kind of dysfunction.

The blame game operates on the principle of social proof. If everybody agrees X is to blame, then it's X's fault. Collective code ownership makes tracking mistakes easier, because more people know what the code looks like from the inside. Social proof is still at work, but it's social proof which originates in analysis of the code base, rather than social proof which originates in subjective impressions of clothing style, body language, or tone of voice.

It's important to realize that the blame game's pathetic, whether you win or lose. People who take responsibility and do good work want to be rewarded for that. They don't want to take responsibility, do good work, and then maybe get lucky and win a popularity contest. If keeping good people is a goal in your organization, collective code ownership is one way to achieve that goal.


  1. So, why exactly would collective code ownership stop "the blame game"? You danced around it but never explained why.

    Collective code ownership does help make it everyone's responsibility to fix a problem. However, if I've wasted a day fixing problems I didn't create, I'll know very well who caused those problems and I'm afraid I'll be blaming them, and I'll be further upset that they're not learning from their mistakes by correcting them.

  2. It stops being a game. When people don't know where the problem came from, they can pin it on anyone. When people do know where the problem came from, it's not a blame game, it's just whoever messed up messed up. It doesn't prevent people from messing up, it just makes scapegoating and BSing harder to do.

    Also - it doesn't actually prevent the blame game - it just discourages it.

  3. I think the blame game comes from an irrational fear of repercussions. When things go wrong, who gets in trouble? The reality is that as programmers we don't/shouldn't get in trouble that often. For an extreme example, if I leave some hole in the app that allows someone to delete all of our data, what happens to me? I'm not getting fired, that's for sure. We've got backups, so it's a giant pain but not catastrophic, and my employer loses my valuable understanding of the system.

    The next harshest punishment is so far behind being fired that I think we can discount it. Maybe you have to pair more often with a more experienced developer, maybe there are more code audits...and then you realize that those aren't punishments at all, but are in fact good practices.

    When you understand that personal consequences of mistakes aren't severe or likely, you have no need to play the blame game.

    I don't think that collective code ownership has any inherent benefits, but as you said it discourages the blame game a bit more. Ultimately though it's about creating the right culture, having a team of developers that take pride in their product and their ability to work together. If people don't have the right mindset to begin with, collective code ownership will only make things worse by discouraging people from taking any responsibility at all.

