Webgoal

20 Sep/10

Learning and Coolness

Entre os dias 22 e 24 de junho de 2010, realizamos aqui na Webgoal um treinamento in-company sobre XP (eXtreme Programming). Para este treinamento, contamos com a presença do nosso amigo Klaus Wuestefeld para explicar práticas ágeis de engenharia de software. O Klaus tem uma vasta experiência como desenvolvedor e é um dos responsáveis por trazer e divulgar XP no Brasil. Além disso, ele mantém dois projetos open-source bem interessantes: Prevayler e o Sneer. O título deste post refere-se a uma simplificação dos valores da XP (simplicidade, comunicação, feedback, coragem e respeito) idealizada pelo Klaus. Para ele, desenvolvimento de software é sinônimo de aprendizado. A partir deste ponto de vista, podemos constatar que:

  • Não se pode aprender sem feedback;
  • Aprender uma coisa simples é mais fácil do que aprender algo complexo;
  • Não se pode aprender sem algum tipo de comunicação;
  • Respeitar nossos pares, clientes e código-fonte é essencial.

Para completar, você não pode ser legal e covarde (falta de coragem) ao mesmo tempo. Portanto, Learning & Coolness é uma abordagem bastante simples e ao mesmo tempo poderosa do desenvolvimento de software.

No treinamento trabalhamos com duas equipes e no desenvolvimento de dois jogos em paralelo. No jogo Enduro foi escolhida a estratégia de somente desenvolver o mínimo para atender à funcionalidade solicitada. Desta forma a arquitetura do projeto iniciou-se simples e só houve a evolução quando necessário. Isso facilitou na criação das funcionalidades iniciais, ja que o design estava simples, mas quando necessitou de uma evolução arquitetural mais complexa, a refatoração foi bastante trabalhosa.

Já no jogo Space Invaders, uma arquitetura um pouco mais elaborada foi usada desde o início e não foram necessárias grandes refatorações. No final do treinamento, as equipes trabalharam juntas para unir os dois projetos, eliminando o código repetido e reaproveitando ao máximo as funcionalidades comuns entre os dois jogos, como renderização na tela, multiplayer via rede e captura de comandos do teclado.

Treinamento de XP na WebGoal com o Klaus Wuestefeld

O treinamento visou estressar o processo de desenvolvimento de software da equipe através de iterações curtas, que trouxeram a tona deficiências com as quais convivemos no dia-a-dia sem nos darmos conta.

A necessidade de entregar software funcionando no final de cada iteração demonstrou que os desenvolvedores instintivamente elaboram arquiteturas e engenharias complexas prevendo uma escalabilidade que pode nunca acontecer, e na maioria das vezes dificulta o desenvolvimento do mínimo necessário para retornar valor ao cliente.

Na programação em par, por exemplo, notamos o quão importante é o revezamento entre piloto e co-piloto e a troca entre os pares do time. Aprendemos na prática que compartilhar efetivamente o conhecimento e a atuação nos projetos com o maior número de pessoas possível propicia assertividade, integração, confiança, coragem e qualidade no desenvolvimento de software.

Outro ponto interessante corresponde a ausência de documentação ser totalmente suprimida pela coletividade do código dentro do time, viabilizada pela frequente troca de membros entre equipes e papéis, bem como a utilização de testes de aceitação que guiam o desenvolvimento ao software mais simples.

Além da troca entre os pares, os colaboradores também revezaram-se entre os papéis de coach, cleaner e product owner. O coach tem a responsabilidade de constantemente acompanhar o trabalho do time como um todo, apontando problemas de comunicação entre os pares e alertando quando alguma coisa está indo por um caminho que não leva à meta proposta. O cleaner, por sua vez, tem o objetivo de encontrar e melhorar trechos de código (refactoring), fazendo uma limpeza mais pesada em partes do código que não foram refatoradas no dia-a-dia.

Aprendemos também que a participação de um designer em um time ágil não se limita a criação de protótipos de telas, html e css. É preciso envolver os designers em todas as atividades do projeto. Durante o treinamento tivemos designers codificando em Java, atuando como product owner e coach.

O treinamento do Klaus nos trouxe a percepção sobre o que é ser realmente ágil em relação as práticas de engenharia de software. Entrega com qualidade versus entrega rápida, a refatoração, TDD, integração contínua, a co-autoria do código para disseminar o conhecimento entre o time, evitar negociar orçamentos e o real entrosamento e envolvimento das pessoas em cenários de alta complexidade são fatores determinantes para que a equipe seja realmente ágil. E aí, o seu time é ágil?

Tags

Categorias

São Paulo

+ 55 11 2537-1198

R. Professor Aprígio Gonzaga,
112

Poços de Caldas

+55 35 3722-3776

R. Prefeito Chagas,
346 - Sala 21

Webgoal® 2015 - Todos os direitos reservados.