sauloarruda.eti.br

…revirando até chegar do outro lado…

May 9th, 2010

Com uma pergunta dessas eu com certeza estou causando confusões nas mentes das pessoas que não entendem exatamente o que estou dizendo. Vou dar alguns exemplos de coisas que tenho visto ultimamente para que as conclusões possam fazer algum sentido…

Primeiro, o contexto: as experiências têm se passado no dia-a-dia do trabalho de imersão Ágil que temos feito na Agence. Segundo, não vou citar nomes de clientes ou coisas do tipo e tentarei ser o mais claro possível sem ofender ninguém. Terceiro, se alguém se ofender, sinta-se à vontade para expressar seus argumentos nos comentários, pessoalmente ou de qualquer outra forma. O que vou colocar aqui é apenas meu ponto de vista atual sobre desenvolvimento (ágil) de software.

Tenho visto uma tendência de empresas que tem mostrado um trabalho legal, de não atenderem grandes corporações multinacionais para dar preferências à startups. Com isso, refleti um pouco sobre como isso acontece no meu dia-a-dia, visto que tenho a oportunidade de atender tanto clientes abrindo um novo pequeno negócio ou dando uma “guinada” no seu pequeno negócio atual, quanto grandes corporações multinacionais ou governo.

Percebi algo interessante. Se falando de desenvolvimento ágil, mais especificamente SCRUM, temos a figura do Product Owner (PO). Esse é um papel bastante difícil de se assumir, visto que este cara visa o ROI como principal fator de sucesso de um projeto de software, pelo menos na cartilha. Fazendo um paralelo para o mundo real, nem com os cliente mais “engajados” que atendemos, tenho nutrido esperanças de ter um legítimo PO.

Vou mostrar o que geralmente acontece em dois cenários distintos: projetos para grandes empresas e para pequenas empresas.

Grandes empresas

Quando temos nosso “gerente de projeto” dentro das grandes empresas, esse cara geralmente tem uma formação em TI e pós-graduação/mestrado/MBA/cursos de extensão na área de Gerenciamento de Projetos. OK, ele entende um pouco de software e também um pouco de PMI. Infelizmente, ele não PAGA pelo projeto, mesmo havendo cobrança de seus clientes internos, o dinheiro não sai do bolso dele. Esse é o que considero nosso pior cenário de trabalho pois, a mentalidade cascata (ou cascateiro) é predominante (com raras exceções). Argumentos por parte do cliente:

  • Nossos analistas do departamento de TI vão levantar os requisitos para o projeto e abrir uma RFPRFQ ou outro nome novo para isso.
  • Temos um orçamento pré-definido para esse projeto.
  • A área (leia-se, quem solicitou o projeto/cliente interno) não tem disponibilidade de “homologar” o projeto em partes. E, como é de praxe, nós que estamos desenvolvendo o projeto não costumamos ter contato com “a área“.
  • Não faz o menor sentido o projeto “ir para o ar” antes de ser terminado.
  • Há um contrato a ser cumprido, que muitas vezes prevê multas para atrasos.

Como era de se esperar, não é um espanto haverem divergências de requisitos (e várias reuniões para discutir o assunto) no final do projeto. Mesmo tentando trabalhar de forma iterativa, isto é, apresentando o sistema em partes para esse gerente de projeto, no final, quem de fato vai usar o sistema, acaba por não participar dessas “entregas” parciais e acaba “mudando” de idéia quando vê o projeto terminado, meses depois que ele foi “concebido”. As palavras entre aspas nessa frase tem um significado muito relevante:

  • Concebido: O custo/prazo/escopo do projeto tem que ser fixo. Logo, antes de assinar um contrato, temos que entender muito bem o que vai ser feito, geralmente apresentando protótipos que são “assinados à sangue” pelo gerente de projeto e pelo pessoal que solicitou o projeto.
  • Mudando: naturalmente, você já entendeu que as reuniões no fim do projeto são para negociar mudanças que, é óbvio que acontecem.
  • Entregas: como são feitas para o gerente de projeto e obedecendo a especificação inicial (ou as datas de pagamento do contrato), é uma mera prova de que o cronograma está sendo cumprido.

Resultado final: na maioria das vezes o projeto sai mais caro e demora mais que o previsto. Lembre-se que o escopo mudou e até hoje não vi nenhum projeto que não tenha mudado. A não ser que seja algo muito pequeno (entenda-se, projetos com menos de 300 horas ou 2 profissionais durante 1 mês).

Pequenas empresas

Pequenas empresas por outro lado não tem árvore de dinheiro e por isso tem que otimizar ao máximo cada centavo “gasto” em software. Por isso, não é nenhuma novidade que consigamos fechar projetos de escopo aberto com duração e custo fixo. Neste caso, conseguimos à cada apresentação para o cliente, ter um feedback exato se estamos mesmo indo no caminho certo. E, acreditem, na maioria das vezes o projeto vai para o ar antes daquele prazo inicial previsto terminar.

Aqui, de fato, conseguimos aplicar a cartilha de desenvolvimento iterativo de forma eficiente. Conseguimos fazer menos software, reduzir o time-to-market, gerar valor para o cliente e cultivar um relacionamento muito bom com os clientes.

Para concluir, segue um paralelo sobre custos e prazos (esta informação é empírica e baseada apenas na minha observação dos projetos no último ano):

Perfil dos projetos analisados: o prazo geralmente é de 3 a 4 meses para um volume de cerca de 1.500 horas. Nesses projetos trabalhamos com equipes de 3 a 6 pessoas envolvendo uma pessoa que faz o atendimento ao cliente, dois desenvolvedores plenos, um ou dois desenvolvedores júniors e um designer.

Grande empresa Pequena Empresa
Tempo para primeira versão ir para o ar 6 meses 2 meses
Esforço para desenvolvimento da primeira versão 1500 horas (ou mais) 800 horas
Lucratividade para a consultoria (isto é, nós) Alto risco, já houveram casos de prejuízos Baixo risco, vários casos de sucesso
Fechamento de um contrato de “manutenção evolutiva” Nem sempre Quase sempre

Para finalizar… Nem sempre é fácil usar princípios básicos que norteiam desenvolvimento ágil como neste caso, desenvolver de forma iterativa. Muitas vezes os projetos já começam no modelo cascata e, como somos consultorias que prestam serviço para esses clientes, não temos muito o que fazer para alterar o cenário. Neste caso, posso afirmar que seu cliente não é Ágil!

Obrigado para quem leu até aqui!! Fico à disposição para trocar idéias sobre o assunto. []‘s e boa semana!

November 4th, 2009

Neste final de semana finalmente participei do segundo encontro presencial na UFLA (Universidade Federal de Lavras) para conclusão do curso de Especialização em MPS (Melhoria do Processo de Software) que iniciei em 2006. O encontro foi extremamente produtivo visto que havia poucos alunos e com isso temos a oportunidade única de ter consultorias ao invés de aulas com professores de altíssimo nível. Fora que com pouca gente a interação entre os alunos foi infinitamente maior o que com certeza vai promover amizades produtivas.

No sábado eu tive a oportunidade de apresentar meu Trabalho de Conclusão de Curso que trata-se de um artigo entitulado: Gerenciando Projetos de Escopo Aberto – Uma Visão Ágil. Ainda tenho alguns ajustes para fazer, mas já disponibilizei uma prévia do trabalho em PDF e depois atualizo esse post com a versão final (para fazer o download clique no link do nome do trabalho).

É uma pena esse curso ter acabado. Mas já deixo a recomendação de outro curso, na verdade um MBA, que tem como coordenador um dos professores. Trata-se do MBA Gestão da Qualidade em Software com ênfase em CMMI® e MPS.BR da FIAP, e o coordenador é o sensacional Nilson Salvetti.

Como voltei bastante animado do encontro, em breve devo publicar, em parceria com alguns colegas, artigos que estamos preparando sobre teste de integração e gerenciamento de projeto “agile”. Pode me cobrar se eu não enviar! Estou até animado a embarcar em um mestrado na área de Engenharia de Software, e aceito recomendações!

April 19th, 2009

Hoje eu e o Jefferson Moreira demos uma plalestra sobre Arquitetura de Software para a turma de especialização da UNIDERP/Anhanguera a convite do colega do JUG-MS, o professor Edilmar Alves. Nosso foco foi apresentar aos alunos como fazemos o trabalho de definição da arquitetura de um sistema na Agence.

Apresentamos a descrição do problema, das restrições, do cenário atual do cliente, as decisões e motivos que nos fizeram fazer determinadas escolhas. Escolhemos um caso de uso crítico do sistema e mostramos o modelo de domínio, diagramas de classe da camada de negócio e web, diagrama de sequência de um método e diagrama de pacotes.

No final, mostramos as limitações encontradas na implementação atual do caso de uso (da primeira iteração) e como pretendemos agir para contornar esses problemas. Neste ponto falamos sobre as estratégias de teste unitário, integrado, funcional e de carga e como procedemos quanto à otimização.

Para concluir citamos as lições aprendidas durante esse processo.

Os slides estão disponíveis para download: arquiteturasoftware.pdf

Infelizmente não posso passar mais detalhes dos diagramas ou códigos-fonte. Mas em breve estarei escrevendo alguns artigos sobre as técnicas de testes utilizadas.

March 30th, 2009

Dia 28/03 começei a Ministrar no SENAC/MS o treinamento de Análise de Requisitos Orientado a Objetos. O foco desse treinamento é elicitação, especificação e análise de requisitos de software. As aulas são aos sábados das 8:00 as 12:00 e terminam em 23/05/2009.

Quando o curso finalizar um publico o material aqui no Blog.

August 5th, 2008

Dias 25 e 26 de Julho aconteceu em São Paulo o evento The Developers Conference (TDC 2008). O evento foi promovido pela Global Code e contou com a presença de três palestrantes internacionais e várias outras pratas da casa.

Os temas do momento definitivamente são SOA, REST e Desenvolvimento Ágil. O nível das palestras no geral foi muito bom, com destaque para:
- Burr Sutter e Edgard Silva: ambos falaram bastante sobre SOA e REST usando os produtos do JBoss;
- Michael Nascimento (Mister M): sempre dando aquele show, mas desta vez falando sobre a JSR-310 (Date Time API)
- Vinícius Manhães Teles: como sempre, falou sobre XP com muita propriedade.

Meu amigo Jeffmor escreveu em seu blog um resumo mais detalhado do evento.

May 28th, 2008

Planejar e controlar projetos de software são atividades que boa parte das empresas tem conseguido desempenhar em seu processo de desenvolvimento. Porém, medir qual desenvolvedor é mais produtivo, re-alimentar o processo de estimativa e coletar informações para tomada de decisão quando o projeto “sai dos trilhos” é uma tarefa bastante complicada.

Neste artigo, vou apresentar a experiência que implantamos na área de Produção de Software da Agence para medição da produtividade.

Primeiro Passo: Estimativa

Qualquer planejamento de projeto de software é elaborado com base em uma estimativa, especialmente em “Fábricas de Software” que muitas vezes trabalham com projetos de escopo fechado e orçamento pré-definido.

Na Agence, usamos basicamente três métodos para estimar o tamanho de um projeto:

Para pequenos projetos, inferiores a 300 horas, usamos uma Planilha de Estimativa onde são estimadas horas de trabalho para cada uma das disciplinas da Engenharia de Software (análise e projeto, requisitos, codificação, testes, implantação, etc.). Este método é bastante simples, mas exige experiência do profissional que faz a estimativa, é bastante suscetível a falhas e é calçado em um histórico de experiências anteriores do mesmo tipo.

Para projetos maiores, usamos contagem de Pontos por Função e/ou de Pontos por Caso de Uso. Esses métodos têm o embasamento científico de várias pesquisas com projetos de empresas diferentes e devem ser calibrados pela complexidade e natureza do projeto e também pela qualidade da equipe.

Segundo Passo: Planejamento

Com a estimativa em mãos, é hora de planejar o projeto. Na Agence trabalhamos com o modelo Iterativo e Incremental de ciclo de vida. Logo, a primeira fase do planejamento é definir as iterações do projeto e quais artefatos serão entregues em cada uma.

Seguindo o princípio do Unified Process (UP), temos quatro fases no ciclo de vida do projeto: Iniciação, Elaboração, Construção e Transição.

A fase de Iniciação na maioria dos casos refere-se à prospecção do projeto junto ao cliente e não possui um planejamento formal. Nesta fase o Consultor de Negócio (figura do Analista de Requisitos) entrevista o cliente, documenta os requisitos e prototipa a solução. Nesta fase o projeto é estimado e uma proposta apresentada ao cliente. Se o cliente aprovar, o projeto continua.

Na fase de Elaboração, o planejamento do projeto como um todo é elaborado. Além disso, o Modelo de Casos de Uso é detalhado e a Arquitetura da Solução é desenvolvida. Nesta fase, existe uma maior participação do Gerente de Projeto, Analista de Requisitos e Arquiteto.

A partir da fase de Construção que o trabalho pesado começa. Nesta fase, há sempre uma versão utilizável do sistema (ou incremento) produzida por mês, independente do tamanho do projeto ou da equipe. Essa entrega da versão formaliza o término de uma iteração e início de outra.

Na fase de Transição, o software é instalado em ambiente de homologação/produção e avaliado pelo cliente e usuários final. Muitas vezes são executados testes de carga e stress, projetos pilotos da operação do sistema e treinamentos.

Terceiro passo: Controle

Diariamente, os profissionais fazem seu trabalho e registram as horas gastas em uma ferramenta de controle de projetos. No final de cada iteração o Gerente de Projeto mede os registros de trabalho dos profissionais e compara com os valores inicialmente estimados.

Naturalmente, o cliente fará uma avaliação da versão entregue no término da iteração e novas pendências podem aparecer. O tempo para os ajustes geralmente está contabilizado na estimativa para o desenvolvimento da funcionalidade.

Mas o ponto é, para medir a produtividade, é necessário dividir a quantidade de horas de trabalho pelo tamanho em pontos (de função ou casos de uso) da funcionalidade. Por exemplo, se o desenvolvedor codificou uma funcionalidade que totaliza 5 pontos de função (PF) em 40 horas (h), sua produtividade é de 40 h / 5 PF = 8 h/PF (lê-se quatro horas por ponto de função). Desta forma é possível obter uma produtividade média da equipe e avaliar os desenvolvedores que têm um desempenho menor ou maior.

É importante salientar que quando a estimativa é feita, é normal que se tenha 12 h para cada PF. Esse tempo, porém, é dividido entre todas as atividades do processo de desenvolvimento: codificação, testes, análise e projeto, requisitos, gerenciamento, implantação, etc. Logo, se for considerado apenas o tempo de codificação, consideramos de 40 a 50% do tempo estimado para cada PF. Assim, uma funcionalidade que tenha 2 PF, com a relação de 12 h por PF na estimativa, não pode gastar mais que 12 horas com codificação, incluindo os ajustes solicitados pelo cliente. Logo, um desenvolvedor com a produtividade de 8 h/PF não é uma boa média, que será, no máximo, 6 h/PF.

De posse dessas informações, é possível, já inicio do projeto, tomar atitudes para evitar atrasos no cronograma ou prejuízos financeiros. No término no projeto, essas informações servem de base para próximas estimativas, definido um fator de horas por ponto de função ou de caso de uso aplicável para a empresa em determinados tipos de projetos.

E na prática?

Em um próximo artigo, vou apresentar uma forma de medir produtividade na prática usando a ferramenta Jira. Para quem não conhece, o Jira é uma ferramenta paga, porém com preço bastante acessível, para controle de pendências e gerenciamento de projetos. Até lá!

May 2nd, 2007

Um cidadão chamado Mateus Velloso resolver falar mal de CMMI. Ele é louco? (Deixo a resposta para vocês…). Leia o artigo na íntegra.

February 25th, 2007

Hoje por acaso encontrei uma voluntária e muito bem vinda tradução de Luciano Passuello do artigo The New Methodology do guru Martin Fowler.

O texto fala sobre como as metodologias de software evoluíram com o passar dos anos: Do Nada, ao Monumental, ao Ágil. Segundo o autor, metodologias ágeis tem como pontos-chave:

  • Metodologias ágeis são adaptativas ao invés de predeterminantes. Metodologias de engenharia tendem a tentar planejar uma grande parte do processo de desenvolvimento detalhadamente por um longo período de tempo. Isso funciona bem até as coisas mudarem. Então a natureza de tais métodos é a de resistir à mudança. Para os métodos ágeis, entretanto, mudanças são bem-vindas. Eles tentam ser processos que se adaptam e se fortalecem com as mudanças, até mesmo ao ponto de se auto-modificarem.
  • Métodos ágeis são orientados a pessoas ao invés de serem orientados a processos. O objetivo dos métodos de engenharia é de definir um processo que irá funcionar bem, independentemente de quem os estiverem utilizando. Métodos ágeis afirmam que nenhum processo jamais será equivalente à habilidade da equipe de desenvolvimento. Portanto, o papel do processo é dar suporte à equipe de desenvolvimento e seu trabalho.

Nas próximas semanas falo mais sobre o assunto e recomendo outras leituras. Link para a tradução:
http://simplus.com.br/artigos/a-nova-metodologia/.
Recomendo!

January 30th, 2007

Maurício Linhares escreveu um artigo intitulado “Satisfação garantida ou seu dinheiro de volta!“. O artigo fala com muita propriedade sobre as brigas contratuais em projetos de Desenvolvimento de Software.

Concordando com o autor, já participei de projetos com grandes problemas contratuais pela velha e péssima prática de tentar fechar um escopo enorme em apenas um contrato. Eu vejo como um modelo ideal, a assinatura de vários contratos: um contrato para elicitação de requisitos e prototipação, outro para desenvolvimento, outro para implantação (quando conveniente), outro para testes (perfomance, usabilidade, portabilidade, etc), e por aí vai. Com isso, o risco de “pedir o dinheiro de volta” será muito menor.

January 30th, 2007

Hoje, li um depoimento sobre o processo de implantação de um sistema de gestão da qualidade conforme os requisitos da Norma ISO/IEC 9001:2000 em uma empresa que desenvolve software. O autor é Cláudio Testoni Cardozo, responsável pelo setor de desenvolvimento da empresa Constat.

Minha opinião sobre o assunto: Eu acho que a implantação de um sistema de gestão da qualidade é o primeiro passo para uma empresa que deseja melhorar seus processos. Explico: em geral, as empresas que desenvolvem software não têm a cultura de definir seus processos, isto é, nós sabemos fazer software, mas constantemente mudamos nossa forma de trabalho com boas intenções. Logo, quando os desenvolvedores são questionados sobre como as coisas são feitas, geralmente as respostas são contraditórias. Até aí, nada grave, os céticos dizem. O software é “produzido“, o cliente é “atendido“, os desenvolvedores estão “satisfeitos“…

Pouco tempo depois, o gerente de projeto é questionado a respeito da baixa produtividade da equipe. Ok, todos sabemos que a produtividade em software é realmente muito baixa. Mas, alguém sabe dizer o quão baixa? Ou quem sabe estabelecer metas para aumento da produtividade? Que seja, medir a produtividade?

Neste ponto, o sistema de gestão da qualidade apresenta resultados, diferentemente do que várias pessoas pensam – que a certificação ISO 9001 (e isso se aplica a outros modelos como CMMI ou mps.BR) servirá para burocratizar o processo de desenvolvimento de software – quando na verdade a principal função é medir. Medir para Analisar. Analisar para Melhorar. A melhoria de processos se dá com base em números e não com base em fatos.

Logo, a necessidade de padronizar o processo se dá pela necessidade de medir. Não é possível comparar dois produtos produzidos por processos diferentes. OK, temos nosso processo definido. Agora, o que foi definido deve ser aplicado e aí entra o setor de Garantia da Qualidade que nada mais faz do que garantir que as coisas estão sendo feitas como está escrito que elas deveriam ser feitas.

Não estendendo mais o assunto, a empresa que tem interesse em melhorar processos têm na norma ISO/IEC 9001:2000 um grande aliado quanto a requisitos para a implementação de um sistema de gestão da qualidade. A pergunta final é: Porque ISO/IEC 9001:2000? Não poderia usar CMMI ou mps.BR? A resposta é SIM, poderia. Porém a implementação da ISO 9001 é muito mais simples, basta que a empresa documente como ela trabalha (não sendo necessário na maioria das vezes mudar a forma de trabalho) e criar indicadores para medir o desempenho da produção. Enquanto em modelos como o CMMI e mps.BR, várias práticas devem ser implementadas com metas e resultados que devem ser respeitados, o que, na maioria dos casos irá interferir na forma que a empresa trabalha.

A vantagem de implantação de ISO/IEC 9001:2000 ANTES de outros modelos é a criação de uma cultura voltada à qualidade, que é uma das tarefas mais difíceis da implementação de CMMI ou mps.BR.