Arquivo

Arquivo da Categoria ‘Ferramentas’

Scrum Management: The Brain Dashboard, Part II

4, janeiro, 2010

This post is a follow up to the first post, regarding our dashboard creation, but before digging into the specifics, I would like to a summarize few goals we had in mind when we (as a team) come up with the current solution we use at our daily scrum lives.

First some background: we are a medium size team, composed of six developers working usually in pairs and doing sprints of 2 to 3 weeks on a project that is already in production, most of our stories are about improving the existing code base while adding some new functionality, and our sprints are usually composed of 20 to 30 stories, demanding quite some space on our dashboard.

A recurrent issue was some small bugs popping up during our client demo, giving them a bad impression about the quality of our code while bringing the team moral down.

Based on these we established some few goals to out new dashboard design:

  • More flexibility: writing your name and status on a story/task is not a good idea, since whose working on it can change over time;
  • Focus on people: enforce the team members importance on the project;
  • A dashboard that would breathe quality: more testing and validation;
  • Sense of accomplishment: it should be pretty visible to see when tasks/stories are completed;
  • Pleasant to the eye, after all we will be using it everyday.
  • Support a good amount of stories/tasks to be done and completed;
  • Impose a limit to our WIP (work in progress);

The result is the following design, that according to Eduardo Moreira, resembles the way a brains operates, concentrating the most important things on the core of the dashboard:

The Brain Dashboard

On the top we have all the stories in a flow that goes from:

To Do To Do: At the beginning of the iteration it has the usual 20 to 30 stories ordered by the Product Owner priority. All the impediments are marked with a red flag, and work should not be started until it is unflagged.
WIP Work In Progress: When a team member starts working on a story it should be moved here. This step contains a much smaller space than the To Do and Completed ones, enforcing the team to work on the fewest stories at the same time, preventing too much unfinished work from happening.
To Validate Done and Waiting Validation: After finishing all the tasks on a story it is moved here, where it waits to be validated by another team member whose do not worked on it. After validation, it then must be marked with a Success or Failure tag, the latter requiring a bug task to be created and placed on the Unexpected space (more on that latter).
Validated Completed: With the same space as the To Do, here is where all the completed stories lie, giving the team a good sense of accomplishment.

On the middle we have pictures of all the team members and their name tags to be stick on whatever they are working on (tasks, validation,…):

Pictures

Lastly there is the bottom, with all the tasks split from the stories on our Spring Planing II:

To Do To Do: Not much different from above but divided into two spaces, a tiny one, to hold all the unexpected tasks (such as bugs) which wore produced during this sprint, and a bigger one, containing all the regular open tasks with the same red flags when suited.
WIP Work In Progress: Same rules as the stories, except that here the team member working on a task must mark it with his tag.
Done Done: When a task is completed, it should be placed here. This step was created, to give the visible difference between work in progress and completed.
Reported Reported: Composed of all the completed tasks reported on the daily meetings.

These should cover most of it, but if you have any doubt or tip to help us improve our dashboard don’t hesitate on dropping a comment.

This post can also be found at my personal blog: blog.pirelenito.org

Paulo Ragonha Ferramentas, Metodologia

Amadurecendo o workflow do projeto com práticas do Kanban

18, outubro, 2009

Atualmente, muitas empresas estão adotando metodologias ágeis e em especial o Scrum com o objetivo de melhorar a gestão de seus projetos de software. No inicio, os projetos utilizam um workflow simplificado para sinalizar o andamento da iteração. Esse fluxo normalmente é composto por 3 estados:

  • TO DO: Estórias selecionadas para o backlog da iteração que estão aguardando para serem iniciadas.
  • IN PROGRESS: Estórias em andamento, sendo executadas pelo time no momento.
  • DONE: Estórias prontas para serem entregues.

Segue abaixo um exemplo de um Scrum board com um fluxo simplificado:

1

Com o passar do tempo, surge a necessidade de amadurecer esse workflow, mapeando ações técnicas e de qualidade que reunidas formam o conceito de Definição de Pronto (ou Definition Of Done).

A Definição de Pronto reúne os critérios que o time deve seguir para que uma funcionalidade possa ser realmente considerada pronta, não só técnicamente mas também com qualidade. Essa definição é composta por uma lista de ações como: escrever testes de aceitação, codificar, revisar o código, validar o que foi feito com o product owner, fazer o deploy no servidor de produção ou qualquer outra coisa que precise ser feita para que a funcionalidade possa ser entregue atendendo as necessidades de negócio. Com a evolução do projeto, é importante estar sempre observando e adaptando esses critérios para que eles possam acompanhar a realidade projeto, estando alinhados com as expectativas do cliente.

Os problemas surgem quando algumas ou muitas dessas ações não são executadas corretamente e assim muitas estórias consideradas prontas pela equipe acabam tendo problemas na hora da revisão com o product owner, não sendo aceitas. Um fator que contribui para isso é a utilização de estados nebulosos no workflow do projeto. Decompor o estado “in progress” em estados que representem importantes ações da Definição de Pronto aumenta a visibilidade do time sobre qual etapa do processo está sendo executada e facilita a identificação e remoção de gargalos, aumentando a eficiência do processo.

Segue abaixo um exemplo de Scrum board com um workflow contendo os estados de codificação, revisão de código e deploy :

2

Para manter o fluxo constante, é importante evitar o acumulo excessivo de estórias em cada estado. Estes acumulos criam estoques que diminuem o ritmo e a freqüência de entregas, incentivando um comportamento multitarefa que contribui para um fluxo ineficiente e com desperdícios.

Segue abaixo um exemplo de Scrum board com acumulo de estórias em revisão de código causando a demora do deploy de varias estórias já codificadas:

3

O número de estórias em cada estado é denominado WIP (Work in Progress). Limitar o valor do WIP contribui para impedir a sobrecarga do sistema e faze-lo trabalhar com a sua capacidade real. Assim, as demandas começam a se adequar a capacidade de produção do sistema e não o contrário. Além disso, a ocorrência de impedimentos acaba causando uma interrupção no processo (ou stop the line), afetando o trabalho de toda a equipe e fazendo com que os impedimentos sejam resolvidos rapidamente.

Para entender melhor sobre a dinâmica da teoria das filas que a limitação do WIP proporciona é fundamental acessar uma simulação completa do funcionamento do kanban em: http://blog.crisp.se/henrikkniberg/2009/06/26/1246053060000.html

Segue abaixo um exemplo de Scrum board com limite do WIP em 1 para o estado de codificação, em 1 para o de revisão de código e em 3 para o de deploy. Dessa forma, nunca poderá haver mais de uma estória em codificação, uma estória em revisão de código e três estórias em deploy, aumentando a colaboração da equipe e a utilização de técnicas como o pair programming. Lembrando que esses valores variam dependendo do objetivo e quantidade de pessoas na equipe. A alteração dessas variáveis pode ajustar o processo, afetando a produtividade do sistema.

4

Dessa forma é possível criar um workflow que prioriza a visibilidade do trabalho em execução, evidenciando impedimentos e gargalos, além de manter o sistema estável e constantemente otimizado. Com isso é possível entregar com mais freqüência e com mais qualidade, melhorando a percepção do cliente e criando um ambiente de desenvolvimento melhor para todos.

Segue abaixo alguns links para blogs importantes que falam sobre o assunto:

http://www.limitedwipsociety.org/

http://blog.crisp.se/henrikkniberg/

http://leansoftwareengineering.com/

http://www.alissonvale.com/englishblog/

http://damonpoole.blogspot.com/

Segue também uma lista de ferramentas e padrões utilizados no processo:

  • Value Stream Mapping
  • Visual Management
  • Pull System & Single Piece Flow
  • Limited WIP
  • Buffers & Queue Limits
  • Classes of Service
  • Leveling Work
  • Two tiered Systems (Expand/Collapse)
  • Swimlanes/Expediting
  • Triggers
  • Priority Filters
  • Perpetual Multivote

Rodrigo Branas Ferramentas, Metáforas

Ruby a bola da vez?

6, julho, 2009

Quem acompanha o que acontece no mundo das linguagens de programação, com certeza já ouviu falar de Ruby e não de hoje.

Mas o que essa linguagem realmente tem de especial. Com certeza um post seria pouco para explicar uma linguagem de programação. Além disso, existe um grande número de tutoriais, livros e ebooks que podem dar mais detalhes da linguagem.

Aqui será somente uma breve introdução e um fato importante que podem justificar porque Ruby pode ganhar ainda mais espaço.

Portanto não é a intenção desse post sintaxe, configurações, etc.

Como surgiu?
Ruby surgiu no Japão nos anos 90 e foi desenvolvida por Yukihiro “Matz” Matsumoto.

Matz desejava uma linguagem mais poderosa que Perl e mais orientada a objetos que Python, a partir disso Matz decidiu desenhar a sua própria linguagem de programação.

Um dos conceitos filosóficos de Matz era o de proporcionar ao programador produtividade e diversão ao programar.

Com certeza uma excelente aspecto motivacional, seja para o programador ou para o cliente.
Afinal quem não quer produzir mais em menos tempo e mais feliz?

Influências
É baseada em Perl, Smalltalk, Eiffel, Ada, and Lisp.

Características
Ruby é uma linguagem dinâmica de forma que objetos e classes podem ser alterados em tempo de execução.

Além disso é totalmente orientada a objetos, ou seja, em Ruby tudo é um objeto.

Possui suporte nativo de expressões regulares, sobrecarga de operador e garbage collector.

Isso são somente algumas das características da linguagem que vem sendo muito comentada, não somente pela comunidade Ruby mas também por pessoas influentes da área de desenvolvimento de software.

Recentemente Martin Fowler publicou um artigo descrevendo a experiência da ThoughtWorks com Ruby.

Bom só o fato de saber que Martin Fowler está interessado em Ruby e em Rails já é deveria ser motivo de atenção por parte da comunidade de desenvolvimento de software.

Porém o que realmente chama a atenção são os comentários positivos que Fowler fez em relação a linguagem e ao framework Rails de acordo com utilização de ambos na ThougtWorks.

We have found that Rails makes much of the repetitive part of web application easier and quicker to do - but the more involved stuff remains.
All of these questions sum up into the key question for us: is Ruby (and Rails) a viable platform for us and our clients. The answer thus far is a resounding “yes”.

Segundo Fowler Ruby favorece o desenvolvimento de software utilizando metodologias ágeis:

Ruby also fits in with our preference for using agile software development processes. The agile philosophy is one of rapid feedback by building software and reviewing it regularly with the customer. The more productive an development environment, the more frequently you can review progress, and the better the agile “inspect and adapt” process works.

Vale ressaltar também alguns aspectos sobre a relação de Ruby com produtividade e com os desenvolvedores:

One thing we have seen is that you shouldn’t expect these productivity increases to turn up right away. I’ve heard several times that people were alarmed in early weeks about the slow progress of a new Ruby team - a consequence of what I call the Improvement Ravine. It does take time for a Ruby team to get the hang of how the platform works and during that time they’ll be slower than you expect.

Our experience selling Ruby work is that using a dynamic language like Ruby fits in well with our overall appeal. Our strength is that we hire highly talented people who are difficult to attract to the typical IT organization. Ruby has a philosophy of an environment that gives a talented developer more leverage, rather than trying to protect a less talented developer from errors. An environment like Ruby thus gives our developers more ability to produce their true value.

Somente alguns itens do artigo foram citados, alguns aspectos negativos da linguagem e problemas que a ThoghtWorks teve também estão presentes do artigo original.

Obviamente a leitura do artigo e um estudo maior da linguagem, assim como a  utilização de Ruby e Rails podem dizer se essas ferramentas são adequadadas para o desenvolvimento de uma solução especifíca.

Fontes:
http://en.wikipedia.org/wiki/Ruby_(programming_language)
http://martinfowler.com/articles/rubyAtThoughtWorks.html

Links:
http://www.ruby-lang.org/en/
http://rubyonrails.org/

André Branco Ferramentas

Planning Poker Online!

21, maio, 2009

Com certeza um dos momentos mais interessantes do planejamento é a hora de estimar as estórias! As melhores estimativas surgem quando o escopo da estória é bem discutido entre os membros do time e cada um defende fortemente suas opiniões sobre como alcançar os objetivos.

Ferramentas como o Planning Poker são alternativas muito interessantes para prender a atenção do time e motivar todos a pensarem e participarem ativamente do processo de estimativa de cada estória em vez de aceitar passivamente o que os outros decidirem.

Em http://planningpoker.com/ é possível criar as estórias e adicionar os participantes!

Planning Poker Online!

Planning Poker Online!

O bom e mais ou menos velho baralho sempre terá seu valor, no entanto esse tipo de ferramente pode facilitar e simplificar ainda mais o processo, trazendo mais interatividade, estimulo e união para todo o time!

Rodrigo Branas Comunicação, Ferramentas

Bomba: Oracle compra a Sun

20, abril, 2009
Oracle compra Sun

Oracle compra Sun

Não é de hoje que a Sun está mal das pernas. A ação que valia $25 há 2 anos, chegou menos de $3 antes do início das negociações com a IBM. Todas as empresas de TI deste porte sofreram com a crise, mas em pouco casos a desvalorização ultrapassou 50%. Não é por acaso que o valor de mercado da Sun parece não refletir seu tamanho. A própria Oracle comprou a PeopleSoft por $10 bi, a BEA por $8,5 bi e agora compra a Sun por “apenas” $7 bi.

Consequências

E agora, o que será do Java e outros produtos da Sun?

“The acquisition of Sun transforms the IT industry, combining best-in-class enterprise software and mission-critical computing systems”, Larry Ellison, CEO da Oracle + Sun.

Java é tão importante para a Oracle que já havia se tornado sua tecnologia padrão para sua estratégia de midleware (Oracle Fusion Middleware). A importância também é demonstrada na posição oficial da Oracle, de continuar investindo e inovando em Java:

“Java is one of the computer industry’s best known brands and most widely deployed technologies. Oracle Fusion Middleware is built on top of Sun’s Java language and software. Oracle can now ensure continued innovation and investment in Java technology for the benefit of customers and the Java community”.

Apesar dos aparentes benefícios, pelo simples fato de haver uma fusão entre empresas, é natural que agora surjam várias dúvidas em torno do futuro do Java. Ainda deve haver algum tempo até o acordo ser confirmado, até os novos interesses se assentarem, definições de RH, etc. Até lá não deverão haver grandes lançamentos ou planos por parte da Sun. Quanto mais ágil este processo for concluido melhor para nós, desenvolvedores Java.

Java 7 e JCP

O entrega do Java 7, até então planejada para início de 2010, agora é duvidosa. O Java 7 virá (viria) com algumas inovações interessantes, como suporte a linguagens dinâmicas, novo suporte a computação paralela e o novo garbage colector G1. Apesar da Oracle ter uma certa cultura de software livre com seu envolvimento no Linux, ainda há curiosidade sobre seu grau de abertuda no JCP e uma eventual mudança nas licenças Java.

JVM

Além da JVM oficial, o JRockit da Oracle era uma grande iniciativa. Não parece lucrativo manter os esforços separados, entretando uni-los reduziria nossas opções como desenvolvedores. Outra dúvida é se a Oracle vai continuar investindo em Java para mobile. Como a Oracle está se firmando no mercado de aplicações corporativas (com soluções de hardware, SO, SGBD, midleware), será que vão arriscar perder o foco e investir na JME?

Glassfish e Netbeans

Para os amantes do Glassfish parece uma boa notícia e sinal de continuidade, já que a Oracle investia “recursos significativos de desenvolvimento”. Isto não vale para usuários do Netbeans. A estratégia da Oracle para IDEs sempre foi investir no Eclipse e no seu JDeveloper e, até o momento, não havia interesse em adotar qualquer tecnologia Netbeans.

MySQL

Na compra da Sun, a Oracle ganha de brinde o MySQL. Ela acaba com um concorrente e ganha uma nova opção de mercado para bancos de dados. O MySQL, líder open-source e para soluções de 1 a 10 mil usuários, possui mais mercado que o Oracle 9i, 10g ou 11g isolados. Agora não se sabe como o MySQL será mantido. O mais provável é que ele fique um pouco de lado e não evolua tão rapidamente quanto seria na Sun ou na antiga MySQL.

Solaris, OpenOffice, ODF

A Oracle já havia escolhido o Solaris como uma plataforma importante para o banco Oracle, principalmente se tratando de 64 bits. Mais importante que esta sinergia, agora a Oracle tem mais que apenas uma extensão do RedHat, ela tem seu próprio SO, o que pode representar uma vantagem competitiva em outros mercados. Espero que a Oracle venha com um novo impulso de capital e inovações para o Solaris e isto também vale para o OpenOffice e o ODF.

Mercado

O mercado de desenvolvimento de software poderá ter aplicações escritas com tecnologia Oracle, rodando em servidores de aplicação Oracle, banco de dados Oracle (o original ou o MySQL). Tudo isto em servidores de processamento ou armazenamento hardware Oracle e SO Oracle. É, faz tempo que Oracle deixou de ser apenas um banco de dados robusto.

Adriano Campestrini Ferramentas

Por que usar desenvolvimento ágil?

14, abril, 2009

Essa foi a pergunta que a Mirela, nossa Assessora de Marketing, fez ao Adriano e ao Samuel, dois dos três sócios da OnCast Technologies. Após receber várias respostas enumerando as qualidades do SCRUM/XP/Lean, me permitiram que falasse sobre uma delas. Expliquei que havia me identificado bastante com a característica do processo ágil que permite desenvolvimento de software sustentável, um dos princípios elencados no Manifesto Ágil.
Uma das maneiras de se atingir isso é com a criação de código simples, outro princípio discretizado no Manifesto Ágil. Com um código simples torna-se fácil a percepção de falhas precocemente, atacando cedo, aquele que poderia ser o câncer de todo o processo. Acabei criando o seguinte exemplo para explicar essa faculdade:

Imagine que um cliente nos peça que façamos uma casinha de Lego de determinada cor. Para isso nos entrega todas as peças necessárias sem notar que nos havia entregue uma peça de outra cor.

Caso executássemos essa tarefa utilizando o desenvolvimento tradicional, tirando toda burocracia envolvida, faríamos a casa e ao terminar, perceberíamos que na base da casa havia uma peça de cor errada. Isso implicaria em desconstruir toda a casa e, por sua vez, reconstruí-la, perdendo um tempo que o cliente provavelmente não possuía.

Caso estivéssemos usando o desenvolvimento ágil, teríamos notado a peça errada antes mesmo de terminar a casa, faríamos sua troca pela peça correta e continuaríamos nosso desenvolvimento sem essa perda tão considerável de tempo.

O que quis dizer com este exemplo é que um problema, dentro do desenvolvimento ágil, é atacado assim que é encontrado, desta forma é suplantado, minimizando o tempo gasto com isso.

Fazendo um gancho do exemplo do Lego com o desenvolvimento de softwares, podemos lembrar do Test-Driven Development (TDD) que é a abordagem que nos ajuda a encontrar a “peça” errada, antes desta “peça” influenciar nas outras “peças” que compõe o software.

Em suma, pode-se dizer que o desenvolvimento ágil tenta mitigar o efeito “bola de neve”, tornando mais simples e contínuo o processo criativo.

Marcelo Silva Ferramentas, Metáforas, Riscos

EclEmma: cobertura de código no Eclipse

13, abril, 2009

Para quem usa Eclipse, agora ficou mais fácil medir a cobertura de código dos testes automatizados.

O EclEmma é um plugin para o Eclipse que mede e apresenta a cobertura de testes no próprio Eclipse. Com o velho Emma ou com o brasileiro Cobertura, era preciso configurar o build para instrumentar o código e rodar a medição. Os resultados era visualizados em relatórios html. Nada realmente integrado à IDE!

Medir a cobertura com o EclEmma parece muito mais natural. Os testes são executados no próprio Eclipse e a apresentação dos trechos cobertos e descobertos é integrada ao editor Java.

Adriano Campestrini Ferramentas

Ferramentas para gestão de projetos Scrum

9, abril, 2009

Para quem sente falta de ferramentas simples para gerenciamento de pequenos projetos com Scrum, aí vão duas dicas:

São opções bem simples, clean e de fácil acesso pois são SaaS, ous seja, não precisam ser instaladas. O Scrum Ninja tem a vantagem de ser grátis para projetos open source ou projetos com até 3 usuários.

Uma opção mais completa, porém não tão simples é o VersionOne. Ferramenta líder de mercado para gestão ágil de projetos, também possui versão SaaS, abrange técnicas de outras metodologias, o que pode ser útil para projetos maiores.

Seja qual for a ferramenta escolhida, sugiro não deixar de usar o dashboard com post-its e o burndown chart desenhado no quadro branco. A parede e o quadro branco são campeões nos quesitos acessibilidade e visibilidade, além disso, tornam o ambiente de trabalho mais dinâmico e humano.

Adriano Campestrini Ferramentas