Monday, February 06, 2006

Projeto ganha nome

E o nome é Motiro.

Motiro é uma palavra tupi-guarani que, no português moderno, deu origem a mutirão. Os linguistas de plantão podem corrigir, pois a grafia original é motirõ. Nós apenas decidimos remover o til para dar uma sonoridade diferente.

Mutirão é uma reunião para trabalho em um objetivo de interesse de todos os participantes. Exemplos bastante comuns são as colheitas e construção de moradias. Num mutirão as pessoas se ajudam mutuamente a fim de dividir o resultado final do trabalho. Todos trabalham para todos os outros e para si mesmos. Não há mecanismos de centralização de poder, ninguém é imposto como chefe. Ao invés disso há lideres, e eles emergem naturalmente durante a atividade.

Um mutirão é uma organização dinâmica e descentralizada. Nele a responsabilidade é dividida ao máximo entre todos os participantes. Cada participante escolhe uma pequena parte do trabalho, extremamente fácil de ser gerenciada, de acordo com o que julga ser melhor para a comunidade como um todo.

Esta descentralização da capacidade de decisão é um dos pilares da filosofia Just-in-time que, aliás, funciona bem para construção de motores a jato e pode funcionar também para projeto de software, como mostram Mary e Tom Poppendieck em seu Lean Software Development: An Agile Toolkit.

Quem estiver interessado pode contactar a Equipe Motiro através de um grupo de discussão hospedado no Google Groups ou visitar a página do projeto (que está em construção) no BerliOS Developer.

Atualização em 30 de março de 2006: reelaborei alguns trechos sobre Lean e Just-in-Time depois de discutir o assunto com Carlos Miranda. Estou mais confortável com o novo texto. Obrigado, Carlos.

Wednesday, February 01, 2006

Pequeno manual para remoção de rochas magmáticas

Tenho uma confissão a fazer. Hoje eu apaguei umas 20 linhas do código de um sistema.

Afinal quem seria desumano a ponto de apagar um trecho de código em que investiu tempo e esforço para escrever? Quem em sã consciência cogitaria esta possibilidade?

Mas eu tive minhas razões. O trecho que eu apaguei é o que eu chamaria de solidificação mineral de código indevida. Sabe aqueles trechos de código que estão ali mas você não sabe para que diabos escreveu aquilo? Você passa um bom tempo imaginando qual a utilidade daquilo e não consegue se lembrar nem elaborar uma hipótese plausível. O trecho de código é quase um apêndice do seu sistema. Está lá. Funciona. Mas ninguém usa para nada.

Este anti-padrão foi identificado por William Brown, Raphael Malveau, Hays "Skip" McCormick e Thomas Mowbray no livro AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis e observado por milhares de programadores em uma quantidade astronômica de projetos. Os autores do AntiPatterns chamam isso, sugestivamente, de bloco de lava. O nome é uma alusão à erupção de um vulcão. Depois que passa a fúria da lava, ficam alguns blocos solidificados que não servem para muita coisa.

O código que eu apaguei hoje não era exercitado por nenhum teste do projeto (não estou usando nenhuma ferramenta para monitorar a cobertura de código, mas executei os testes após a exclusão do código e tudo continuou tão verde quanto antes). Além disso, eu não consegui pensar em nenhuma utilidade para aquele código mesmo tentando bastante. Então eu respirei fundo, apaguei o código e enviei a modificação para o repositório central. Até agora ninguém reclamou. E se reclamar vou pedir que escreva um teste que demonstre a utilidade do código. Isso vai impedir que o próximo programador desavisado apague tudo novamente.

Cada linha de código de um sistema em evolução (o que engloba a maior parte deles) aumenta o custo de manutenção. É mais uma linha que vai precisar ser lida, compreendida e testada. É como se o projeto fosse uma mala e as linhas de código as peças de roupa. Cada peça de roupa colocada na mala é um peso a mais que precisa ser carregado. Uma camisa ou um par de meias sozinhos não pesam muito, é quando eles se juntam que a mala fica pesada. Ao apagar o código, eu optei por carregar menos bagagem.

Talvez eu não esteja tão louco quanto pensei.