I recently led a team of about a dozen developers. We used PairProgramming, but still found that various parts of the system were written with different approaches and assumptions. As you might imagine, a dozen bright and motivated developers can crank out a lot of good (if sometimes inconsistent) code in a short period of time. The developers told me that we could do better.
We decided to meet once a week for what I dubbed a "Consistency Parade". Everyone was encouraged to post topics to discuss in advance on our internal wiki. We'd talk about patterns we'd like, and patterns we'd like to avoid. We used tools such as NetMeeting and Lotus Sametime to browse the code together. It wasn't unusual to make changes, test them, and commit them during a Parade.
Someone would record and publish notes on the issues and decisions, which became a useful source for ex post facto best practices.
Areas that triggered useful conversations included:
I should emphasize that our Parades were very code-centric; we rarely had to talk about high level designs. They weren't exhaustive code reviews; they were more like guided spotlights on key areas. And they weren't meant to be denigrating; harvesting and promoting good ideas, rather than criticizing dumb ones, was the primary goal.
Our team included several "remote" developers. We started out with a primarily face-to-face meeting, with a projector and lots of forward-facing chairs. We quickly moved to a NetMeeting-style "share a hosted desktop" approach. This seemed to foster more participation, and put everyone (including the remote developers) on an even footing. When someone brought up a topic, it was easy for the moderator to say "Can you show us an example?" The participant would then take control of the desktop, and browse around in the IDE, until finding and showing off a representative sample.
We're likely to conduct a ConsistencyParade on one of our new projects, although we'll have a smaller team.
-- JamesCollins