Qualquer pessoa pode alterar qualquer código. Responsabilidade compartilhada por toda a base de código.
Em modelos tradicionais, o código tem proprietários. "Esse é o módulo da Alice." "Fale com o Bob sobre a camada de banco de dados." Isso cria problemas:
Gargalos: Quando a Alice está de férias, o módulo dela não pode ser alterado. Quando o Bob está ocupado, o trabalho de banco de dados se acumula.
Silos: As pessoas não entendem o código que não possuem. A integração se torna dolorosa.
Fator ônibus: Se a Alice sair, o conhecimento sai com ela.
Propriedade coletiva significa que qualquer pessoa da equipe pode alterar qualquer código. Não há territórios pessoais. A equipe é proprietária da base de código em conjunto.
Isso assusta no início. As pessoas não vão quebrar coisas que não entendem? O código não vai ficar inconsistente? O caos não vai se instaurar?
Não, se você tiver as práticas de suporte.
O Trade-off
A propriedade individual protege o código de mudanças desinformadas. A propriedade coletiva permite fluxo e aprendizado compartilhado. XP usa práticas (testes, padrões, pareamento) para obter os benefícios da propriedade coletiva sem o caos.
A propriedade coletiva requer práticas de suporte:
Testes abrangentes: Se você quebrar algo, os testes detectam imediatamente. Isso torna seguro para não especialistas alterarem o código.
Programação em par: Ao alterar código desconhecido, faça par com alguém que o conhece. O conhecimento é transferido e os erros são detectados.
Padrões de codificação: Estilo consistente significa que qualquer pessoa pode ler qualquer código. Sem tradução entre "o estilo da Alice" e "o estilo do Bob".
Integração contínua: As mudanças são integradas imediatamente. Se algo entrar em conflito ou quebrar, você fica sabendo rápido.
Refatoração: Todos melhoram o código enquanto trabalham. A base de código fica melhor, não pior, ao longo do tempo.
Sem essas práticas, a propriedade coletiva é caos. Com elas, é libertadora.
A propriedade individual tem seu lugar. Ela oferece:
Mas os custos são altos:
XP diz que os custos superam os benefícios. Propriedade compartilhada com práticas de suporte supera a propriedade individual.
Algumas equipes usam um híbrido: proprietários primários e secundários. O primário conhece melhor o código; o secundário está aprendendo. Isso oferece especialização enquanto reduz o risco de gargalo.
Um desenvolvedor precisa corrigir um bug em um módulo desconhecido. Ele abre o código, lê os testes, faz par com alguém que conhece a área, faz a correção e executa todos os testes. O conhecimento se espalha.
Um bug crítico é encontrado no módulo da Alice. Alice está de férias. A equipe decide esperar até ela voltar porque ninguém mais 'deveria' mexer no código dela. O bug permanece em produção por uma semana.
Migrar para a propriedade coletiva pode ser difícil:
"Mas eu sou o especialista!" Você ainda é o especialista. Você fará par com outros quando eles alterarem seu código. Sua especialização se espalha—ela não diminui.
"As pessoas vão bagunçar meu código." Os testes protegem contra bagunça. A revisão de código (ou pareamento) detecta problemas. E "seu" código não é realmente seu—é da equipe.
"Não consigo acompanhar todo o código." Você não precisa. Você aprende o que precisa quando precisa. Faça par com especialistas. Leia os testes. Siga os padrões.
"Nosso código é muito complexo para não especialistas." Isso é um code smell, não um argumento de propriedade. Código complexo deve ser simplificado. Até lá, a programação em par protege contra mudanças desinformadas.
A mudança é tanto cultural quanto técnica. Ela requer confiança, transparência e uma mentalidade de crescimento.
Migrando para a propriedade coletiva gradualmente:
Semana 1-2: Faça par entre domínios. Faça especialistas fazerem par com não especialistas no código uns dos outros.
Semana 3-4: Remova rótulos explícitos de propriedade. Pare de dizer "o módulo da Alice". Comece a dizer "o módulo de pagamento".
Semana 5-6: Incentive a polinização cruzada. Ao atribuir histórias, coloque intencionalmente pessoas em código desconhecido (com suporte de pareamento).
Contínuo: Celebre o compartilhamento de conhecimento. Reconheça quando alguém aprende uma nova área ou quando um "proprietário" transfere conhecimento com sucesso.
Meça o fator ônibus: Quantas pessoas podem trabalhar significativamente em cada área da base de código? Busque pelo menos 2, idealmente 3+.
Uma verificação rápida do fator ônibus: para cada área principal do código, quem poderia corrigir um bug de produção lá às 3 da manhã? Se a resposta for uma pessoa, você tem um problema.