Saturday, February 28, 2009

RFCs

For a good long while, my fellow developers and I excelled at being our own worst enemy.

Our teams had silo-ed themselves off quite effectively. It reached the point at which almost no inter-team communication took place. Any inter-team email had a better than even chance of inciting a flame war. Inter-team talks consisted mostly of just that—talk—and very little listening.

The worst part about the silos was that several silos worked on the same codebase and would routinely trample each others' code or introduce a plugin/gem that broke the application for everyone else. And then we had flame war.

I do not think that is an exaggeration. It was not that we hated each other. It was more that we lacked respect for each other.

And then I read Stevey's Blog Rant about Rhino on Rails. About half way though the rant he mentioned that, at Google, any significant piece of code requires a design document to be signed off on by two reviewers of your choice.

Now, we are by no means Google. Moreover we have little hope of becoming Google by emulating everything we know about Google. That would be like trying to reproduce the elegance of a 37signals design by repeating steps. It is not a checklist, it is an attitude.

Still, the idea of reviewers for new ideas seemed like it might help to resolve many of our problems.

We structured the Request For Comments process such that:

  • all significant, developer driven changes had to go through the RFC process

  • it had to be publicized so that all could add comments (though only two had final say)

  • it had to be completed between 2 & 5 days (to allow adequate discussion, but to ensure that things did not drag on indefinitely)

  • both reviewers had to be from a team other than your current team

Immediately, we stopped introducing new plugins before first ensuring that everyone was comfortable with them.

The more import result of the process was brought about by the last bullet point—no one could rubber stamp an RFC by having her or his team approve it. All RFCs had to gain approval from outside the team. That meant, if you wanted to get something accomplished, you actually had to talk to others.

And the beauty was, if we actually listened to each other, it turned out that everyone on the other team wasn't a flaming asshole after all.

No comments:

Post a Comment