Aplicando métodos ágeis além do software (II) « Agile Way
23 de Novembro de 2009

Aplicando métodos ágeis além do software (II)

No artigo anterior eu trouxe uma visão crítica sobre os processos ágeis em um ambiente de uma agência digital, cuja realidade costuma ser um tanto diferente de uma empresa de software.

Neste artigo irei tentar discorrer sobre algumas ideias para aplicar agilidade em um ambiente destes. Note: são ideias e sugestões baseadas na minha visão e experiência. Não veja isso como uma verdade absoluta.

Antes de entrar no assunto, queria apenas expôr um artigo bem interessante que encontrei em um blog, onde os autores falam de suas experiências com SCRUM em uma produção de um website.

Uma das coisas que eles comentam e que demonstra bem a diferença de uma produção de software e uma produção de um website é:

“When a project includes getting feedback from the end user, it take measurably longer to allow for subjective decisions based on visual elements, than on purely functional determinations.”

E foi o que eu já havia comentado no artigo anterior. É difícil ter feedbacks com clientes quando se trata de algo tão subjetivo como design.

Atacando os problemas com agile

Atenção, lembre-se que essas sugestões envolvem mudanças de processos e cultura. Tenha certeza que muitas pessoas farão cara feia, sem nem ao menos tentar. E outros preferirão manter as coisas como estão, pois dessa forma sempre poderão culpar o “sistema”, a “desorganização” e demais objetos esotéricos. De forma direta, vou atacar os problemas mencionados no artigo anterior.

1) Documento de projeto que ninguém usa. Que tal tornar o documento de projeto em apenas um documento de formalização do que será feito, de forma bem objetiva? Seria um documento orientado ao cliente, talvez até mesmo o próprio contrato. Nele constariam informações que só são relevantes ao pessoal de negócio (algumas datas, algumas orientações, restrições, etc). Tudo o que for de natureza mutável (seções, funcionalidades, usuários, etc) se torna algo informal, como os cartões de um Product Backlog. Esses cartões (também conhecidos como Index Cards) contem as informações relevantes para os desenvolvedores, numa linguagem simples e de fácil entendimento par todas as partes. É preenchido a lápis, o que possibilita a manutenção dele. E é FÍSICO, estando sempre disponível para a equipe. Aliás, está sempre junto ao Scrum Master, que o levará em todas reuniões. E só são atualizados na presença de todos (ou a maioria) dos componentes da equipe – sendo uma forma de estimular a colaboração e a comunicação.

2) Definição preliminar das seções do site quase sempre inexatas. A não ser que se trate de um hotsite simples, ou de um website mais simples ainda, o risco de tentar prescrever as seções que irão compor um website do cliente é o mesmo de tentar adivinhar as funcionalidades do sistema a ser desenvolvido. Lembre-se que os sites atuais possuem gerenciadores de conteúdo, e que tudo isso está associado ao website. Portanto, uma definição errada pode levar ao desenvolvimento de uma arquitetura de informação, layout, programação front-end e back-end errada. Vale a pena arriscar? Assim como no desenvolvimento de software, é relativamente tranquilo de identificar com o cliente quais seções tem mais valor para ele. Normalmente é a seção principal (home) que é a apresentação da sua proposta ou empresa. Vale a pena sentar com o cliente e navegar em algumas referências buscando identificar ideias. E avaliar se algumas das coisas que ele quer são de fato relevantes ou não agregam nada.

3) Wireframes/esqueletos não geram valor ao cliente. Os arquitetos de informação vão me matar! Mas calma, gente. A arquitetura de informação é muito importante para um website sério e bem produzido. Quem duvida, basta pedir para um designer criar um site direto sem pensar na AI. Pode ter certeza que vocês irão encontrar diversos furos de navegação e conteúdo. E até mesmo de programação. Porém, criar uma fase específica para produção da arquitetura da informação não seria perder um período de tempo focado em algo que só tem benefício interno? Que tal então transformar essa criação em algo interno de cada iteração? E mais importante ainda: que tal fazer com que o arquiteto e o designer trabalhem de fato juntos? Um pode completar o outro durante o desenvolvimento.

4) Falta de comunicação entre a equipe. Bom, aqui existem técnicas a serem aplicadas, mas vale ressaltar que se seu pessoal não estiver a fim de fazer acontecer, nada vai adiantar. De imediato, é importante que a cada início de projeto TODOS envolvidos (do executivo de contas ao programador) estejam presentes na reunião. Se o cliente estiver presente, melhor ainda! As pessoas só se sentem parte de alguma coisa quando participam. Ou você acha que alguém será comprometido com algum projeto, que ele pegou sem nem saber quem é o cliente ou mesmo quem fez as telas de layout? Depois encoraje as pessoas a se comunicarem diariamente sobre o projeto. Uma reunião diária (daily meetings) pode funcionar, caso sua equipe tenha apenas um projeto ou seja uma equipe com vários projetos. Agora, imagine reuniões diárias em um ambiente onde cada pessoa trabalha em um projeto diferente: não se trabalharia nessa empresa. Faça o possível para manter a mesma equipe sempre, isso já reforça a comunicação e cumplicidade.  Jamais esqueça de chamar todos para as reuniões de planejamento e retrospectiva da iteração. E, se possível, fuja ao máximo de conversas via MSN, email e afins.

4.1) Ainda sobre a comunicação, tente acabar com o “waterfall” da comunicação. Ou seja, para um programador tirar uma dúvida sobre um pedido do cliente, ele tem que falar com o gerente, que tem que falar com o executivo que fala com o cliente. E depois a mensagem volta por todo esse processo. Qual o problema de aproximar o cliente da sua equipe? Quanto tempo se economiza com isso? E o sentimento de responsabilidade, será que não cresce?

5) Atrasos e falta de testes. Ora, essa é fácil: tente criar a cultura em seus desenvolvedores (e até mesmo designers, arquitetos, executivos e planejadores) de que teste é algo importante. É constrangedor enviar ao cliente algum projeto e receber um feedback de que ele tentou clicar em determinada seção e deu um erro “#495 no stack of mySql and goddamn mothafucka found”. Mais constrangedor ainda é corrigir isso e gerar outros erros. Acredito que na maioria dos websites é inútil utilizar uma abordagem do tipo TDD (test driven development). Seria tentar utilizar uma prática excelente em algo que não necessita de tanto. Mas e se fizer parte do planejamento das seções, durante as iterações, a preocupação com os testes? Discutir quais são os usuários do site, quais são os caminhos a serem percorridos, que dados no manager normalmente dão mais erros e necessitam de uma atenção especial, enfim. Não deixar para testar apenas no fim, mas durante todo o processo. E discutir entre a equipe sempre, sobre isso.

Duas sugestões de aplicação de SCRUM

Antes de mais nada, faço coro ao que li em uma apresentação sobre SCRUM:

“Dentro da sua realidade, aplique o SCRUM como ele é por três iterações. Só então inspecione e adapte.”

Uau, é algo tão óbvio! Mas agora pergunte-se: quantas pessoas que você conhece que ao se deparem com o SCRUM, a primeira coisa que fizeram foi pensar em como adaptá-lo a realidade da empresa? Veja, a pessoa nem aplicou o SCRUM e já pensa em adaptá-lo! Com base no que? Quais feedbacks ele teve para identificar uma mudança?

Logo, minha primeira idéia é exatamente essa: aplique o SCRUM como ele é na sua empresa. Sofra bastante. Veja o que dá errado e o que dá certo. Discuta com sua equipe e só então, após três iterações, inicie a adaptação à sua realidade.

Eu sugeriria duas abordagens:

1) Utilizar iterações e entregar seções a cada sprint. Esta é a adaptação mais óbvia. Ao invés de releases, você entrega seções do website, já prontas. Wireframe, layout, programação front-end e back-end. Utilize a primeira sprint (sprint zero) para focar na parte conceitual do website. Crie o product backlog, priorize e tente chegar a uma linha de arquitetura e layout para ser aprovado ao cliente. A partir disso, no sprint 1, comece a trabalhar arquitetura, layout e programação em cada uma das seções selecionadas. Isso fará com que a equipe trabalhe de fato em conjunto.

E o valor para o cliente? De fato, como eu já havia discutido no outro artigo, é estranho fazer um website e entregar partes para o cliente. Sabemos que o site só irá para o ar quando tudo estiver pronto! Porém, essa abordagem facilita a aproximação com o cliente. Obtem-se feedbacks mais rápidos o que facilita a mudança de rumo, caso seja necessário. E creio que o tempo de desenvolvimento será muito menor, também.

2) Manter a proposta waterfall, mas aproximando o cliente. O que significa isso? Seguir usando a abordagem waterfall onde temos as fases de arquitetura, design, programação. Só que em cada uma dessas fases, criar iterações para entregar algo ao cliente e obter um feedback.  É uma abordagem que eu considero perigosa, pois pode facilitar as velhas práticas mencionadas anteriormente. Porém, pode ser uma forma de ser agile, sem criar uma mudança radical no ambiente.

Notem que em ambas abordagens o que realmente muda é a aproximação do cliente. É importante que a gente perceba que o cliente TEM responsabilidade no projeto. Não dá para deixá-lo acomodado no sentido de “ok, eu pago e vocês fazem e depois me mostram”. Forcem um feedback constante por parte dele.

Em ambas as situações, o gerente de projeto pode fazer o papel de Scrum Master. E o executivo de contas, de Product Owner. Eu diria até que nessa realidade de agências, os papéis do SCRUM são as coisas mais fáceis de identificar…

Concluindo

Criatividade e agilidade podem trabalhar juntos. Processos ágeis não funcionam só porque estão mais alinhados com a realidade moderna de gestão. Funcionam porque focam nos quatro pilares modernos de gestão :) Preciso lembrar? Pessoas e comunicação, produto entregue e funcional, reação à mudanças e colaboração do cliente.

Os processos ágeis se adaptam em várias empresas de diversos tipos de natureza de serviços. Exatamente por partirem dessa premissa de que precisamos inspecionar o que fazemos, adaptar e melhorar sempre. Esqueça um pouco os termos “processo” e “metodologia”. Pense mais em como satisfazer o seu cliente, garantir qualidade e um excelente ambiente de trabalho.



6 Comentários para “Aplicando métodos ágeis além do software (II)”

  1. Sou arquiteto de informação e já trabalhei em algumas empresas grandes TI e vi diversas coisas acontecerem, por isso discordo em diversas coisas aqui. Acho que o Agile é muito mal interpretado no Brasil. Acho até um erro comum em TI pegar modelos criados lá fora e interpretar conforme o modelo mental brasileiro.

    Concordo que comunicação é importante e que grupos interdisciplinares trabalhando ao mesmo tempo agiliza o processo, entretanto o que vejo é uma falta de documentação lida por todos e aprovada pelo cliente sobre o modelo de negócio, o que entrará nos sistemas/websites, como será a movimentação de dados (entre páginas, entre seções, entre tipos de usuários, etc.), que informações são necessárias em cada seção, etc.

    Isto mostra uma falta de planejamento e não um método “agile”. Se as decisões de escopo são criadas durante o processo, refactorying irão acontecer toda hora. Já vi projetos grandes de 01 ano durarem 02 anos por que os líderes achavam que agile era não gastar um mês com todos os envolvidos, só em planejamento.

    O caso dos wireframes e arquitetura por exemplo é um problema do arquiteto de informação. É trabalho deste tornar a informação compreensível para todos, inclusive o cliente. Se o trabalho é algo “interno” e pessoal demais ao conhecimento do profissional, então o trabalho foi meramente conceitual, um pouco acadêmico talvez. O bom profissional fará uma arquitetura e wireframes que o cliente entende e pode discutir.

  2. flaviosteffens diz:

    Grande, Xandre.

    Obrigado pelo seu comentário.

    Tu fechaste em tudo comigo. Só parece que não entendeste o que eu quis dizer com “trabalho interno”.

    Uma wireframe apresentada a um cliente é algo sem valor, concordas? Tu, se fosse leigo na área web, qual seria a tua reação ao visualizar uma wireframe que só marca posições e conteúdo? Com certeza seria algo como “Hmm, ok. ACHO que é isso”. Compare isso com a reação de uma pessoa a ver um layout pronto.

    Nessa área tem muita subjetividade. Portanto VALOR para o cliente tem que ser algo que gere um feedback consistente, que ele possa se identificar. É o mesmo caso de alguém levar um documento com casos de uso para um cliente…

    Onde eu trabalhei eu posso dizer sem medo nenhum que os arquitetos de informação foram essenciais para projetos, especialmente os mais complexos (como e-commerce). Foram os arquitetos que levantarem questões até então tidas como sem necessidade. E são os arquitetos que são os mais elegíveis a fazer essa interface entre conceitual e desenvolvimento.

    Eu só não consigo concordar com a apresentação de um wireframe para o cliente. Pelo menos nas minhas experiências isso não foi tão útil, salvo poucas exceções.

    Grande abraço

  3. Eu posso te dizer que tivemos experiência aqui com uma grande operadora de celular e uma grande editora (fica na imaginação) e encontramos uma forma em que todos compreendem e usam o wireframe, mesmo os leigos. O nosso wireframe é auto-explicativo, justamente para que o leigo ententa. Se os arquitetos não conseguem dar esta percepção ao cliente, acho uma falha do próprio arquiteto.

  4. Thiago diz:

    Oi Flávio, Xandre,

    Gostei muito de ter lido esses posts, pois nunca tinha encontrado uma opinião sobre SCRUM em agências.

    Eu concordo com o Xandre sobre a apresentação do wire ao cliente e acho se bem trabalhado, o cliente entende sim, porém, ele só vai ficar satisfeito qdo ver o layout e o conteúdo, por isso acho que o wire é parte do processo de desenvolvimento, sozinho não gera valor algum.

    Onde trabalho, a proposta fechada com o cliente é uma entrada para o esqueleto então qdo o cliente vê o wire e compara com a proposta ele consegue entender o que está rolando e nesse momento pede mudanças e aprova em seguida, dessa forma, os designers e os programadores fazem exatamente o que está nesse documento e se no final o cliente pede uma mudança paga por isso (isso se o pessoal do comercial quiser assim)!

    Sobre equipes trabalhando juntas durante o desenvolvimento, achamos isso desnecessário aqui, pois a equipe se reune no momento da criação da proposta e todos planejam o projeto juntos, quando o cliente aprova, todos já tem o projeto na mente, as vezes acontece alguns desvios, mas conversamos novamente e alinhamos os pontos.

    O trabalho do GP aqui então é controlar as entregas, escopo (pouco já que o projeto está sempre claro), custo, qualidade e em alguns casos contratações.

    Sobre os testes, isso é um problema mesmo, quando atrasa é a primeira coisa que fica de fora. Eu acho que dependendo da linguagem usada fica muito difícil testar a cada trecho desenvolvido (iterações), já que ao mesmo tempo q vc cria o banco faz a página e as classes, por isso deixamos tudo pro fim mesmo. O site passa por um teste do gerente de TI, depois de layout e conteúdo.

    Pelo o que vejo aqui, usamos o mesmo processo que muitas agências e funciona bem e como a equipe é antiga não tem tantos problemas.

    Bom, espero ter contribuído com a discussão!

    Abs!

  5. Obrigado pelos comentários, pessoal. Como eu disse, esses dois artigos são com base na minha experiência e visão no período em que trabalhei numa agência. Com certeza vocês poderão ter outra visão, discordar e concordar.

    E isso é ótimo para a discussão, pois enriquece bastante. Tomara que mais pessoas postem aqui na mesma qualidade que vocês.

    Lembrem que o agile tem em um dos seus pilares o “inspect & adapt”. Portanto, não preciasmos ter verdades absolutas :)

    Um grande abraço

  6. Recomendei seus artigos para Agencias digitais aqui em Cascavel. Muito bom!!! Eu já montei 2 agências (2003 e 2006). Se tivesse tido contato com métodos ágeis neste período não tinha quebrado as duas. :\ Obrigado!!

Comentar