O Desenvolvimento de Software ideal

Por Leonardo Müller

Tenho publicado uma série de artigos sobre como vejo o funcionamento de uma empresa de software ideal, basicamente funcionando em um fluxo de comercial -> desenvolvimento-> implantação -> sustentação. A visão macro dessa ideia pode ser vista neste artigo.

Já falei sobre minha experiência e como eu vejo o funcionamento de uma área comercial ideal, baseada em metas compartilhadas, com adoção de kanban e uma verdadeira cultura ágil. O objetivo de hoje é começar a falar um pouco sobre gestão ágil de equipe de desenvolvimento de software na prática.

Não é minha intenção fazer um tratado sobre cultura ágil, mas preciso me apoiar no ponto principal que deve guiar todas as decisões e a cultura do desenvolvimento: o (já velho e bom) manifesto ágil, que lista os itens da esquerda como prioritários, embora reconheça que os itens da direita também têm seu valor:

  • Os indivíduos e as interações entre eles mais que os processos e as ferramentas;
  • O software funcionando mais do que uma documentação completa e abrangente;
  • A colaboração com e dos clientes mais do que as negociações de contratos e;
  • Respostas a mudanças mais do que seguir o plano inicial.

A página Metodologia Ágil ainda traz de forma bem didática um resumo dos processos, ferramentas e princípios usados para colocar o manifesto ágil em prática:

  1. Equipes Auto Gerenciáveis: É importante que a equipe atue em conjunto para tomar as melhores decisões, ao invés de haver um gerente que dita o caminho, há um líder que atua como facilitador;
  2. Comunicação: É essencial a constante comunicação entre a equipe de desenvolvimento e a área de negócio;
  3. Preferência por Equipes Pequenas: É consenso que equipes pequenas são mais produtivas, evitam conflitos e falhas de comunicação;
  4. Uso de TDD: É uma técnica que permite a realização de testes contínuos e não apenas na conclusão do sistema;
  5. Planejamento Incremental: Ao invés de planejar o software como um todo, o planejamento é feito de forma sistêmica. O todo é determinado, mas o planejamento é feito por etapas;
  6. Entregas menores: Uso de incrementos pequenos de software, entregando novas funcionalidades em meses ou semanas, ao invés de anos;
  7. Uso de Refatoração: Melhoria constante do código, tornando-o mais fácil de manter;
  8. Integração sistêmica contínua: Sempre que um incremento está pronto, ele é integrado ao sistema como um todo.

Eu ainda adiciono a esses 8 itens mais 3 itens de experiências minhas:

9. Busca por melhoria contínua: Buscar continuamente aperfeiçoamento individual e da equipe.

10. Qualidade medida através de dados e revisões qualitativas: Uso de ferramentas que analisam qualidade de código, como o SonarQube e revisões qualitativas pelos pares antes de integrar código novo ao sistema.

11. Visão de longo prazo: Parece um contrassenso, já que o ágil busca entregar valor mais rápido ao cliente, mas o uso de TDD, a refatoração e a exigência por código de qualidade  — além da ajuda óbvia na satisfação do cliente com um sistema com menos erros  — prejudicam as entregas de curto prazo para colher frutos com a redução de custo de manutenção e evolução mais pra frente.

O fato é que estes 11 itens enfrentam uma tremenda resistência dentro da maioria das empresas. Não é surpresa que, ao olhar com uma lupa, a maioria das empresas tenha seu quadro scrum ou kanban para listar suas atividades e isso basta para pregarem adotar o pensamento ágil (esses quadros aliás nem aparecem nos 11 itens).

Nos próximos artigos vou escrever um pouco sobre cada um destes 11 itens e sobre como implementei com as equipes que liderei ou vi outras equipes implementarem cada um deles. Semana que vem falarei sobre equipes auto gerenciáveis (e o chefe, fica onde?), comunicação (principal problema em qualquer empresa de qualquer tamanho), equipes pequenas e TDD (do ponto de vista de gestão).

Até lá!