quinta-feira, 31 de julho de 2008

Agile Software

Olá Pessoal, aqui estou mais uma vez após um longo período, espero aumentar a frequência de artigos no futuro...

O assunto de hoje é inovação pura ná área de gerência de projetos, trata-se de Agile. Uma maneira mais eficiente para gestão de projetos.

Se você ainda não ouviu falar, é bom começar a pesquisar, aliás, tenho algumas dicas a quem interessar... Agile nasceu em 2001 com o manifesto que pode ser encontrado em www.agilemanifesto.org, segue abaixo:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

Poucas coisas trouxeram tantas quebras de paradigmas como Agile, baseado em LEAN traz conceitos que são duros de engolir, mas os resultados são muito melhores que os obtidos até agora pelas outras metodologias.
Agile tem 4 grandes pontos, Self directed teams, susteinable pace, Time Boxed and Stakeholder feedback. Uma prévia de cada conceito:

. Time-Boxed - Trata-se de interações de 2 a 4 semanas, onde se deve designar o que deve ser feito, fazer, e entregar algo realmente pronto para o cliente. Dentro de 2 a 4 semanas, o resultado é algo pronto para ser utilizado. se há algo a se fazer para completar, então não está pronto e não é parte do resultado. Com isso é possível ver muito rapidamente e de forma transparente o andamento do projeto.

. Self Directed team - ninguém diz o que deve ser feito, a lista de tarefas é compartilhada e cada membro do time pode escolher o que fazer. Isso é um ponto muito difícil para gerentes que estão acostumados a designar tarefas... O time está comprometido, com o resultado da interação, e por isso farão o melhor que puderem. Lembro também que estamos falando de profissionais e que com responsabilidade farão o melhor que puderem.

. Susteinable pace - honestidade e transparência, não adianta dizer que entregará algo impossível e ficar trabalhando 18 horas por dia mais fins de semana para entregar. Estatísticas comprovam que mais defeitos são encontrados em situações de overload. Portanto é mais produtivo ser honesto e determinar um limite para o que deve ser entregue, mais que aquilo nào dá.

. Stakeholder feedback - o contato com o stakeholder é o pilar de sustentaçào do que está sendo feito e o que deve ser entregue, como temos interações de curto prazo, o relacionamento com o cliente deve ser muito estreito, para que nào se perca tempo desenvolvendo a solução ou o produto errado. O Stakeholder é que determina as prioridades das tarefas e o que ele quer ver no final.

Como disse anteriormente Agile tem os conceitos de LEAN incorporados. Lean foi criado na Toyota e hoje é aplicado a desenvolvimento de aplicações.
Lean tem 7 conceitos fundamentais, são eles:

1. Eliminate Waste - waste é tudo que não gera valor ao cliente, portanto documentação excessiva, funcionalidades não utilizadas, retrabalho etc. Em Lean toda tarefa deve ter como resultado algum valor agregado.

2. Built Quality in - é conhecido que quanto mais tarde se encontrar os defeitos, mais caro será para concerta-los. Portanto estamos falando de encontrar o defeito no momento de desenvolvimento, não na fase de testes. O uso de Unit Tests é bem comum para encontrar falhas ainda em desenvolvimento. É tarefa do desenvolvedor garantir que não há falhas.

3. Defer commitment - as decisões devem ser tomadas no último momento possível (dentro do esperado é claro) e sempre que possível as decisões devem ser reversíveis. Uma decisào irreversível, deve ser tomada no último instante possível, quando todas ou o máximo possível de informação e tecnologia está disponível. Assim tem-se mais segurança para a tomada de decisão e pode-se utilizar sempre o que há de mais moderno na solução.

4. Deliver Fast - isso é mais que entregar rápido, é entregar o que o cliente pediu e não o que queremos vender. A idéia é produzir a partir de uma solicitação, e não termos um produto pronto e entrega-lo ao cliente.

5. Focus on learning - os processos devem ser melhorados sempre, há empresas que dizem: "se um processo não muda a 2 meses é porque o processo não é mais utilizado ou a empresa fechou". Sempre há algo a melhorar e quem participa do processo é responsável por isso.

6. Respect People - cada membro do time é importante e é quem faz o processo caminhar e melhorar, ninguém melhor para dizer como fazer o seu trabalho do que você mesmo.

7. Optimize the whole - melhorar todo o sistema e não só um pedaço dele. Um exemplo básico seria, para melhorar um carro não basta somente colocar um motor mais forte nele, mas a suspensão, as rodas e pneus, a estrutura, o câmbio e mais outras partes devem ser melhoradas como um todo. Esse é o conceito, melhorar o todo e não só um pedaço.





Bem, hoje paro por aqui, mas volto com mais sobre Agile, nas próximas, vou escrever sobre scrum, planning poker Business Driven Development entre outros.

Até mais!

Algumas referencias:
http://www.agilemanifesto.org
http://www.agilealliance.com/