Tiny Types

May 16th, 2011 by Jonas Abreu

Enquanto eu resolvia o primeiro desafio de expressividade que postei no VidaGeek.net, me deparei com uma situação comum para programadores Java.

Eu precisava que a classe java.lang.String fosse capaz de fazer coisas (como inverter a string) que ela não é.

A solução mais comum seria criar uma classe Strings (seguindo o padrão da java.util.Collections) que conteria o comportamento.

Daí para usá-la, seria da seguinte forma:


Strings.inverte(suaString);

O problema é que isso espalha o comportamento que deveria pertencer à String (que não temos como alterar).

Ao invéz de solucionar o problema dessa forma, resolvi usar um Tiny Type para encapsular essa string (chamei de BinaryString).

Essa BinaryString é capaz de se inverter, além de eu poder dar os nomes que eu quiser para os métodos (deixando mais expressivo).

Mas a maior vantagem de ter usado esse Tiny Type é que ele me abriu possibilidades que não existiam no código sem ele e eu mudei completamente a solução que pretendia criar. A nova solução ficou (na minha opnião) mais elegante e expressiva.

Se tiverem maior interesse sobre Tiny Types, eu escrevi sobre o assunto aqui e tem um post do Darren Hobbs que é onde eu entrei em contato com o assunto.

Além disso, no nosso novo treinamento Scrum Developer Skills, vários assuntos relacionados à expressividade são abordados, incluindo Tiny Types.

Dizer sim ao Kanban não significa dizer não ao Scrum

May 10th, 2011 by Alexandre Magno

Durante o ano passado fui bastante questionado sobre qual era a minha posição quanto ao uso do Kanban em projetos de desenvolvimento de software. Como naquele momento meu contato com este método ainda era pequeno, eu me reservei o direito de por várias vezes dar a simples resposta “Ainda não tenho uma posição totalmente formada sobre o assunto, a princípio algumas coisas fazem bastante sentido para mim e outras me deixam preocupados.”. Pois bem, depois de bons meses de pesquisa, estudo e algumas aplicações práticas, compartilho com vocês o que acho sobre o assunto.

Recapitulando

Conforme mencionado em recente post do Tiago Motta aqui no blog AdaptWorks, o Kanban que estamos falando aqui é uma espécie de derivação do modelo de cartões do Sistema Toyota de Produção para o desenvolvimento de software. Esta derivação, popularizada sob a liderança do David J. Anderson (aquele do time que criou a FDD – Feature-Driven Development), é formada principalmente por três princípios: fluidez, valor e pessoas. Estes princípios criam forma através de práticas bem interessantes, como a definição de um Limited Work-In-Progress nas filas de trabalho.

Talvez o ponto de maior diferenciação deste Kanban para os mais conhecidos métodos ágeis, como Scrum e Extreme Programming, seja o fato dele trabalhar com um fluxo cadenciado, enquanto os outros focam seu trabalho no conceito de time-box.

Caso você ainda não esteja familiarizado com a idéia do Kanban para desenvolvimento de software, sugiro fortemente a leitura do seguinte material:

Menos prescrição

Se você trabalha ou conhece bem os conceitos do Scrum, provavelmente ao ler sobre Kanban fará alguma das perguntas abaixo:

  • Cadê o Product Owner? E o ScrumMaster?
  • Meu time não é multi-disciplinar?
  • Não faço planejamento de uma Sprint? Como assim não há Sprint?
  • E a melhoria contínua? Não paro para pensar em como melhorar produto e processo?

Veja, essas perguntas não são tão diferentes das que muitos fazem quando estão partindo de um método waterfall-like para os ágeis:

  • Cadê o Gerente de Projetos?
  • Não há hierarquias nos papéis?
  • Não faço um planejamento detalhado no início do projeto? Como assim não há escopo fechado?
  • E meus artefatos? Cadê meu cronograma?

Essa reação sempre se repetirá quando você estiver de saída de um processo mais prescritivo para um mais leve, com menos coisas definidos. E da mesma forma que Scrum é menos prescritivo que muitos dos métodos waterfall-like, o Kanban é sim menos prescritivo que o próprio Scrum.

Hmmm, então significa que Kanban é uma evolução do Scrum? Não é bem por aí. Adaptabilidade é algo maravilhoso e que obviamente sempre será beneficiada  quando do uso de métodos menos prescritivos. No entanto o quão “adaptável” deve ser o seu processo é, na minha opinião, mais uma das decisões que você deve tomar empiricamente, projeto a projeto. Em algumas situações uma solução com mais processos definidos pode sim ser mais adequada que uma com menos. Já em outras isso pode travar as pessoas e burocratizar o trabalho. Scrum pode ser burocrático demais para alguns cenários? Não tenho dúvida que sim, mas também pode ser aberto demais para outros. O mesmo digo em relação ao Kanban.

Fluxo ou pacote?

Essa, na minha opinião, é a principal pergunta que você deve fazer quando da decisão de usar Kanban ou não. O conceito de time-box, rigidamente utilizado pela maioria dos métodos ágeis, dá lugar à procura por fluidez dentro de um processo baseado em fluxo unitário. O jogo funciona mais ou menos assim:

  • uma padaria waterfall planeja no início do dia a quantidade total de pães que precisará e então os produz faseadamente. Teremos todos os pães prontos de uma única vez, talvez, ao final do dia.
  • uma padaria Scrum define time-box’s rígidos e no início de cada “rodada de produção” estima quantos pães é capaz de fazer dentro daquele tempo. Teremos, por exemplo, pequenas fornadas de pão saindo a cada hora.
  • uma padaria Kanban trabalhará de forma fluída: planejando, construindo e entregando pão a pão continuamente. O primeiro pão pode ficar pronto em 02 minutos, e já estar disponível para o consumo, o outro pode vir 05 minutos depois, o outro 01 minutos, e por aí vai, fluindo.

Lógico que o pão aqui é apenas uma analogia, mas com ela espero que você consiga perceber que, dependendo do que você precisa, uma dinâmica pode parecer mais interessante que a outra. Um Product Owner pode muitas vezes se perguntar do por que dele precisar ficar esperando o fim da Sprint para receber uma funcionalidade X que já está pronta. Ele adoraria já ir recebendo cada funcionalidade quando esta estivesse pronta sem ter que esperar o “pacote” estar pronto. Já um outro Product Owner poderia achar isso péssimo, já que ele gostaria de poder programar melhor as entregas e não enxergaria valor em ter apenas uma daquelas funcionalidades na sua mão. Tudo depende.

Minha perspectiva

Depois de assistir algumas boas palestras de Kanban, das quais destaco a do Karl Scotland no Scrum Gathering de Amsterdam, participar do treinamento de Kanban aqui da AdaptWorks e ler muitas coisas a respeito, decidi então partir para a prática.

Nos últimos três meses me envolvi no trabalho com três times Kanban. Todos fazem parte de empresas que já estão há algum tempo fazendo algo relacionado à Agile, um exemplo disso é que todos os três times estavam vindo de Scrum. Abaixo compartilho um pouco desta experiência bem como minha percepção sobre ela.

Por que eu sugeri a transição de Scrum para Kanban?

Nestes casos específicos ficou evidente que o conceito de pacotes do Scrum tornava o ambiente “duro” demais. Algumas características deste cenário que me levaram a pensar sobre Kanban:

  • O Product Owner não conseguia ter uma quantidade de requisitos READY para o planejamento de uma Sprint, visto que muitas coisas “apareciam” e “eram descobertas” ao longo da sua execução.
  • O time estava extremamente “estressado” pois todo planejamento era mudado (!) ao longo da Sprint.
  • O tal “pacote” da Sprint era composto por coisas sem nenhuma relação, muitas vezes até de produtos ou áreas diferentes.
  • Sprints eram interrompidas frequentemente para fazer “algo urgente” e, veja, este algo não surgia por falta de planejamento ou incompetência das pessoas envolvidas. Ele surge porque a dinâmica do negócio daquela empresa é assim mesmo.

O que há de comum em todos os problemas que citei acima? Todos são derivados do conceito de time-box. E foi durante a busca da causa raiz destes problemas que me convenci que para aquele time uma outra dinâmica no fluxo de trabalho melhoraria diversos pontos.

E como ficaram as outras práticas do Scrum já que não eram mais obrigatórias?

Se você conversasse comigo há alguns meses atrás escutaria que um dos maiores medos que eu tinha em relação ao Kanban era o de que times poderiam “relaxar” com algumas das práticas essenciais de Agile que agora passariam a ser opcionais (percebe que este é o mesmo medo sentido pela turma do XP quando alguém fala de Scrum). Felizmente o que percebi na prática foi que, uma vez que um time ou uma organização aprende que multi-disciplinaridade e auto-organização – dentre outros conceitos – são benéficos para seus resultados, elas não mais abrirão mão deles.

Ainda tenho dúvidas quanto a este ponto quando penso em um time que nunca utilizou algum método ágil indo diretamente para Kanban.

E mudou tudo?

Em ambas as empresas nas quais pratiquei Kanban, o Scrum foi mantido para a maioria dos times. Em um dos casos, de um total de treze times ágeis, apenas dois fizeram a transição para Kanban. Por que? Porque o Scrum, seus timeboxes e outros conceitos continuou se mostrando a melhor opção, ou pelo menos a mais adequada para muitos deles.

Isto não é sobre ser mais fácil ou menos invasivo, isto é sobre escolher a opção mais adequada

Não gosto quando vejo alguém falando que irá começar a utilizar Kanban pelo fato de não ter conseguido utilizar Scrum, ou pelo fato de Kanban ser menos invasivo. Ora, se vou utilizar Kanban tem que ser porque, para aquele propósito, o considero melhor que Scrum, XP, Crystal, Waterfall, etc., e não simplesmente porque é mais fácil!

Para finalizar este post entenda que eu faço parte daquele grupo de pessoas que não acredita que há ou haverá um único processo correto, capaz de combater todos os tipos de problemas e se adequar à todos os cenários. Tenho adorado minhas recentes aventuras com Kanban, e continuo vibrando com o que Scrum pode fazer – e tem feito – por muitos times e empresas.

No nosso treinamento “Sistema Kanban para desenvolvimento de software” são abordados importantes detalhes sobre o uso deste método. Veja as datas de nossas próximas turmas.

Conversa Rápida – Retrospectiva e Palestras

May 4th, 2011 by Jonas Abreu

A primeira edição do Conversa Rápida foi realizada nessa segunda feira, dia 2.

(Se estiver interessado apenas nas palestras, pode pular para o fim do post)

Além de ter sido muito divertido para os palestrantes e participantes, o formato do evento agradou a todos. Isso era uma preocupação da organização, pois nunca tínhamos feito algo assim.

Basicamente, foram 12 palestras de 5 minutos (mais uma orientação do que uma regra). Mas o que tornou o evento mais interessante, além dos palestrantes (muito obrigado Alexandre, Fabiano, Edmilson e Juliano) e o público (muito obrigado a todos que vieram até a AdaptWorks em uma segunda feira com trânsito recorde), é que apenas os palestrantes sabiam sobre o que iam falar. Propositadamente não houve divulgação das palestras. E isso foi bem recebido pelo público.

O objetivo da não divulgação das palestras é tirar todos da zona de conforto e poder discutir sobre assuntos que voluntariamente muitos não procurariam, mas que fazem muito sentido para Desenvolvimento Ágil.

Além disso, houve uma boa variedade de formatos de palestras, o que tornou tudo ainda mais dinâmico. Alguns palestrantes usaram apresentações mais tradicionais (slides), outros usaram o quadro branco, e em algumas não foi usado material de apoio. Até mesmo uma dinâmica de grupo aconteceu durante uma das apresentações.

Após a sequência de palestras, precisávamos colher o feedback do público. Ao invés de usar os tradicionais questionários, optamos por uma Retrospectiva Ágil. Além de diversos post-its elogiando o evento, conseguimos identificar vários problemas a serem resolvidos para a próxima edição.

Novamente, muito obrigado a todos que puderam vir. E para os que não puderam, todas as palestras foram filmadas e estão agora no youtube. Segue a lista delas:

A internet não é a sua casa – Jonas Abreu
Ambiente para Inovação – Jonas Abreu
Certificados Digitais – Juliano Alves
Criando Melhores Apresentações – Edmilson Miyasaki
E quando a empresa não é ágil? – Juliano Alves
Expressividade de Código – Jonas Abreu
Liderança técnica não é sinônimo de bons líderes – Fabiano Milani
Opressor x Oprimido – Jonas Abreu
ProductOwner – Ação Requerida – Alexandre Magno
Recursão – Jonas Abreu
ScrumMaster – Ação Requerida – Alexandre Magno
Time – Ação Requerida – Alexandre Magno

Conversa Rápida

April 27th, 2011 by Jonas Abreu

No dia 2 de maio, das 19:30 às 21:30 teremos a primeira edição do Conversa Rápida na AdaptWorks.

O Conversa Rápida é um conjunto de 12 palestras de 5 minutos (cada uma seguida de 5 minutos para perguntas).

Até o momento, temos 5 palestrantes confirmados:

  • Alexandre Magno
  • Edmilson Miyasaki
  • Fabiano Milani
  • Jonas Abreu
  • Juliano Alves

Caso tenha interesse em assistir as palestras, envie um email para jabreu@adaptworks.com.br para que seu lugar seja reservado. Temos poucos lugares.

Coding Dojo na AdaptWorks

April 14th, 2011 by Edmilson Miyasaki

Nesta última terça-feira, 12 de Abril, tivemos mais um Codigo Dojo na AdaptWorks. Claro, a chuva que caiu no final da tarde atrapalhou um pouco, mas mesmo assim tivemos uma boa quantidade de participantes.

Desta vez resolvemos mudar o condutor do Dojo e o escolhido foi o Juliano Alves (obrigado, Juliano).

Jonas e Juliano, apresentando as opções para o problema

Apesar de algumas pessoas reclamarem, parece que Java continua sendo o “common ground” para a maioria dos participantes. Não que seja um problema, mas alguns gostariam de uma pequena mudança, conhecer uma outra linguagem.

Platéia atenta, mas participativa

Algumas pessoas talvez se sintam constrangidas em participar de um Coding Dojo – algumas por não se acharem com conhecimento suficiente ou por acharem que isso é para um nível mais alto de programação. E para estas situações, é importante lembrar que um Coding Dojo não é criado para mensurar o seu “traquejo” na linguagem, e sim mostrar (e usar) boas práticas em programação.

"Pair Programming", uma das práticas mais usadas

Inclusive, na Retrospectiva feita ao final da sessão, um dos comentários positivos foi a diferença positiva sentida quando praticando “pair programming”. E é por aí que as coisas se encaminham.

Afinal, o que é Kanban?

March 29th, 2011 by tmotta

Uma nova metodologia ágil para desenvolvimento de software? Um conjunto de boas práticas? O nome do quadro do Scrum? Uma evolução do Scrum? Uma versão simplificada do Scrum? Nenhuma das anteriores? Todas as anteriores?

Kanban é uma palavra de origem japonesa, cujo significado é “cartão visual”. Sua popularidade vem do Sistema Toyota de Produção, cujo mecanismo básico de operação consiste justamente nos cartões visuais.

O que vem ganhando muita popularidade no mercado de desenvolvimento de software, na verdade, é o “Sistema Kanban para Desenvolvimento de Software”, o qual muitas vezes é abreviado para “Kanban” e cujo nome completo deixa tudo mais claro: trata-se de um conjunto de princípios, conceitos e práticas cujo principal objetivo é minimizar o tempo necessário para uma idéia se transformar em um ativo de software em produção.

Sendo assim, podemos dizer que o Kanban é uma metodologia ágil para desenvolvimento de software? Sim, podemos, porém ele é mais abrangente, pois nos possibilita gerenciar uma cadeia de valor inteira: “from concept to cash”.

Não perca nossos próximos posts sobre Kanban, nos quais explicaremos mais detalhes sobre esta fascinante maneira de trabalhar!

Release: o quão curto e frequente for possível.

January 27th, 2011 by Alexandre Magno

Em ambientes de projetos ágeis é comum sermos questionados se o resultado de uma Sprint deve automaticamente se tranformar em uma entrega – algo que vai entrar em produção – ou se podemos aguardar um momento mais apropriado para fazê-lo. A resposta padrão é: uma Sprint gera algo potencialmente entregável, algo que está Done, mas se isso vai entrar em produção ou não, vai depender de como você pretende trabalhar com seus Releases. Neste post pretendo explorar um pouco mais esse tema e deixar minha opinião sobre quando e como trabalhar com Releases.

O que é um Release?
Um Release é a representação de uma entrega de produto em produção. Ele é comumente planejado através de um cerimônia chamada Release Planning. Releases são planejados principalmente em ambientes onde estas entregas precisam ter uma data fixa, seja por obrigações contratuais, necessidades de mercado, eventos (conferências, product lauch, etc.) ou – principalmente em ambientes largos – para seguir um roadmap de releases corporativos.

Preciso planejar Releases?
As duas mais comuns situações em que o planejamento de Relase não será necessário:

  • Um (ou vários) Release(s) por dia: dependendo do tipo de produto que você desenvolve e de quão maduro seu time é em boas práticas ágeis de engenharia de software, você pode conseguir este estado de nirvana. Release diários ocorrem através de uma boa estrutura de build e deploy para que estes possam ser feitor frequentemente. Aqui a sua definição de Done teria a instrução “Release it!” (ou algo do gênero). Além disso seu time precisaria de um Product Owner trabalhando MUITO próximo a eles e  um Product Backlog com itens realmente pequenos.
    Um case com esta característica que ficou bem popular nos eventos de Agile foi o do Flickr, que publicou conseguir uma média de 10 deploys diários através da coperação entre Dev e Ops.
  • Um Release a cada Sprint: este cenário é bastante comum, o time trabalha para que o resultado final da Sprint, aquele que será apresentado no Review, já esteja em produção. Empresas que, por exemplo, liberam uma “nova versão” do produto aos seus clientes a cada mês/quinzena provavelmente trabalharão desta forma. Neste caso a Sprint Planning já será suficiente para enxergar o que o cliente receberá em produção e quando, não precisando assim de um Release Planning.

Planejando Release curtos e frequentes
Se o seu cenário não é semelhante aos dois que eu apresentei acima, provavelmente você precisará planejar Release para poder enxergar além de uma Sprint (mesmo que de forma embaçada) e, assim, planejar entregas em produção para seus clientes. Tenha em mente  que, mesmo planejando além de uma Sprint, trabalhar com Releases curtos e frequentes é mais que uma boa prática em Agile, é quase uma obrigação. Releases curtos e frequentes contam com um tempo de resposta menor para colher feedback do cliente, evitando assim o desenvolvimento de funcionalidades desnecessárias ou com um comportamento diferente do esperado pelo cliente. Além disso o retorno sobre o investimento do cliente é acelerado, já que na maioria das vezes o ROI real só será recebido pelo cliente com o produto em produção.

Lembro que quando comecei a trabalhar com Agile alguém me falou que o tamanho ideal de um Release seria 06 meses, lembro que no mesmo momento pensei “Isso é loucura, acho quase impossível isso acontecer!”. Hoje quando escuto falar em Release deste tamanho penso “6 meses? Não, isto é muito tempo!”. Na verdade o tamanho “ideal” de um Release vai depender diretamente do ambiente corporativo que você está inserido. Se a empresa possui uma política de Releases corporativos onde n produtos precisam “entrar” juntos, bem, você pode precisar de Release de 06 meses, ou até mais. O que sugiro nestes cenários é evitar Release BIG-BANG, ao invés disso lance Releases menores para uma base selecionada de usuários (field-beta testers, por exemplo).

Release Planning Meeting – Agenda
Abaixo segue uma sugestão de algumas práticas comuns que procuro utilizar em reuniões para planejamento de um release. Muito provavelmente parte destas práticas não servirão para você, remova-as e adapte a agenda para que esta gere o resultado e visibilidade que seu ambiente precisa para um Release.

  1. Abertura: ScrumMaster revisita o propósito da reunião, sua estrutura, agenda, etc.
  2. Visão do Produto e Roadmap: Product Owner revista a Visão do Produto com o propósito de trazer todos novamente para o foco e alinhar expectativas.
  3. Status atual do projeto: Product Owner apresenta gráficos e Status Reports onde possam ser visualizados resultado das últimas Sprints e momento atual do projeto.
  4. Meta/tema da Release: Product Owner propõe a meta para o Release. Normalmente esta meta é expressa em objetivo de negócio alinhado à data de entrega.
  5. Estimativa de velocidade: Time estima sua velocidade para esta Release baseando-se no resultado de Sprints anteriores. Caso esta seja a primeira Sprint de um primeiro Release, sugiro que execute duas ou três Sprints antes de planejar um Release.
  6. Agenda da Release e número de Sprints: ScrumMaster facilita um trabalho colaborativo entre Time e Product Owner para enxergar Milestones, definir tamanho de Sprints, etc.
  7. Estimativa de itens do Product Backlog: Time estima itens do Product Backlog caso estes não estejam estimados. Só deverão ser estimados uma quantidade de itens suficiente para planejar o Release e, talvez, para deixar uma “sobra”.
  8. Mapear itens nas Sprints do Release: seguindo a priorização do Product Owner o Time irá mapear quais itens “cabem” em quais Sprints. Como o Plano de Release será revisto ao fim de cada Sprint, não aconselho tentar encaixar item a item em cada Sprint. Se você está planejando, por exemplo, um Release de 05 Sprints, mapeie itens para as 02 primeiras Sprints apenas, e deixe o restante selecionado sem posicionar na Sprint 03, 04 ou 05.
  9. Riscos, dependência e preocupações: de forma colaborativa Time, ScrumMaster e Product Owner trabalham com práticas para identificar riscos, dependências, impedimentos arquiteturais, desafios, etc. Caso necessário será elaborado um plano de riscos, impediments backlog e/ou um simples plano de ação.
  10. Comprometimento: ScrumMaster provoca Time e Product Owner para que haja um comprometimento com esta Meta. É importante todos estarem confiantes e entusiasmados com a Meta.
  11. Plano de comunicação e logística da Sprint: principalmente em ambientes largos, a comunicação do Release (e consequentemente do projeto) perante a organização não podem falhar. Se necessário montar plano de ação para este trabalho.
  12. Montar gráfico(s): montar Release Burndows e/ou Parking Lot e/ou qualquer gráfico que ajude a comunicar o andamento do Release.
  13. Retrospectiva: Por fim, como de costume em qualquer cerimônia do Scrum, considero uma boa prática ser feita uma Retrospectiva para avaliar pontos positivos e de melhoria desta reunião.

Muitos me perguntam sobre o tempo que normalmente leva uma Release Planning Meeting. Minha resposta é: não mais que dois dias. Talvez você diga “Dois dias trancados em uma sala fazendo planejamento? Isso é desperdício, um tédio, rg$5sfga!” Bem, tudo depende do quão bom facilitador seu ScrumMaster for. Faço uma analogia destas cerimônias ágeis a um treinamento…dependendo da dinâmica aplicada, do conteúdo e do instrutor, 02 horas podem ser uma tortura – ou 32 horas podem ser extremamente proveitosas e você nem sentir o tempo passar.

Atualizando e revisando o Plano de Release
Por fim é importante ficar claro que o Plano de Release é um artefato vivo e que a cada Review deve ser atualizado, revisado e comunicado pela organização. O Product Owner é o responsável por fazer esta comunicação e, caso tenha sido elaborado uma plano de comunicação, este deverá ser seguido.

No nosso treinamento de Certified Scrum Product Owner são abordados alguns importantes aspectos do Planejamento de Release. Conheça mais sobre este treinamento e veja as datas de nossas próximas turmas.

Coding Dojo em Smalltalk

August 25th, 2010 by Fabio Massa

Graças a colaboração e boa vontade do Guiseppe Proment da Fujitsu, ontem realizamos uma nova sessão de Coding Dojo em Smalltalk e utilizamos o Pharo pra suíte de testes. Poucos participantes conheciam Smalltalk e só o Guiseppe tinha experiência com o Pharo, o que tornou a sessão ainda mais interessante. No começo a maioria sentiu-se fora da sua zona de conforto, mas na retrospectiva todos chegaram a conclusão de que essa sensação era muito positiva.

No dojo anterior a esse (desculpem por não divulgarmos) contamos com a ajuda do Diogo Baeder que coordenou muito bem a sessão de Dojo em Javascript e o uso do QUnit que era desconhecido pela maioria dos participantes.

Esse tipo de apoio dos participantes tem ajudando em muito, tornando as sessões ainda mais atrativas e evitando que percam interesse no Dojo e que ele acabe “morrendo”.

Platéia


Veja todas as fotos do Dojo

Participe da nossa lista de discussão

Coding Dojo

July 28th, 2010 by Fabio Massa

Ontem (27/07) organizamos outra sessão de Coding Dojo aqui na AdaptWorks, especialmente dessa vez contamos com novos participantes da Gonow e da Fujitsu, que enriqueceram muito o Dojo.
Coding Dojo

Agradeço a participação e paciência de todos.

Veja todas as fotos do Dojo

Coding Dojo

May 24th, 2010 by Fabio Massa

Realizamos outra sessão de Coding Dojo no dia 18/05 aqui na AdaptWorks. Dessa vez além de ter fluído melhor, conseguimos organizar melhor o Dojo e os participantes por sua vez estão mais colaborativos e cada vez mais disciplinados.

coding dojo

Veja todas as fotos do Dojo