Acabei de sair do cinema e após assistir 007 Quantum of Solace, filme que recomendo assistir, não baixe vá para o cinema, e quando chego em casa vou para internet e dou de cara com um artigo How To Finish A Big Software Project And Be The Hero, ser um herói, ser o 007 de um projeto, vencer desafios, quebrar barreiras, conquistar, só faltam carros importados, mulheres gostosas e perigosas, cartões de créditos infinitos...
O artigo me chamou atenção, pois ainda estava com adrenalina correndo nas veias das cenas do filme, então não perdi tempo e o li. Achei interessante então o trans-codifiquei para uma identidade conhecida, português, para compartilhar com todos. Enjoy!
Como terminar um grande projeto e se tornar um herói
Como pegar um projeto de software “fora d´água” e se tornar um heróico desenvolvedor de software? Vamos dizer como...
Primeiro, um pequeno histórico sobre inicio de projetos fracassados. O tão sonhado projeto de software é desenvolvido para resolver problemas complexos. Ótimo, isso é tudo sobre o software! Mas coisas ruins começam a acontecer no primeiro dia! Como? Bem, os gerentes e executivos decidem que eles irão planejar cada detalhe projeto minuciosamente. Eles então contratam um gerente de projetos para gerenciar todos os desenvolvedores que começam a desenvolver cada pedaço de software. Umas semanas antes do lançamento, os gerentes de projetos tentam e combinam tudo, e tudo está correto tudo bem? Errado... um Desastre! O projeto está atrasado! Dias se passaram, semanas, meses, anos! Qual foi o alerta que aconteceu aqui? O que temos que fazer?
É como construir um prédio
Você já viu a construção de um prédio? Cada um com seus pequenos silos e constroem suas próprias coisas? Não! Como são os prédios arranha-céus? Primeiro a criação, depois coloca os andares, as colunas dos elevadores, depois piso após piso, e então o interior, etc. Você poderia imaginar o que poderia acontecer se cada pedaço fosse feito em diferentes lugares, e então depois tudo fosse largado no local da construção para ser montado? Mesmo se você tivesse o melhor plano de montagem já feito, você poderia ter problemas! Coisas que não se adequam e poderiam ter que ser refeitas, arquitetos iriam mudar de idéia, pedaços poderiam faltar, e o prédio poderia parece com um “monte de palitinhos juntos”.
Seja um desenvolvedor heróico, e termine esse projeto
Como você se sente em relação ao seu projeto como um desastre esperando pra acontecer? É realmente um desastre? Você está pronto para resolver um projeto desses? Então vamos lá...
1. Controle de versão de código
Você tem um sistema de controle de versão de código? Se você não tiver, esse é seu maior problema! Sem um controle de versão, bem que você poderia ir jogar roleta Russa. Em seu código você não poderá dar rollbacks em alterações, backups de código fonte, histórico, e é quase impossível de configurar propriedades de uma integração continua!
2. Integração contínua
Você tem um servidor de integração contínua configurado? Integração contínua automaticamente irá fazer o build do seu projeto, e apresentar os resultados dessa build. Você pode adicionar testes unitários, padrões de testes, etc. Mas deixá-lo simples é o melhor caminho!
3. Sistema de Bug Tracking
Sem um sistema de bug tracking não tem formas de como você saber em que ponto está a qualidade do seu software facilmente. A qualquer momento que quisesse ver quais features estão sendo desenvolvidas, testas, aprovadas, com problemas, etc. Se você está contando em um “Excel List” ou escrevendo em um bloco de notas, invista dinheiro em um sistema de bug tracking o mais cedo possível.
4. Sistema de Patching
Eu não vou entrar em detalhes sobre instalação aqui, mas você precisa de um sistema de patching. Você não quer criar vários deploys da sua aplicação para os testadores.
5. Desabilite funcionalidades não testadas
Desative as funcionalidades que não foram completamente testadas e aprovadas por seus usuários. Se seu projeto está com problemas, você tem milhares de funcionalidades implementadas até 80%, e você provavelmente pensará que estão em 90% - 95%, mas não estão.
6. Liste suas principais funcionalidades
Faça uma lista de todas as funcionalidades que estão envolvidas no projeto. Comece por de maior prioridade. Isso é o passo chave para começar a conhecer seu projeto. Você irá escolher suas batalhas aqui, pequenas batalhas, vitórias, ao invés de lutar em uma batalha sem fim com milhares de funcionalidades.
7. Liste 20% das principais funcionalidades
Ok! Então você tem uma lista de todas as suas funcionalidades, agora pegue 20% delas e faça outra lista. Essa são as funcionalidades que tem que ser implementadas para uma versão de pré-realease do seu software.
8. Detalhe 20% das funcionalidades listadas
Para 20% das funcionalidades listadas, faça outra lista detalhada de cada funcionalidade que precisam ser implementadas na ordem em que esses 20% dos itens sejam completados. A ordem dessas funcionalidades por importância. Eu gosto de escolher as mais complexas primeiro e depois as mais fáceis. Ficando mais fácil saber se você está no caminho certo, terminando as funcionalidades mais fáceis primeiro, você realmente não tem uma indicação, uma precisão de quanto tempo vai levar.
9. Planeje a semana
Cuidadosamente descubra quais dessas funcionalidades podem ser implementadas nas próximas semanas. Aloque cada funcionalidade para os desenvolvedores na equipe. Quando você alocá-los, tente e mantenha as funcionalidades juntas. Tenha certeza que cada um está comitando seus códigos regularmente. Quando eles comitarem, caso quebre a build, eles tem que corrigir a build imediatamente!
10. Crie branch
Usando o sistema de controle de versão que você escolheu, crie um branch. Seu objetivo aqui é criar um branch, nomeá-lo como versão de testes, e então entregar um patch no próximo passo. Quando você começa trabalhando nos itens para aquela semana, enquanto seus Testers testam.
11. Faça builds para os Testers testarem
Coloque uma “build master” o mais rápido possível. Um patch de uma build para sua equipe de garantia de qualidade de software.
12. Testers “livres”
Esperamos que você tenha uma equipe de garantia de qualidade, se você não começar com pelo menos uma pessoa e pegá-lo para configurar com um sistema de bug tracking. Obtenha um patch mais cedo possível, e deixe-o testando! De qualquer forma, se você pode incluir cliente ou usuários finais em sua equipe de garantia de qualidade, vá em frente! Tão cedo possível seus Testers encontre bugs, questões sobre implementações das features, etc. Tenha certeza que eles os reportem para os desenvolvedores! Se você tem um bom sistema bug tracking, o sistema deveria automaticamente enviar email para os desenvolvedores então seus Testers dando feedback ou mudanças de status dos bugs.
13. Desenvolvedores de software trabalham no “trunk”
Enquanto seus Testers testam, seus desenvolvedores continuam trabalhando nos itens nas próximas semanas. Com os bugs aumentando, eles voltam pro branch, resolve os problemas, e voltam para o desenvolvimento “Trunk”.
14. Aprove os patch
Seus Testers completaram os testes? Tudo parece bem? MARAVILHA!!! Você apenas completou sua primeira coleção de features que agora estão prontos para serem instalados! Tecnicamente, se você tem seguido os procedimentos descritos acima, um cliente ou testador poderia ser capaz de instalar este software, pegue o patch e use-o.
15. Continue o passo 9 ao passo 14.
Continue seus esforços até você ter os 20% feitos, esperamos que isto não esteja não longe quanto você pensa!
Seu objetivo é focar em pequenas features, terminá-los, e enviá-los para os Testers. Este é uma mudança enorme para tentar completar os 100% de seu projeto e corrigir seus bugs.
Sua equipe estará extremamente motivada para entregar software funcional toda semana! Eles
produzirão mais, e durante o projeto ganharão um dinamismo inacreditável.
Enquanto os Testers procuram bugs, seus desenvolvedores os consertam o mais rápido possível por que o código que eles escreveram está fresco em suas mentes! Se features precisam ser ajustadas e mudadas, façam o mais cedo possível e mudanças com muito mais cuidado!
Seu cliente começará a ver os resultados! Eles fornecerão mais recursos, ferramentas melhores e mais respeito! E terá pessoas mais felizes eu suas mãos!
É só isso que tenho que fazer? Depende em como é o ciclo de vida do seu desenvolvimento. Se você não tem nada sobre configuração, você passará por momentos difíceis, mas se você foca e executa rapidamente, você não deveria ter problemas com configuração num ambiente ideal eficiente.
Aproveite essas dicas e seja um “Desenvolvedor Heróico”!
Um comentário:
Parabéns pelo blog, gostei muito dessas dicas de como se tornar um ninja-codding! Valeu meu amigo,
Alexandre Nóbrega, Analista de T.I - CES/UFCG
Postar um comentário