We are in a project with a dozen members, working on some fairly cutting edge stuff, and want to work out a good approach to code ownership. On the one hand you always want at least two people familiar with any area ("common code ownership"), but there are countervailing advantages to having a single person in charge of an area to give it a consistent vision and to minimize the chance of one person inserting code that violates the assumptions of another person ("individual code ownership").
How have you seen this tension successfully resolved in the past? Is pure pair programming the only way to combine the advantages of common code ownership with individual code ownership? Does the "chief programmer team" concept work out?
Note: this question and this one, are related, but focused on ironing out interpersonal difficulties (eg, a territorial project guru) on the road to common code ownership. Let's assume for this question that the team gets along well together and wants to find the most effective approach.
Edit: Also see this question, again focused on difficult project members.
Edit: To clarify, I agree that the team (company) owns the code here, and am assuming the team gets along well without interpersonal difficulties. We've set up a Wiki, a Hudson continuous build server, and unit testing to make it easier to shift people around. What I'm after in this question is the right balance between generalization (all people work on all the code) and specialization (one person is responsible for one area, and there is no overlap). It's definitely bad to have pure specialization, but in complex projects with very different sub-areas some specialization seems inevitable.