May 10th, 2007Propriedade Coletiva do Conhecimento
Depois de recentes discussões sobre o assunto, achei interessante compartilhar algumas idéias sobre uma das práticas de XP: a Propriedade Coletiva de Código.
Uma das principais caracterÃsticas nas definições da prática é o que podemos chamar de socialização do código. Não é que ninguém é dono do código, mas sim TODOS são responsáveis por TODO o código. Isso implica que a equipe não corre o risco de depender do “dono da classe” para fazer uma alteração ou melhorar uma parte do sistema. Se o “dono” ficar doente ou tirar férias, a equipe continua produzindo. Porém, como em toda metodologia ágil, essa prática pode precisar ser adaptada ao seu contexto.
O Giuliano me fez perceber hoje que minha definição da prática ia um pouco além do que descrevi acima. Acredito que a equipe tem muito mais a ganhar com o compartilhamento do conhecimento sobre o código. Poder alterar qualquer classe é importante, mas é muito melhor saber o que está acontecendo no sistema como um todo. É essa visão global que vai aguçar o “olfato” da equipe para identificar “maus-cheiros”.
Mas como esse compartilhamento de conhecimento acontece na prática? XP sugere outras práticas que podem ajudar, como Programação Pareada e Integração ContÃnua. Minha experiência me mostrou que analisar os logs e diffs entre as revisões do repositório também ajuda. Não vamos excluir também a comunicação face-a-face. No entanto, analisar logs e diffs nem sempre é uma tarefa trivial. Especialmente quando a equipe integra código novo várias vezes ao dia.
Outro dia estava discutindo exatamente sobre o mesmo assunto com o Julian e ele estava procurando por um meio mais eficaz de garantir que certas informações essenciais seriam lidas pelos outros programadores. Coisas do tipo: “Criei uma nova classe para encapsular o comportamento X. Usem essa classe a partir de agora”, “Novo padrão de código: cabeçalho alterado para incluir dados-extra. Alterar em todas as classes criadas/atualizadas a partir de agora” ou “Filtro de autenticação criado. Considerar esse aspecto ao criar novas funcionalidades”. Seria uma espécie de “Release Notes” das últimas alterações no repositório. Acredito que uma ferramenta poderia auxiliar os desenvolvedores na comunicação desse tipo de conhecimento. Eu gostaria de ver algo assim ao sincronizar minha cópia local do projeto.
E vocês, como lidam com esse compartilhamento de conhecimento técnico no seu projeto? Quais as adaptações que vocês consideram apropriadas para o seu contexto?
May 10th, 2007 at 9:27 am
Fala Danilo, como vai?
Bom, eu gosto muito do Motiro para acompanhar as modificações do repositório…. Tem um diff muito intuitivo e guarda o histórico.
Quanta propaganda rs..,, http://www.motiro.org
Abraço
May 10th, 2007 at 10:42 am
Propriedade coletiva, colaboração e auto-organização (ao invés de apropriamento individual de código e estruturas rÃgidas) são alguns dos assuntos que mais me interessam em todo o mundo ágil (se é que existe isso). Pensando nisso comecei a escrever o Motiro. Ele é uma ferramenta para acompanhamento de projetos com uma paixão (sim, ferramentas também se apaixonam) pela colaboração.
Passo muito tempo na terra do software livre onde capacidade de colaboração é um recurso essencial. Por isso tento construir tudo de modo a incentivar e facilitar a colaboração. Então meu objetivo é que _tudo_ dentro de um Motiro seja editável e comentável à moda wiki. Isso inclui layout das páginas do site e revisões de código. Desse modo, se alguém vir que ando fazendo besteira no código-fonte, pode simplesmente deixar um comentário na página wiki da revisão que não gostou. As pessoas podem até ir um passo adiante e ajudar o projeto simplesmente modificando o patch de uma revisão diretamente no site.
O único limite é realmente a imaginação.
May 10th, 2007 at 3:54 pm
Eu sempre fui fã de receber emails com diffs em cada commit, mas, é claro, isso vai ficando difÃcil com o tamanho do projeto e com a frequência dos commits.
O Motiro pareceu muito interessante, vou experimentar!
May 18th, 2007 at 12:56 am
Ler os diffs dos commits é legal, mas a idéia que surgiu em nossas conversas era ter uma ferramenta para facilitar o aviso de mudancas importantes… (ou algum tipo de aviso no commit dizendo que tal atualizacao eh relevante a todos os desenvolvedores).
Tambem surgiu a idéia de inserir esses “avisos” diretamente no código, a la Javadoc, e a ferramenta de integracão procuraria no conteúdo dos arquivos para então lancar um aviso na tela.
… vou dar uma olhada no Motiro (ainda não instalei).