Torna-te, pois, responsável 4
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
Definitivamente, cremos que empresas modernas devem quebrar
suas
barreiras egocêntricas, fomentar a opinião
crítica de sua equipe,
digeri-las e agir de acordo. Como dizem no mundo do Software Livre,
nenhuma idéia é melhor que a idéia de
todos nós juntos. Estamos
falando dos princípios da Web 2.0,
onde a empresa deixa de ser o núcleo emanador de verdades e
torna-se a infra-estrutura
viabilizadora do
desenvolvimento de sua comunidade.
Transparência vs Compromisso
Numa empresa 2.0 (por mais que não tenham ainda formalizado
este conceito), a gestão estratégica do
negócio recebe influências diretas de seu
nível operacional. Democracia a parte, não
é novidade o incômodo trazido pelo modelo.
Incômodo ainda maior, quando o bombardeio de
críticas é acompanhado de descompromisso. Afinal,
nossa cultura é mestre em seu senso crítico
evasivo.
Mas não é nisso que o pensamento
2.0 acredita. O Scrum,
representante deste movimento, ilustra muito bem a
situação com a
estória do porco e da galinha.
Não queremos crítica por crítica.
Queremos crítica construtiva, preferencialmente de pessoas
devidamente compromissadas com seus resultados. O poder de voz
não é gratuito. Grande carga de responsabilidade
o acompanha.
O que faz todo o modelo tender ao colapso é o descompromisso
dos participantes. Como galinhas, muitos querem se envolver na
discussão, julgando e criticando, mas poucos
estão realmente dispostos às últimas
consequências de seus atos. Sendo desta forma, não
se atinge um equilíbrio na balança da
discussão vs ação. Empresas modernas
precisam muito mais de gente que faz do que de gente que fala.

Discussão vs
Ação
Passei muitos anos de minha vida em busca de idéias brilhantes e crente em sua escassez. De uns tempos pra cá, entretanto, percebi que o que nos falta não são ieias, mas capacidade de realização.
Quando se abre as portas da gestão estratégica
para a discussão coletiva, o que se busca, nas entrelinhas,
é maior apoio para a construção de um
mundo novo. Sim, a opinião coletiva é importante
mas, muito mais relevante é o apoio braçal para
realização de parte do que fora discutido.
Então, críticas sem compromisso em nada
contribuem. Não adianta 20 pessoas aparecerem com mil
pedras e sugestões de melhorias e pensarem que 3 colegas
serão suficientes para
implementá-las. Queremos gente que compre a briga conosco e
que lute ao nosso lado. Esta é a contrapartida ao direito de
voz.
Não é raro ouvir que “aqui nesta empresa, muito
se fala, mas pouco se faz” sem que o interlocutor, inadvertidamente, se
dê conta que grande parcela do “muito se fala” e da
responsabilidade pelo “pouco se faz” está em seu poder.
Então, antes de muito propor, verifique sua capacidade de
contribuição com a proposta. E, antes
de criticar a pouca realização, examine sua
consciência e confirme sua isenção de
culpa. Se sua incapacidade de contribuição em
ideias está limitada por questão financeiras ou
sociais, busque-as, viabilize-as. Se sua
contribuição com planos do passado não
tem sido expressiva, reinvente-se. Se todo o fardo do desenvolvimento
corporativo estiver sobre seus ombros, reivindique! Tudo isso faz parte
das responsabilidades cotidianas do chamado “gestor” que agora, quer
compartilhá-las com todos.
Há aqueles que acreditem que novas ideias ou modelos de
trabalhos só serão implementados se promulgados
pela alta gestão do negócio. Nada mais 1.0 a
dizer. Esses ainda acreditam no poder
e certamente estão
alheios aos novos valores da adminsitração
moderna que define a autoridade
e a liderança
como palavras
de ordem. A gestão moderna não é uma
atividade resumida ao preenchimento de planilhas e acompanhamento de
gráficos. É a arte da
socialização, da
articulação política e da
resolução de conflitos.
Portanto, pare de culpar o mundo pelas suas mazelas. Culpe a si mesmo. Busque no alto escalão apoio para a eliminação de obstáculos, e não decretos imperativos de transformação. Faça amigos e influencie pessoas. Desenvolva sua capacidade de convencimento. Seja líder. Seja um empreendedor.

“Tu te tornas eternamente responsável
por aquilo que cativas.”
Nota pra mim mesmo: discutir no próximo post como incentivar a Aptitude 2.0.
[]s
Retrospectiva da Turma 4 do minicurso de XP

Não é de hoje que eu estudo sobre metodologias
ágeis, e o curso pra mim serviu como uma forma de aparar
algumas arestas e experimentar de
fato um ambiente Ágil na prática. A
didática utilizada é algo completamente diferente
do normal, pelo menos dos cursos que eu já participei, o que
na minha opinião foi um ponto muito a favor.
Início do Curso:
O curso é prático mesmo. O que faz com que os
participantes mergulhem num dia de trabalho XP.
Após uma rápida (muito rápida!)
apresentação dos conceitos, valores,
práticas e princípios de XP, entramos de
cabeça no planejamento das atividades e
iterações.
Planejamento
das Iterações:
Achei interessante o fato do Bruno (Instrutor) conduzir a
reunião de planejamento somente
“ditando” as regras (alertando o grupo sobre o
tempo máximo da iteração, ajudando na
quebra das histórias, etc) e não conduzindo os
alunos pela mão.
A turma foi obrigada a se entender quanto aos prazos para realizar as
atividades do projeto, e nesse ponto conseguimos ver o quanto
é difícil estimar prazos. O problema da
estimativa é “resolvido” nas retrospectivas, onde podemos
reavaliar e melhorar a nossa estimativa tendo a experiência
da iteração anterior. O comprometimento com os
prazos também é muito mais intenso quando o
próprio time é quem os define, diferente das
abordagens comando-controle.
Quebrar as histórias em atividades e tarefas menores, ajuda
a enxergar o problema de uma forma mais realista, e com isso podemos
estimar melhor e trabalhar mais focado em cada parte do projeto. Tanto
gerenciar quanto trabalhar dessa forma é muito mais
viável.
Mão
na Massa:
Depois do planejamento inicial, o pessoal da Sea iniciou o
desenvolvimento das funcionalidades programando para que a turma
pudesse começar a se familiarizar com o jeitão XP
de fazer as coisas. A programação foi sempre
realizada em pares e usando as técnicas de TDD. Depois da
primeira iteração os alunos começaram
a colocar a mão na massa, também programando em
pares usando TDD. Nesse momento percebemos que na prática, a
teoria é outra!
TDD:
Sem dúvida o ponto alto do curso foi a
utilização das Técnicas de TDD. Logo
de início, pensar no teste antes de programar era
difícil, e por isso muitas vezes o monitor nos chamava a
atenção: “Faz o teste
primeiro!”. Mas depois, em pouco tempo, já
estávamos praticamente “dependentes” de
criar o teste antes de programar, pelo menos no meu grupo foi assim.
Não pensávamos mais na funcionalidade sem antes
pensar no teste. Com isso ganhamos em foco,
comunicação, simplicidade e segurança.
Não chegamos a refatorar nada, em
função do tamanho do projeto e do pouco tempo que
tínhamos, mas certamente com a extensa cobertura de testes
(acho que uns 26 testes para umas 8 funcionalidades, pelo que eu me
lembro) qualquer mudança poderia ser
feita sem as tradicionais dores de cabeça e, sem precisar
“debugar” o código para entender o que
estava acontecendo, bastava olhar a suite de testes.
Ao final do projeto, com todos os testes automatizados que
tínhamos, estávamos com uma excelente
documentação dos requisitos (atual e funcional!),
com uma ótima rastreabilidade das funcionalidades e
dependências de código, além de uma
bruta segurança para fazer qualquer
modificação necessária, sem medo de
quebrar as funcionalidades existentes. Tudo isso graças aos
nossos Testes Automatizados, tudo isso graças ao TDD.
Programação
em Pares:
Ver o pessoal da Sea programando em pares é muito bacana. A
sintonia dos pares, a troca de experiências, a
comunicação, tudo parece muito
necessário no contexto XP. Mas confesso que eu
não sou muito adepto a essa prática, prefiro uma
sessão de programação pareada mais
específica, para um problema ou outro, ou até
mesmo escrever alguns testes ou métodos em pares. Mas sempre
programar em pares eu não vejo com muitos bons olhos e
não tive tão boas experiências com essa
prática. Mas tenho que admitir que existem muitos
benefícios nela.
Retrospectiva:
Sempre depois de cada iteração nós
realizávamos uma retrospectiva: O que fizemos, o que
pretendemos fazer, e onde precisamos melhor para atingir os nossos
objetivos. Nessas rertrospectivas tínhamos a chance de rever
o nosso planejamento inicial e adequá-lo a nossa real
necessidade naquele momento. Um ponto muito interessante das
retrospectivas, era quando o Time sabia que não conseguiria
entregar toda a funcionalidade prometida na release, e tinha que
negociar com o cliente o que era mais importante, qual era a
funcionalidade que agregava mais valor ao cliente, pois era essa que
receberia o foco nas
próximas iterações. Esse
exercício mostrou o quanto a figura do “cliente presente”
é importante para o sucesso do projeto.
Documentação? Modelos?
Normalmente eu sempre procuro ter um diagrama de classes à
mão para programar. E antes de programar eu gosto de pensar
no diagrama de classes. No nosso projeto não criamos e nem
usamos qualquer diagrama UML, e sabe que falta eles fizeram? Nenhuma!
Fui pensar nisso depois que cheguei em casa e analisei alguns pontos do
curso para escrever sobre ele. E eu creio que essa total
irrelevância dos diagramas deve-se ao TDD. Criando os testes
e modelando via TDD acabamos por saber exatamente o que precisamos
fazer a cada passo, e com isso, os nossos métodos e classes
vão nascendo de acordo com a necessidade real e
momentâneas do projeto. Nada de desperdício!
Lógico que em nenhum momento foi falado que diagramas e
modelos não são necessários nem
importantes, mas o recado é: fazer quando
necessário, fazer para auxiliar na
comunicação da equipe e não fazer
apenas por fazer.
O
Pessoal da Sea:
Eu não participei de toda a
programação, a turma ficou muito grande (um ponto
negativo mas sem culpa do pessoal da SEA) e eu dei espaço
para outro colega programar. Aproveitei e fui trocar idéias
com o Willi, Bruno e Carol. Todos são muito
acessíveis, humildes em escutar as nossas
opiniões e bastante generosos ao explicar muito de como eles
pensam e agem no dia-a-dia dos seus projetos. A troca de
experiências é sem dúvida um outro
ponto fortíssimo do curso.
Minha Conclusão:
O curso foi excelente, mas não é pra qualquer um.
Eu acho - opinião exclusivamente minha - que nem todos
poderão desfrutar dos ensinamentos do curso, porque ele
é bem diferente de tudo que normalmente estamos acostumados
(além do tema também ser bem diferente do
tradicional). Para aproveitar o curso eu acredito ser extremamente
necessário um conhecimento, e até mesmo uma
simpatia prévia, de métodos ágeis. Em
alguns pontos a ficha demora a cair, e só cai realmente se
você pensar no que vivenciou e analisar de uma forma
“mente aberta”, tudo o que foi visto e praticado no
curso.
Pra mim, o curso serviu para reforçar todas as (boas)
idéias e impressões que eu já tinha
sobre as metodologias ágeis. Serviu também para
que eu conhecesse na prática todo o poder de TDD e de
iterações curtas, aliadas com um planejamento que
nasce de dentro para fora (da equipe para o Gerente). Uma mensagem bem
forte também que é passada durante todo o
trabalho, é que as Metodologias Ágeis devem
sempre ser adaptadas a sua realidade, então, não
espere mágica!
Parabéns e sucesso ao pessoal da SEA!
Maré de Agilidade e Oxente Rails
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
Dois eventos de singular relevância estão para acontecer entre os dias 6 e 10/08.

Serão 3 dias de mini-cursos a preço de banana e um dia de palestras com figurinhas conhecidas da comunidade ágil. Check it out:
| Mini-Cursos | 06, 07 e 10/08 |
| Gerenciamento Ágil de Projetos com Scrum | Manoel Pimentel |
| eXtreme Programming (XP) na Prática | Renato Willi e Bruno Pedroso |
| Desenvolvimento web ágil com RubyOnRails | Alexandre Gomes |
| Gestão Ágil de Requisitos | Manoel Pimentel |
| Teste de aplicações Rails | Alexandre Gomes |
| Planejamento e estimativas em projetos ágeis | Fabiano Milani |
| Palestras | 08/08 |
| Manifesto 2.0 | Alexandre Gomes |
| Gestão Lean para desenvolvimento de Software | Manoel Pimentel |
| A Agilidade está no ar | Renato Willi e Bruno Pedroso |
| “Sou ágil, logo não planejo!” | Fabiano Milani |
| Governança no desenvolvimento ágil | Clavius Tales |
| Conhecendo o desenvolvimento guiado a testes e a comportamento(TDD e BDD) | Christiano Milfont |
| Onde mora a produtividade do Ruby on Rails? | Fabio Kung |
| Painel com todos os palestrantes: Agile na Real - Interoperabilidade, Mix e Adaptações | @ALL |
E é sempre bom lembrar que o Maré é um evento intinerante, da comunidade para a comunidade. Escreva para maredeagilidade no GMail e veja como levá-lo à sua cidade.

O Oxente Rails vai acontecer em Natal, RN, nos dias 07 e 08 de agosto. Na programação palestras sobre Ruby on Rails, Desenvolvimento Ágil e diversos outros temas – interessantes pra quem ainda não conhece e pra quem já trabalha na área. Voici:
| Palestras | 07
e 08/08 |
| Ruby on Rails: Ecossistema e Comunidade | Fábio Akita |
| Desenvolvimento Ágil | Tapajós e Sylvestre Mergulhão |
| Design de Interface para Programadores | Juarez Filho |
| BDD com Rails | Cauê Guerra |
| Deploy de Aplicações Rails | Dante Regis |
| A ciência por trás do Ruby | Carlos Brando |
| Pragmatic Thinking and Learning | Andy Hunt |
| Easy Rails: Ruby on Rails fácil no Windows e Linux | Régis Pires |
| Case de sucesso – Adotando Ruby on Rails no Tribunal de Justiça de Sergipe | Dante Régis |
| Scaling Rails: Redeparede.com servindo 7,5 milhões por mês | Tapajós e Sylvestre Mergulhão |
| Empreendedorismo e Rails em Natal | Paulo Fagiani e David William |
| The Hashrocket Way | Obie Fernandez |
Se você é ou quer ser um Railer, não perca esta chance de unir o útil (Rails) ao agradável (Natal).

É provável que alguns estejam a esta altura do post imaginando de quem foi a brilhante idéia de fazer, na mesma semana, dois eventos tão interessantes e tão relacionados entre si. E, o pior, com empresas patrocinantes e apoiadoras em comum! Bem, realmente, foi uma lástima, mas explico.
A movimentação do Oxente Rails começou um pouco antes dos preparativos pro Maré de Fortaleza e, na época, oferecemos ajuda para criação da marca e confecção do site, que foi prontamente aceita pelo Elomar e companhia. Algum tempo depois, a turma do XPCE se empolgou na realização do Maré de Agilidade e, em parceria com o JavaBahia e a Visão Ágil, iniciamos nosso apoio, contribuindo com experiências das edições anteriores.
Assim, a organização de ambos eventos correram de forma independente e surpreendentemente rápida ao ponto de que, quando alguém se tocou da possibilidade de conflito entre as iniciativas, já era tarde demais. Os locais de realização já haviam sido (ao custo de muito suor) reservados e a maior parte dos palestrantes já havia sido contactada. No caso específico do Maré, além do Oxente Rails, tínhamos até outras justificativas para mudança da data (como uma indisponibilidade na agenda do Alexandre Magno), mas ainda assim não foi possível :-(
Resta-nos então lamentar profundamente. Os eventos Maré de Agilidade e Oxente Rails são eventos amigos que se complementam totalmente. Seria um baita marco para o Nordeste se tivéssemos nos organizado melhor a fim de realizá-los em sequência. Mas enfim, ç’arrive. O Paulo Fagiani, um dos organizadores do Oxente é colega antigo do mundo Java e isso só piora as coisas. Mas uma razão pra não haver desculpas. Foi uma baita falta de comunicação *mesmo*. Talvez seja a hora de revermos alguns valores do XP… Nossas sinceras desculpas, comunidade.
[]s
1 Ano de Scrum e XP direto das Trincheiras! 4

Em pouco mais de um mês e com a ajuda de um monte de gente, o
livro foi traduzido, e seu lançamento
foi dia primeiro de novembro, no lançamento
da InfoQ Brasil.
Ao longo desse ano recebemos grandes presentes por esse trabalho,
como ter conhecido pessoalmente quem ajudou na
tradução e os depoimentos de quem foi
“ajudado” de alguma forma por ele.
De lá pra cá muita coisa aconteceu:
- Participamos de diversos eventos, como Encontro Ágil, Falando em Agile, Scrum Gathering Brazil, Agile Weekend, etc;
- Até criamos um evento, o Maré de Agilidade, que está indo para a 3a edição e tem perspectivas de outras mais;
- Fizemos diversas apresentações, para empresas e vários órgãos do governo;
- Começamos 2 Dojos;
- Criamos um curso, que está na 4a turma (com lista de espera para pelo menos mais 3!);
- Aparecemos em revista;
- Entre outras coisas.
Enfim, temos visto que a comunidade ágil tem crescido e
ganhado força. E somos felizes por contribuirmos e fazermos
parte dela.
Parabéns! E desejo que tenhamos muitos anos ainda melhores e
mais produtivos que esse!

Selenium e XPath 6
Quem já acompanha o blog deve ter percebido que usamos o Selenium. Primariamente, terminávamos versões preliminares da interface e usávamos o Selenium IDE para gerar scripts de testes.
Todavia, essa abordagem tinha complicações. Mudanças de design quebravam os testes. Para repará-los tínhamos de percorrer todos os caminhos através do Selenium IDE. Isso tomava tanto tempo que os testes de Selenium acabaram abandonados.
Depois de surpresas com algumas telas, retomamos os testes. Entretanto, estamos usando outra abordagem. Para compreendê-la, é preciso conhecer XPath.
XPath
XPath é uma pequena linguagem para selecionar elementos, atributos, textos etc. de um documento XML. Considere, por exemplo, o documento XML abaixo:
<library>
<book id="war-peace">
<title>War and Peace</title>
<edition>1</edition>
<author>Leon Tolstoi</author>
</book>
<book id="devil-backcountry">
<title>The Devil Pays in the Backcountry</title>
<edition>2</edition>
<author>Guimarães Rosa</author>
</book>
<book id="art1">
<title>The Art of Computer Programming</title>
<edition>1</edition>
<volume>1</volume>
<author>Donald Knuth</author>
</book>
<book id="mythical">
<title>The Mythical Man-month</title>
<edition>2</edition>
<author>Fred Brooks</author>
</book>
</library>
A expressão XPath /library/book[2] retorna o elemento
<book id="devil-backcountry">
<title>The Devil Pays in the Backcountry</title>
<edition>2</edition>
<author>Guimarães Rosa</author>
</book>
Já expressão /library/book[@id='mythical'] retorna o elemento:
<book id="mythical">
<title>The Mythical Man-month</title>
<edition>2</edition>
<author>Fred Brooks</author>
</book>
e a expressão /library/book[@id='mythical']/author/text() retorna
fred Brooks
Esses exemplos são só para instigar sua curiosidade. Para aprender mais sobre XPath, recomendamos o tutorial da W3Schools. O add-on XPath Checker do Firefox também é uma mão na roda. Se você utiliza Linux, ferramentas como o xgrep e xmlstarlet podem ajudar nos estudos e permitir scripts sofisticados.
Dando Nome aos Bois
Usando o Selenium IDE, nossos scripts pareciam com isso:
selenium.open("/admin/texts");
selenium.type("article_title", "Selenium e XPath");
selenium.click("Salvar");
selenium.waitForPageToLoad("30000");
selenium.click("Artigos");
selenium.waitForPageToLoad("30000");
selenium.click("link=Retornar");
assertFalse(selenium.isTextPresent("Erro"));
Porém, o cliente pedia para mudar coisas. “Artigos” passariam a ser ”posts”, “Retornar” viraria “Voltar”, e “Salvar” seria agora “Gravar”. O link inicial não seria mais /admin/texts, mas sim /administracao/conteudo. Haveria um texto de ajuda no final, explicando que “Erros podem ser problemas de login” - o que faria com que o texto “Erro” estivesse presente em todas as páginas.
Para evitar eses problemas, demos nomes (ou ids) a todos os links, input, div, td etc. Também passamos a utilizar menos o Selenium IDE, e a digitar caminhos XPath explícitos. Por exemplo, se o link referenciado por link=Artigos fosse gerado por:
<a href="artigos/listar.html">Artigos</a>
nós adicionaríamos um id ao link
<a id="listarArtigos" href="artigos/listar.html">Artigos</a>
e, no lugar de
selenium.click("link=Artigos");
utilizamos
selenium.click("//a[@id='listarArtigos']");
//a[@id='listar_artigos'] é o caminho XPath para o link, que agora é independente do texto apresentado e inequivocamente encontrável. O mesmo vale para os campos de formulários. Por exemplo, o botão submit referenciardo por Salvar seria algo como
<input type="submit" value="Salvar" />
Depois da “reforma”, nós adicionamos um atributo name ao submit:
<input name="salvarArtigo" type="submit" value="Salvar" />
Agora, poderemos referenciá-lo através do nome, que é independente da apresentação:
selenium.click("//input[@name='salvarArtigos']");
Segundo o novo padrão, nosso teste será algo como
selenium.open("/admin/texts");
selenium.type("//input[@name='artigo.titulo']", "Selenium e XPath");
selenium.click("//input[@name='salvarArtigos']");
selenium.waitForPageToLoad("30000");
selenium.click("//a[@id='listarArtigos']");
selenium.waitForPageToLoad("30000");
selenium.click("//a[@id='retornar']");
assertTrue(selenium.isTextPresent("//div[@id='Erro']"));
Ao final, note como o selenium.isTextPresent() também verifica a presença de um elemento, não de um texto.
Esse processo, embora exija um pouco mais de trabalho, permite gerar códigos mais robustos, fáceis de manter e reutilizáveis.
Turma 4: Minicurso XP na Prática 9
Iremos realizar no próximo dia 18 de Julho,
sábado, a quarta turma do nosso minicurso “XP
na Prática”.
Pra quem não conhece nem ouviu falar, o curso tem
duração de 8 horas, de 8:30 a 18:30 (somos
rigorosos no horário de início - senão
não dá tempo!) e é estruturado da
seguinte forma: Aproximadamente 1 hora de teoria e 7 de
prática (vocês não vão
dormir e vão ficar ligados o tempo todo - podem acreditar,
é mão na massa!).
Vejam os posts e comentários dos participantes nas turmas
anteriores: 1a
turma , resultado
da 1a turma, 2a
turma, 3a
turma.
A idéia continua sendo conduzir duas
iterações, envolvendo levantamento das
histórias, planejamento, programação,
refactoring, teste, retrospectiva, etc. Iremos envolver 4
pessoas na realização do curso: um coach (Bruno
Pedroso), um product-owner (eu) e dois monitores (Túlio e
Carol) para ajudar o pessoal com TDD.
Este minicurso nasceu com idéia de arrecadar fundos para
participarmos de eventos (os Marés de
Agilidade), mas pela
alta demanda, acabou ganhando força e hoje caminha sozinho e
é bem reconhecido pela comunidade.
Os posts dos Marés: 1o
em Brasília, anunciando
Maré Salvador, resultado
do Maré Bahia, anúncio
prévio do Maré Fortaleza.
O valor das inscrições: R$ 155,00. Quem pagar
até o dia 10/07 tem 10% de desconto, e a vaga só é garantida pra quem pagar.
Local: UnB, ICC norte.
Entregaremos certificados e serviremos coffee break.
Reserve logo sua vaga, mandando um email para renato ponto willi arroba
sea tecnologia ponto com ponto br, com o seguinte assunto
“inscrição curso XP”.
Levaremos em conta a ordem de chegada das mensagens, então
apresse-se!
Abraço,
Willi
