Agile Software Deployment?
A melhor coisa sobre meu trabalho atual é que, como consultores, tentamos sempre pensar fora da caixa. Isso não é fácil numa consultoria, você pode imaginar, já que o mercado tende à empresas de três letrinhas que não se interessam tanto em otimizar ou melhorar e sim em cobrar por hora.
Um desses momentos recentes me fez passar por algo que eu nunca havia visto na pratica: como fazer deployment (instalação) e administração de software de maneira ágil?
O cliente em questão possui times ágeis em diversos segmentos há alguns anos. Durante o andamento de um projeto enorme surgiram algumas dificuldades em gerenciar ambientes e versões do software. Apesar de toda a agilidade os testadores ainda precisam que versões específicas, com bases de dados específicas, estejam instaladas em ambientes para homologar o sistema. Para piorar mesmo os desenvolvedores precisam ter uma instância de uma search engine (algo como o Lucene) e popular esta engine para que seja usável demora por volta de 10 horas.
Era preciso controlar qual desenvolvedor possui acesso à qual instalação da search engine e quais as versões instaladas em quais ambientes. No passado já ocorreu algumas vezes de um deployment para QA demorar mais que o esperado pela confusão generalizada de ambientes e isso atrasar o release para produção em uma semana.
A primeira proposta que eles tiveram foi clássica: vamos automatizar tudo. Construir um mega-sistema que controle o que está instalado onde, avise por email os responsáveis, tenha um controle de workflow, se integre ao sistema de QA, seja parte do IBM Tivoli, faça café… e seja extremamente caro.
Uma outra proposta surgiu do “grupo de governança” da empresa: ninguém faz deployment de nada sem ser autorizado. Toda vez que alguém precisa subir algo para QA ou outro ambiente precisa usar o Jira, toda vez que alguém precisar de uma modificação numa instancia da search engine precisa usar o Jira. Todos os pedidos são aprovados pelas pessoas competentes.
Aí começa o trabalho da nossa equipe: como ter o benefício esperado sem ter que vender a empresa pra comprar o sistema ou passar 20% do tempo preenchendo formulários?
O início deste trabalho foi feito seis meses atrás e foi parte do meu primeiro projeto aqui. Apos analisarmos o sistemas vimos que ele era estupidamente complexo sem a menor necessidade. O débito técnico foi se acumulando com o passar dos anos e uma coisa simples como instalar um WAR no Tomcat estava levando mais de duas horas, e trabalhando em par! Um dos grandes problemas era que das duas horas uma você gastava andando pelo corredor perguntando para outras pessoas o que fazer no caso X, qual a versão que está no servidor Y, etc.
A primeira coisa a se fazer era resolver o débito técnico. Não há solução que agüente mais de um mês em pé com aquela quantidade de problemas para resolver (incluindo um build que durava mais de quarenta minutos). Para isso os donos do negocio aceitaram alocar 10% dos pontos de uma iteração e, conforme a previsão, a maioria dos problemas graves se solucionou em cinco meses.
Enquanto isso, para amenizar o problema de maneira imediata, nós resolvemos usar um quadro-branco com a configuração dos ambientes. Quando a pressão do release passou o quadro foi para no wiki interno, numa grande tabela que qualquer um editava. Para o problema das instâncias de search engine nós criamos tokens: cada instancia tinha um cartão. Se você precisa de uma instancia você vai até uma parede e pega um cartão, adiciona as configurações daquela instancia na sua máquina e cola o cartão no seu monitor.
Simples e eficiente, a solução do cartão dura até hoje. O mesmo não se pode dizer do wiki. Enquanto o grupo de usuários era pequeno o wiki serviu de maneira ótima, após passarmos de algumas dezenas de pessoas -e diversos sub-projetos e spikes rodando em paralelo- ele se tornou inviável. O problema é que a tabela não comporta mais todos os dados de maneira eficiente e qualquer tentativa de organizar em sub-páginas faz com que as pessoas “esqueçam” de atualizar o wiki. Solução? Seguir o exemplo do que deu certo: cartões!

Acima você pode ver uma das paredes de cartões para nosso controle de mudanças e versões. O cartão rosa, no topo, tem o nome do ambiente. Cada um dos cartões azuis abaixo deste representa um dos componentes, os post-it laranja indicam as versões que foram instaladas. Os amarelos indicam qual instancia da search engine é usada em qual ambiente.
Os outros post-its colados nos cartões são meta-dados, eles indicam, por exemplo, que um serviço está inativo:

Esta solução tem funcionado nos últimos meses de maneira exemplar. Na verdade ela funciona tão bem que o problema agora é convencer os analistas de negocio que o problema do deployment não está solucionado e que eles ainda precisam investir nele.
Uma das conseqüências dessa técnica é que as duas pessoas que ficavam alocadas 100% do tempo gerenciando ambientes estarão em breve voltando a desenvolver as histórias e gerar valor de negócios ao invés de dar suporte aos desenvolvedores.
Muitas vezes você não precisa de milhões de dólares nem de burocracia, basta pensar fora da caixa.

June 22nd, 2008 at 11:33 am
Muito legal, mas imagino que se um desenvolvedor tivesse sugerido aquelas ideais, ela iria ter sido ignorado, isso que é foda.
June 23rd, 2008 at 2:54 am
“Muitas vezes você não precisa de milhões de dólares nem de burocracia, basta pensar fora da caixa.”
- E normalmente você está livre para não ter liberdade de mudar:
“…Isso não é fácil numa consultoria, você pode imaginar, já que o mercado tende à empresas de três letrinhas que não se interessam tanto em otimizar ou melhorar e sim em cobrar por hora.”
Uma das maiores dificuldades que enfrento atualmente é implantar o XP ou qlq metodologia ágil na empresa em que trabalho.
O grande X do problema é a forma como as pessoas pensam…e mais ainda como empresas ‘enterpresey’ pensam …
June 24th, 2008 at 12:08 am
Legal Phillip, uma solução relativamente simples e eficaz para uma equipe relativamente grande!
Só tem um problema:
Daqui a pouco os ativistas neo-ecologicos vão promover uma marcha anti-agile por conta to excesso de uso de papel, post-its, etc :P
June 24th, 2008 at 12:17 pm
Olá Philip,
Excelente essa idéia, acredito que essa idéia de controle por meio de um quadro dê até mesmo alguns artigos científicos, pois ela auxilia de maneira dinâmica a interação da equipe e todos se sentem parte do processo, além da facilidade de atualização.
Onde trabalho adotamos essa técnica para visualizarmos o andamento das tarefas, é o segundo projeto e tem funcionado bem, foi um primeiro passo para adotar técnicas agéis.
June 24th, 2008 at 11:19 pm
Daqui a pouco é só comprar um sistemas de post-its eletronicos para resolver o problema de vez. Se funciona tão bem com papel, por que não a mesma coisa no computador?
June 25th, 2008 at 3:26 am
E como vocês resolveram o problema de sol encoberto??? :)
June 27th, 2008 at 2:02 am
Uma solução super simples, barata e que resolve o problema… Excelente! E obrigado por compartilhar o conhecimento no desenvolvimento!
July 5th, 2008 at 1:02 am
Imagino que se algum acidente ocorra e esse papeis rasguem, percam ou simplesmente se embaralhem você tenha um controle sobre isso. Correto?
Abraços…
July 5th, 2008 at 11:40 am
Oi, Borges,
Se um papel se rasga você escreve outro. Se o Godzilla invade o escritório no meio da noite e rouba nossos cartõs basta rodar um script que loga nas máquinas e descobre as versões. Isso não é um repositório de informações -já que estas informações já estão disoníveis nos servidores e seriam apenas duplicadas- é apenas um Kanban
August 5th, 2008 at 1:22 am
Esse ambiente complexo e burocrático me parece tão…familiar… :D