<?xml version="1.0" encoding="UTF-8"?><feed
xmlns="http://www.w3.org/2005/Atom"
xmlns:thr="http://purl.org/syndication/thread/1.0"
xml:lang="en-US"
xml:base="http://www.dtsato.com/blog/wp-atom.php"
><title
type="text">Danilo Sato</title> <subtitle
type="text">We can change!</subtitle> <updated>2014-05-12T23:28:03Z</updated><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog" /> <id>http://www.dtsato.com/blog/feed/atom/</id><link
rel="self" type="application/atom+xml" href="http://www.dtsato.com/blog/feed/atom/" /> <generator
uri="https://wordpress.org/" version="4.2.39">WordPress</generator> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[Implementando ImplantaÃ§Ãµes Azul-Verde com Amazon Web Services (AWS)]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/" /> <id>http://www.dtsato.com/blog/?p=441</id> <updated>2014-05-12T23:28:03Z</updated> <published>2014-05-06T23:05:17Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="autoscaling" /><category
scheme="http://www.dtsato.com/blog" term="aws" /><category
scheme="http://www.dtsato.com/blog" term="blue green deployment" /><category
scheme="http://www.dtsato.com/blog" term="cd" /><category
scheme="http://www.dtsato.com/blog" term="cloud" /><category
scheme="http://www.dtsato.com/blog" term="continuous delivery" /><category
scheme="http://www.dtsato.com/blog" term="devops" /><category
scheme="http://www.dtsato.com/blog" term="dns" /><category
scheme="http://www.dtsato.com/blog" term="ec2" /><category
scheme="http://www.dtsato.com/blog" term="elastic beanstalk" /><category
scheme="http://www.dtsato.com/blog" term="elb" /><category
scheme="http://www.dtsato.com/blog" term="pt-br" /><category
scheme="http://www.dtsato.com/blog" term="route53" /> <summary
type="html"><![CDATA[Uma tÃ©cnica importante para reduzir o risco de suas implantaÃ§Ãµes (ouÂ deploys) Ã© conhecida comoÂ Blue-Green Deployments(ImplantaÃ§Ãµes Azul-Verde). Se chamarmos o ambiente de produÃ§Ã£o atual de â€œazulâ€, a tÃ©cnica consiste em introduzir um ambiente paralelo â€œverdeâ€ com a nova versÃ£o doÂ softwareÂ e, uma vez que tudo Ã© testado e estÃ¡ pronto para comeÃ§ar a operar, vocÃª simplesmente redireciona [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/"><![CDATA[<p>Uma tÃ©cnica importante para reduzir o risco de suas implantaÃ§Ãµes (ouÂ <em>deploys</em>) Ã© conhecida comoÂ <em><a
href="http://martinfowler.com/bliki/BlueGreenDeployment.html">Blue-Green Deployments</a></em>(<em>ImplantaÃ§Ãµes Azul-Verde</em>). Se chamarmos o ambiente de produÃ§Ã£o atual de â€œazulâ€, a tÃ©cnica consiste em introduzir um ambiente paralelo â€œverdeâ€ com a nova versÃ£o doÂ <em>software</em>Â e, uma vez que tudo Ã© testado e estÃ¡ pronto para comeÃ§ar a operar, vocÃª simplesmente redireciona todo o trÃ¡fego de usuÃ¡rios do ambiente â€œazulâ€ para o ambiente â€œverdeâ€. Num ambiente de computaÃ§Ã£o em nuvem, assim que for confirmado que o ambiente ocioso nÃ£o Ã© mais necessÃ¡rio, Ã© comum descarta-lo, uma prÃ¡tica conhecida comoÂ <a
href="http://www.thoughtworks.com/insights/blog/rethinking-building-cloud-part-4-immutable-servers">servidores imutÃ¡veis</a>.</p><p>Se vocÃª estiver utilizando Amazon Web Services (AWS) como seu provedor de nuvem, existem algumas opÃ§Ãµes para implementar as implantaÃ§Ãµes azul-verde dependendo da arquitetura do seu sistema. Visto que esta tÃ©cnica depende de uma Ãºnica troca de â€œazulâ€ para â€œverdeâ€, a sua escolha vai depender de como vocÃª estÃ¡ servindo conteÃºdo noÂ <em>front-end</em>Â da sua infraestrutura.</p><h2>InstÃ¢ncia EC2 Ãšnica com Elastic IP</h2><p>No cenÃ¡rio mais simples, todo o seu trÃ¡fego pÃºblico estÃ¡ sendo servido a partir de uma Ãºnica instÃ¢ncia EC2. Toda nova instÃ¢ncia no AWS recebe dois endereÃ§os â€“ um IP privado, que nÃ£o Ã© acessÃ­vel a partir da Internet, e um IP pÃºblico que Ã©. No entanto, se vocÃª desligar a sua instÃ¢ncia ou se ocorrer alguma falha, esses endereÃ§os IP sÃ£o liberados e vocÃª nÃ£o poderÃ¡ recuperÃ¡-los.</p><p>UmÂ <a
href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP</a>Â Ã© um endereÃ§o IP estÃ¡tico alocado Ã  sua conta AWS que vocÃª pode atribuir como o IP pÃºblico para qualquer instÃ¢ncia EC2 que vocÃª possui. VocÃª tambÃ©m pode reatribuÃ­-lo a outra instÃ¢ncia fazendo uma simples chamada de API.</p><p>No nosso caso, Elastic IPâ€™s sÃ£o a maneira mais simples de implementar a troca azul-verde: suba uma nova instÃ¢ncia EC2, configure-a, faÃ§aÂ <em>deploy</em>Â da nova versÃ£o do seu sistema, teste-o e, quando ele estiver pronto para produÃ§Ã£o, simplesmente reatribua o Elastic IP da instÃ¢ncia antiga para a nova. A mudanÃ§a serÃ¡ transparente para os seus usuÃ¡rios e o trÃ¡fego serÃ¡ redirecionado quase que imediatamente para a nova instÃ¢ncia.</p><h2>MÃºltiplas InstÃ¢ncias EC2 por trÃ¡s de um ELB</h2><p>Se vocÃª estiver servindo conteÃºdo atravÃ©s de um balanceador de carga, entÃ£o a mesma tÃ©cnica nÃ£o funcionaria pois vocÃª nÃ£o pode associar um Elastic IP a um ELB. Neste cenÃ¡rio, o ambiente azul atual Ã© um grupo de instÃ¢ncias EC2 e o balanceador de carga encaminharÃ¡ requisiÃ§Ãµes para qualquer instÃ¢ncia saudÃ¡vel no grupo. Para realizar a troca azul-verde usando o mesmo balanceador de carga vocÃª precisa substituir o grupo todo por um novo conjunto de instÃ¢ncias EC2 contendo a nova versÃ£o doÂ <em>software</em>. HÃ¡ duas maneiras de fazer isso: automatizando uma sÃ©rie de chamadas de API ou utilizando grupos de AutoScaling.</p><p>Cada serviÃ§o AWS expÃµe uma API e um cliente de linha de comando que vocÃª pode usar para controlar a sua infraestrutura. AÂ <a
href="http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/Welcome.html">API do ELB</a>Â permite registrar e desregistrar instÃ¢ncias EC2, o que irÃ¡ adicionÃ¡-las ou removÃª-las do grupo. Realizar a troca azul-verde com chamadas API exigirÃ¡ que vocÃª registre as novas instÃ¢ncias â€œverdesâ€ e ao mesmo tempo desregistre as instÃ¢ncias â€œazuisâ€. VocÃª pode atÃ© mesmo realizar essas chamadas em paralelo para ter uma troca mais rÃ¡pida. No entanto, a troca nÃ£o serÃ¡ imediata porque hÃ¡ um atraso entre registrar uma instÃ¢ncia a um ELB e o ELB comeÃ§ar a encaminhar requisiÃ§Ãµes para ela. Isso acontece pois o ELB sÃ³ encaminha requisiÃ§Ãµes para instÃ¢ncias saudÃ¡veis â€‹â€‹e ele precisa executar algumas verificaÃ§Ãµes (<em>health checks</em>) antes de considerar as novas instÃ¢ncias como saudÃ¡veis.</p><p>A outra opÃ§Ã£o Ã© utilizar o serviÃ§o AWS conhecido comoÂ <a
href="http://aws.amazon.com/autoscaling/">AutoScaling</a>. Ele permite que vocÃª defina regras automÃ¡ticas para gerenciar a escalabilidade da sua infraestrutura, seja aumentando ou diminuindo o nÃºmero de instÃ¢ncias EC2 em sua frota. Para usÃ¡-lo, primeiro vocÃª precisa definir uma configuraÃ§Ã£o de lanÃ§amento (<em>launch configuration</em>) que especifique como criar novas instÃ¢ncias â€“ qual AMI utilizar, o tipo de instÃ¢ncia, grupo de seguranÃ§a,Â <em>script</em>Â de inicializaÃ§Ã£o (<em>user data</em>), etc. EntÃ£o vocÃª pode usar essa configuraÃ§Ã£o de lanÃ§amento para criar um grupo de AutoScaling definindo o nÃºmero de instÃ¢ncias que vocÃª deseja ter em seu grupo. O AutoScaling irÃ¡ entÃ£o subir o nÃºmero desejado de instÃ¢ncias e continuarÃ¡ monitorando o grupo continuamente. Se uma instÃ¢ncia falhar ele irÃ¡ subir uma nova instÃ¢ncia para substituÃ­-la; se um limite for ultrapassado, ele irÃ¡ aumentar ou diminuir o tamanho da sua frota com base na demanda.</p><p>Os grupos de AutoScaling tambÃ©m podem ser associados a um ELB e ele cuidarÃ¡ de registrar e desregistrar instÃ¢ncias EC2 no balanceador de carga toda vez que um evento de escalabilidade ocorrer. No entanto, a associaÃ§Ã£o sÃ³ pode ser feita quando o grupo Ã© criado pela primeira vez e nÃ£o depois que ele estiver sendo executado. Podemos usar esse recurso para implementar a troca azul-verde, mas isso exigirÃ¡ alguns passos nÃ£o intuitivos, detalhados aqui:</p><ol><li>Criar a configuraÃ§Ã£o de lanÃ§amento para a nova versÃ£o â€œverdeâ€ do seuÂ <em>software</em>.</li><li>Criar um novo grupo de AutoScaling â€œverdeâ€ usando a configuraÃ§Ã£o de lanÃ§amento a partir do passo 1 e associÃ¡-lo ao mesmo ELB que estÃ¡ servindo as instÃ¢ncias â€œazuisâ€. Aguardar atÃ© que as novas instÃ¢ncias se registrem e se tornarem saudÃ¡veis.</li><li>Atualizar o grupo â€œazulâ€ e definir o nÃºmero desejado de instÃ¢ncias para zero. Aguardar atÃ© que as instÃ¢ncias antigas sejam encerradas.</li><li>Remover o grupo de AutoScaling â€œazulâ€ e sua configuraÃ§Ã£o de lanÃ§amento.</li></ol><p>Este procedimento manterÃ¡ o mesmo ELB funcionando enquanto as instÃ¢ncias EC2 e o grupo de AutoScaling atrÃ¡s dele sÃ£o substituÃ­dos. A principal desvantagem dessa abordagem Ã© o atraso. VocÃª precisa esperar atÃ© que as novas instÃ¢ncias subam, atÃ© o grupo de AutoScaling registrÃ¡-las no ELB, atÃ© o ELB considera-las saudÃ¡veisâ€‹â€‹ e, por fim, atÃ© que as antigas instÃ¢ncias sejam encerradas. Enquanto a troca estÃ¡ acontecendo, hÃ¡ um perÃ­odo de tempo em que o ELB encaminha requisiÃ§Ãµes tanto para instÃ¢ncias â€œverdesâ€ quanto para â€œazuisâ€, o que pode causar um efeito indesejÃ¡vel para seus usuÃ¡rios. Por este motivo eu provavelmente nÃ£o usaria essa abordagem para realizar implantaÃ§Ãµes azul-verde com ELBâ€™s e em vez disso consideraria a prÃ³xima opÃ§Ã£o â€“ o redirecionamento usando DNS.</p><h2>Redirecionamento de DNS utilizando Route53</h2><p>Ao invÃ©s de expor endereÃ§os de IP ou longosÂ <em>hostnames</em>Â dos ELBâ€™s aos seus usuÃ¡rios, vocÃª pode ter um nome de domÃ­nio para todos as seus URLâ€™s pÃºblicas. Fora do AWS, vocÃª pode realizar a troca azul-verde alterando registros CNAME no DNS. No AWS, vocÃª pode usar oÂ <a
href="http://aws.amazon.com/route53/">Route53</a>Â para alcanÃ§ar o mesmo resultado. Com o Route53, vocÃª cria uma zona de hospedagem (<em>hosted zone</em>) e define conjuntos de registro de recursos (<em>resource record sets</em>) para dizer ao Sistema Â de Nome de DomÃ­nio (DNS) como direcionar trÃ¡fego para o seu domÃ­nio.</p><p>VocÃª pode usar o Route53 para realizar a troca azul-verde introduzindo um novo ambiente â€œverdeâ€ &#8211; Â que pode ser uma Ãºnica instÃ¢ncia EC2 ou um novo ELB â€“ e simplesmente atualizando o conjunto de registro de recursos para apontar seu domÃ­nio/subdomÃ­nio para a nova instÃ¢ncia ou para o novo ELB.</p><p>Embora o Route53 suporte essa prÃ¡tica comum de gerenciar registros DNS, hÃ¡ uma alternativa melhor. O Route53 tem uma extensÃ£o para DNS especÃ­fica ao AWS que se integra melhor a outros serviÃ§os AWS e tambÃ©m Ã© mais barato â€“ oÂ <a
href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html">conjunto de registro deÂ <em>alias</em>Â de recursos</a>Â (<em>alias resource record sets</em>). Eles funcionam praticamente da mesma maneira, porÃ©m ao invÃ©s de apontar para qualquer endereÃ§o IP ou registro DNS, eles apontam para um recurso AWS especÃ­fico: uma distribuiÃ§Ã£o CloudFront, um ELB, umÂ <em>bucket</em>Â S3 servindo umÂ <em>site</em>Â estÃ¡tico, ou outro conjunto de registro de recursos Route53 na mesma zona de hospedagem.</p><p>Finalmente, outra forma de realizar a troca azul-verde com o Route53 Ã© utilizando oÂ <em><a
href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/WeightedResourceRecordSets.html">Weighted Round-Robin</a></em>. Isso funciona tanto para conjuntos de registro de recursos normais quanto para conjuntos de registro deÂ <em>alias</em>Â de recursos. VocÃª precisa associar vÃ¡rias respostas para o mesmo domÃ­nio/subdomÃ­nio e atribuir um peso entre 0 e 255 para cada registro. Ao processar uma consulta DNS, o Route53 irÃ¡ selecionar uma resposta usando uma probabilidade calculada com base nesses pesos. Para realizar a troca azul-verde vocÃª precisa ter um registro existente para o atual ambiente â€œazulâ€ com peso 255 e um novo registro para o ambiente â€œverdeâ€ com peso 0. Em seguida, basta trocar esses pesos para redirecionar o trÃ¡fego de azul para verde.</p><p>A Ãºnica desvantagem dessa abordagem Ã© que a propagaÃ§Ã£o de mudanÃ§as no DNS pode demorar algum tempo, por isso vocÃª nÃ£o teria controle sobre quando o usuÃ¡rio final perceberÃ¡ isso. Os benefÃ­cios sÃ£o que vocÃª expÃµe seus usuÃ¡rios a URLâ€™s mais fÃ¡ceis de serem memorizadas, a mudanÃ§a acontece quase imediatamente, vocÃª pode testar o novo ambiente â€œverdeâ€ antes de promovÃª-lo e, com oÂ <em>weighted round-robin,</em>Â vocÃª ganha a flexibilidade adicional de fazerÂ <em>deploys</em>Â do tipo<em>canary</em>Â automaticamente.</p><h2>Troca de ambiente com Elastic Beanstalk</h2><p>O Ãºltimo cenÃ¡rio Ã© quando vocÃª estÃ¡ implantando seu aplicativoÂ <em>web</em>Â noÂ <a
href="http://aws.amazon.com/elasticbeanstalk/">Elastic Beanstalk</a>, a oferta de plataforma como serviÃ§o (PaaS) da Amazon que suporta Java, .Net, Python, Ruby, NodeJS e PHP. O Elastic Beanstalk expÃµe o conceito de um ambiente que permite que vocÃª rode vÃ¡rias versÃµes do seu aplicativo lado a lado, bem como a capacidade de realizar<em>deploys</em>Â com tempo inoperacional zero. A troca azul-verde simplesmente consiste em criar um novo ambiente â€œverdeâ€ e seguirÂ <a
href="http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html">as etapas na documentaÃ§Ã£o</a>Â para realizar a troca.</p><h2>ConclusÃ£o</h2><p>A ImplantaÃ§Ã£o Azul-Verde Ã© uma tÃ©cnica importante para implementar Entrega ContÃ­nua. Ela reduz o risco permitindo a realizaÃ§Ã£o de testes antes do lanÃ§amento de uma nova versÃ£o para produÃ§Ã£o. Ao mesmo tempo, ela permite implantaÃ§Ãµes com tempo inoperacional quase zero e um mecanismo de reversÃ£o rÃ¡pida caso algo dÃª errado. Ã‰ uma tÃ©cnica poderosa para fazerÂ <em>deployÂ </em>deÂ <em>software</em>, especialmente quando vocÃª estiver utilizando computaÃ§Ã£o em nuvem na sua infraestrutura. Os provedores de nuvem, tal como o AWS, permitem que vocÃª crie novos ambientes facilmente atravÃ©s de uma simples chamada de API e oferecem vÃ¡rias opÃ§Ãµes para implementar as implantaÃ§Ãµes Azul-Verde.</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+Implementando+Implanta%C3%83%C2%A7%C3%83%C2%B5es+Azul-Verde+com+Amazon+Web+Services+%28AWS%29+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D441" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/' rel='bookmark' title='Implementing Blue-Green Deployments with AWS'>Implementing Blue-Green Deployments with AWS</a></li><li><a
href='http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/' rel='bookmark' title='AWS Training in Brazil'>AWS Training in Brazil</a></li><li><a
href='http://www.dtsato.com/blog/2007/12/20/os-valores-ageis-nao-se-expressam-em-palavras-mas-em-acoes/' rel='bookmark' title='Os Valores Ãgeis nÃ£o se Expressam em Palavras, mas em AÃ§Ãµes'>Os Valores Ãgeis nÃ£o se Expressam em Palavras, mas em AÃ§Ãµes</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[Implementing Blue-Green Deployments with AWS]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/" /> <id>http://www.dtsato.com/blog/?p=437</id> <updated>2014-05-06T22:13:21Z</updated> <published>2014-05-06T22:13:21Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="autoscaling" /><category
scheme="http://www.dtsato.com/blog" term="aws" /><category
scheme="http://www.dtsato.com/blog" term="blue green deployment" /><category
scheme="http://www.dtsato.com/blog" term="cd" /><category
scheme="http://www.dtsato.com/blog" term="cloud" /><category
scheme="http://www.dtsato.com/blog" term="continuous delivery" /><category
scheme="http://www.dtsato.com/blog" term="devops" /><category
scheme="http://www.dtsato.com/blog" term="dns" /><category
scheme="http://www.dtsato.com/blog" term="ec2" /><category
scheme="http://www.dtsato.com/blog" term="elastic beanstalk" /><category
scheme="http://www.dtsato.com/blog" term="elb" /><category
scheme="http://www.dtsato.com/blog" term="route53" /> <summary
type="html"><![CDATA[An important technique for reducing the risk of deployments is known as Blue-Green Deployments. If we call the current live production environment â€œblueâ€, the technique consists of bringing up a parallel â€œgreenâ€ environment with the new version of the software and once everything is tested and ready to go live, you simply switch all user [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/"><![CDATA[<p
class="p1"><span
class="s1">An important technique for reducing the risk of deployments is known as <a
title="Blue Green Deployment" href="http://martinfowler.com/bliki/BlueGreenDeployment.html"><span
class="s2">Blue-Green Deployments</span></a>. If we call the current live production environment â€œblueâ€, the technique consists of bringing up a parallel â€œgreenâ€ environment with the new version of the software and once everything is tested and ready to go live, you simply switch all user traffic to the â€œgreenâ€ environment, leaving the â€œblueâ€ environment idle. When deploying to the cloud, it is common to then discard the idle environment if there is no need for rollbacks, especially when using <a
href="http://www.thoughtworks.com/insights/blog/rethinking-building-cloud-part-4-immutable-servers"><span
class="s2">immutable servers</span></a>.</span></p><p
class="p1"><span
class="s1">If you are using Amazon Web Services (AWS) as your cloud provider, there are a few options to implement blue-green deployments depending on your systemâ€™s architecture. Since this technique relies on performing a single switch from â€œblueâ€ to â€œgreenâ€, your choice will depend on how you are serving content in your infrastructureâ€™s front-end.</span></p><h2 class="p3"><span
class="s1">Single EC2 instance with Elastic IP</span></h2><p
class="p1"><span
class="s1">In the simplest scenario, all your public traffic is being served from a single EC2 instance. Every instance in AWS is assigned two IP addresses at launch &#8211;Â a private IP that is not reachable from the Internet, and a public IP that is. However, if you terminate your instance or if any failure occurs, those IP addresses are released and you will not be able to get them back.</span></p><p
class="p1"><span
class="s1">An <a
href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html"><span
class="s2">Elastic IP</span></a> is a static IP address allocated to your AWS account that you can assign as the public IP for any EC2 instance you own. You can also reassign it to another instance on demand, by making a simple API call.</span></p><p
class="p1"><span
class="s1">In our case, Elastic IPs are the simplest way to implement the blue-green switch &#8211;Â launch a new EC2 instance, configure it, deploy the new version of your system, test it, and when it is ready for production, simply reassign the Elastic IP from the old instance to the new one. The switch will be transparent to your users and traffic will be redirected almost immediately to the new instance.</span></p><h2 class="p3"><span
class="s1">Multiple EC2 instances behind an ELB</span></h2><p
class="p1"><span
class="s1">If you are serving content through a load balancer, then the same technique would not work because you cannot associate Elastic IPs to ELBs. In this scenario, the current blue environment is a pool of EC2 instances and the load balancer will route requests to any healthy instance in the pool. To perform the blue-green switch behind the same load balancer you need to replace the entire pool with a new set of EC2 instances containing the new version of the software. There are two ways to do this &#8211;Â automating a series of API calls or using AutoScaling groups.</span></p><p
class="p1"><span
class="s1">Every AWS service has an API and a command-line client that you can use to control your infrastructure. The <a
href="http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/Welcome.html"><span
class="s2">ELB API</span></a> allows you to register and de-register EC2 instances, which will either add or remove them from the pool. Performing the blue-green switch with API calls will require you to register the new &#8220;green&#8221; instances while de-registering the &#8220;blue&#8221; instances. You can even perform these calls in parallel to switch faster. However, the switch will not be immediate because there is a delay between registering an instance to an ELB and the ELB starting to route requests to it. This is because the ELB only routes requests to healthy instances and it has to perform a few health checks before considering the new instances as healthy.</span></p><p
class="p1"><span
class="s1">The other option is to use the AWS service known as <a
href="http://aws.amazon.com/autoscaling/"><span
class="s2">AutoScaling</span></a>. ThisÂ allows you to define automatic rules for triggering scaling events;Â either increasing or decreasing the number of EC2 instances in your fleet. To use it, you first need to define a launch configuration that specifies how to create new instances &#8211;Â which AMI to use, the instance type, security group, user data script, etc. Then you can use this launch configuration to create an auto-scaling group defining the number of instances you want to have in your group. AutoScaling will then launch the desired number of instances and continuously monitor the group. If an instance becomes unhealthy or if a threshold is crossed, it will add instances to the group to replace the unhealthy ones or to scale up/down based on demand.</span></p><p
class="p1"><span
class="s1">AutoScaling groups can also be associated with an ELB and it will take care of registering and de-registering EC2 instances to the load balancer any time an automatic scaling event occurs. However the association can only be done when the group is first created and not after it is running. We can use this feature to implement the blue-green switch, but it will require a few non-intuitive steps, detailed here:</span></p><ol
class="ol1"><li
class="li4"><span
class="s1">Create the launch configuration for the new â€œgreenâ€ version of your software.</span></li><li
class="li4"><span
class="s1">Create a new â€œgreenâ€ AutoScaling group using the launch configuration from step 1 and associate it with the same ELB that is serving the â€œblueâ€ instances. Wait for the new instances to become healthy and get registered.</span></li><li
class="li4"><span
class="s1">Update the â€œblueâ€ group and set the desired number of instances to zero. Wait for the old instances to be terminated.</span></li><li
class="li4"><span
class="s1">Delete the â€œblueâ€ AutoScaling group and launch configuration.</span></li></ol><p
class="p1"><span
class="s1">This procedure will maintain the same ELB while replacing the EC2 instances and AutoScaling group behind it. The main drawback to this approach is the delay. You have to wait for the new instances to launch, for the AutoScaling group to consider them healthy, for the ELB to consider them healthy, and then for the old instances to terminate. While the switch is happening there is a period of time when the ELB is routing requests to both â€œgreenâ€ and â€œblueâ€ instances which could have an undesirable effect forÂ your users. Because of that reason, I would probably not use this approach when doing blue-green deployments with ELBs and instead consider the next option &#8211;Â DNS redirection.</span></p><h2 class="p3"><span
class="s1">DNS redirection using Route53</span></h2><p
class="p1"><span
class="s1">Instead of exposing Elastic IP addresses or long ELB hostnames to your users,Â you can have a domain name for all your public-facing URLs. Outside of AWS, you could perform the blue-green switch by changing CNAME records in DNS. In AWS, you can use <a
href="http://aws.amazon.com/route53/"><span
class="s2">Route53</span></a> to achieve the same result. With Route53, you create a hosted zone and define resource record sets to tell the Domain Name System how traffic is routed for that domain.</span></p><p
class="p1"><span
class="s1">You can use Route53 to perform the blue-green switch by bringing up a new â€œgreenâ€ environment &#8211; it could be a single EC2 instance, or an entire new ELB &#8211; then you simply update the resource record set to point the domain/subdomain to the new instance or the new ELB.</span></p><p
class="p1"><span
class="s1">Even though Route53 supports this common DNS approach, there is a better alternative. Route53 has an AWS-specific extension to DNS that integrates better with other AWS services, and is cheaper too &#8211;Â <a
href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html"><span
class="s2">alias resource record sets</span></a>. They work pretty much the same way, but instead of pointing to any IP address or DNS record, they point to a specific AWS resource: a CloudFront distribution, an ELB, an S3 bucket serving a static website, or another Route53 resource record set in the same hosted zone.</span></p><p
class="p1"><span
class="s1">Finally, another way to perform the blue-green switch with Route53 is using <a
href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/WeightedResourceRecordSets.html"><span
class="s2">Weighted Round-Robin</span></a>. This works for both regular resource record sets as well as alias resource record sets. You have to associate multiple answers for the same domain/sub-domain and assign a weight between 0-255 to each entry. When processing a DNS query, Route53 will select one answer using a probability calculated based on those weights. To perform the blue-green switch you need to have an existing entry for the current â€œblueâ€ environment with weight 255 and a new entry for the â€œgreenâ€ environment with weight 0. Then, simply swap those weights to redirect traffic from blue to green.</span></p><p
class="p1"><span
class="s1">The only disadvantage of this approach is that propagating DNS changes can take some time, so you would have no control over when the user will perceive it. The benefits are that you expose human-friendly URLs to your users, the switch happens with near zero-downtime, you can test the new â€œgreenâ€ environment before promoting it, and with weighted round-robin you get the added flexibility of doing canary releasesÂ for free.</span></p><h2 class="p3"><span
class="s1">Environment swap with Elastic Beanstalk</span></h2><p
class="p1"><span
class="s1">The last scenario is when you are deploying your web application to <a
href="http://aws.amazon.com/elasticbeanstalk/"><span
class="s2">Elastic Beanstalk</span></a>, Amazonâ€™s platform-as-a-service offering that supports Java, .Net, Python, Ruby, NodeJS and PHP. Elastic Beanstalk has a built-in concept of an environmentÂ that allows you to run multiple versions of your application,Â as well as the ability to perform zero-downtime releases. Therefore, the blue-green switch simply consists of creating a new â€œgreenâ€ environment and following <a
href="http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html"><span
class="s2">the steps in the documentation</span></a> to perform the swap.</span></p><h2 class="p3"><span
class="s1">Conclusion</span></h2><p
class="p4"><span
class="s1">Blue-Green deployment is an important technique to enable Continuous Delivery. It reduces risk by allowing testing prior to the release of a new version to production, while at the same time enabling near zero-downtime deployments, and a fast rollback mechanism should something go wrong. It is a powerful technique to manage software releases especially when you are using cloud infrastructure. Cloud providers such as AWS enableÂ you to easily create new environments on-demand and provide different options to implement Blue-Green deployments.</span></p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+Implementing+Blue-Green+Deployments+with+AWS+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D437" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/' rel='bookmark' title='Implementando ImplantaÃ§Ãµes Azul-Verde com Amazon Web Services (AWS)'>Implementando ImplantaÃ§Ãµes Azul-Verde com Amazon Web Services (AWS)</a></li><li><a
href='http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/' rel='bookmark' title='AWS Training in Brazil'>AWS Training in Brazil</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/#comments" thr:count="1"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/feed/atom/" thr:count="1"/> <thr:total>1</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[How to Start a Successful Coding Dojo]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2013/07/05/how-to-start-a-successful-coding-dojo/" /> <id>http://www.dtsato.com/blog/?p=199</id> <updated>2013-07-05T20:22:34Z</updated> <published>2013-07-05T20:22:34Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="coding dojo" /><category
scheme="http://www.dtsato.com/blog" term="dojo" /> <summary
type="html"><![CDATA[&#8220;A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in deliberate practiceÂ in order to improve their skills.&#8221; â€” Definition from codingdojo.org I&#8217;ve participated and facilitated many Coding Dojo sessions since 2007 and people have been asking [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2013/07/05/how-to-start-a-successful-coding-dojo/"><![CDATA[<blockquote><p><em>&#8220;A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in deliberate practiceÂ in order to improve their skills.&#8221;</em> â€” Definition from <a
title="What is Coding Dojo?" href="http://codingdojo.org/cgi-bin/wiki.pl?back=WhatIsCodingDojo">codingdojo.org</a></p></blockquote><p>I&#8217;ve participated and facilitated many Coding Dojo sessions since 2007 and people have been asking me this question many times that I decided to answer it in this post: <strong>How can I start a Coding Dojo and how to keep it engaging?</strong></p><p>First of all, I would highly recommend the book <em>&#8220;<a
title="The Coding Dojo Handbook" href="https://leanpub.com/codingdojohandbook">The Coding Dojo Handbook</a>&#8220;</em> by <a
title="Emily Bache" href="http://coding-is-like-cooking.info/">Emily Bache</a>. She dedicates an entire section for tips on how to organize a Coding Dojo. Instead of repeating her advice, I wanted to provide a few tips based on my own experience founding the <a
title="Coding Dojo SÃ£o Paulo" href="http://www.dojosp.org/">Coding Dojo SÃ£o Paulo</a> and running sessions inside ThoughtWorks and at some of our clients.</p><h2>Engage a small group of core members</h2><p>It is important to create a cadence to the meetings and although having different people show up each time is good, I found it very valuable to engage a small group of core members that are almost always there. This creates healthy social pressure to keep things going and gives flexibility when one person cannot attend.</p><p>In the beginning I facilitated most of the sessions, but once the core team got used to the process we started rotating the facilitator role. This also meant that when I had to <a
title="Starting 2008 on the right foot" href="http://www.dtsato.com/blog/2008/01/21/starting-2008-on-the-right-foot/">move to another country</a>, the Coding Dojo did not stop. I knew I left it in the good hands of people like <a
title="Mariana Bravo" href="https://twitter.com/marivb">Mariana</a>, <a
title="Hugo Corbucci" href="https://twitter.com/hugocorbucci">Hugo</a>, <a
title="Thiago Colucci" href="https://twitter.com/ticolucci">Thiago</a>, and although none of us attend the sessions anymore, the Coding Dojo SÃ£o Paulo is still alive and active. New people are running it in different locations throughout SÃ£o Paulo and our mailing list has more than 350 members with new people joining every week.</p><h2>Keep it fresh! Try out new ideas</h2><p>Following the standard meeting styles is a good way to start. InÂ <a
title="Randori" href="http://www.codingdojo.org/cgi-bin/wiki.pl?RandoriKata">Randori</a>Â format only one pair codes while the rest of the audience follows along and the pair rotates every 5-7 minutes; In aÂ <a
title="Prepared Kata" href="http://www.codingdojo.org/cgi-bin/wiki.pl?PreparedKata">Prepared Kata</a> one person is coding all the time and presenting their solution while the audience follows along. These formats are simple but provide enough structure to have a fun and effective session. However, after a while, you should start experimenting with new ideas. This is how we ended up inventing the <a
title="[Agile 2009] Coding Dojo: Kake format at Open Jam" href="http://www.dtsato.com/blog/2009/08/27/agile-2009-coding-dojo-kake-format-at-open-jam/">Kake</a> style in SÃ£o Paulo. A <a
title="Code Retreat" href="http://coderetreat.org/">Code Retreat</a> is another format that became very popular by <a
title="Corey Haines" href="https://twitter.com/coreyhaines">Corey Haines</a>.</p><p>Keeping things fresh doesn&#8217;t only apply to the format of the session. Try experimenting with variations on:</p><ul><li>Programming language</li><li>Creating constraints: like following <a
title="Object Calisthenics" href="http://www.markhneedham.com/blog/2008/11/06/object-calisthenics-first-thoughts/">Object Calisthenics</a> rules or using gigantic font sizes to avoid long lines of code</li><li>Tools and environment: IDEs, text editors, operating systems, testing frameworks</li><li>Design approaches: solving the same kata with different designs or algorithms</li></ul><p>In summary, don&#8217;t let things get stale or boring.</p><h2>Be welcoming and tolerant with new members</h2><p>The Dojo should happen in a safe environment, and as a facilitator you need to create that safety. Be aware of people&#8217;s behaviors during the meeting to avoid things like: speaking over the pair, opening their own laptop and start coding in parallel, big bang changes to the code, rushing to complete the solution in their 5 minutes slot, or usage of language-specific idioms without explanation.</p><p>When I am facilitating the session, if there is one new person in the group, I always go through an <a
title="Coding Dojo Introduction" href="http://www.slideshare.net/dtsato/coding-dojo-introduction">introductory slide deck</a>. It takes me only five minutes to present, but it sets the scene and expectations about what&#8217;s about to happen. I also reinforce the fact that they are not required to code and can simply observe. The only people that will code are those that are willing to do so. I cannot remember how many times I had new participants wanting to be observers and volunteering themselves to step up half-way through the meeting, once they get a sense of what&#8217;s happening.</p><p>Another strategy that I use is to put myself in &#8220;<a
title="Beginner's Mind" href="http://en.wikipedia.org/wiki/Shoshin">beginner&#8217;s mind</a>&#8221; the entire time, and observe people&#8217;s body language during the session. If someone frowns or seem puzzled about something and they don&#8217;t ask, I will ask on their behalf even if I know the answer. Instead of just giving the answer or explaining what happened, I find that by asking the question I demonstrate the behavior I want to encourage. Human beings are good at copying others and once they see someone else doing it, they&#8217;re much more likely to do it themselves.</p><h2>Find your group&#8217;s sustainable pace</h2><p>As I mentioned before, meeting cadence is important. However, you should find the right cadence for your group. When we started the Coding Dojo SÃ£o Paulo, we were so excited that we ran 2 sessions per week. After a while it became clear that this was a hard pace to keep up with, so we switched to weekly meetings. This has shifted over time between bi-weekly and weekly as the group of participants changed.</p><p>If you are running a Coding Dojo inside your company, depending on how much support you get internally, you can run sessions more frequently.</p><p>Another aspect of cadence to adjust is the duration of the meeting. I&#8217;ve participated in sessions that lasted 2 hours or more, but that might not be sustainable for your group. Too short and you don&#8217;t get enough time to learn. Too long and people get tired.</p><p>My advice is to experiment and gather feedback in the retrospective at the end of the session. In my experience the duration should be at least one hour, although 1:30h to 2:00h might be better. And weekly or bi-weekly meetings are the best frequency.</p><h2>Prepare prior to the session</h2><p>A little bit of preparation will help the meeting go smoother. Here are some of the things I&#8217;ve done to prepare:</p><ul><li>Have a pre-selected <a
title="Source of Problems for your Coding Dojo" href="http://www.dtsato.com/blog/2008/10/21/source-of-problems-for-your-coding-dojo/">list of problems</a> for people to choose from</li><li>Decide on the format</li><li>Make sure you have all the equipment you need (keyboards with different layouts, projector, adapters, post-it notes, etc.)</li><li>Environment setup: create the project structure, have an initial skeleton for source files, make sure tests execute</li><li>Order food: in longer meetings or after work hours, I try to get food ordered prior to the session to save time</li><li>Have the <a
title="Coding Dojo Introduction" href="http://www.slideshare.net/dtsato/coding-dojo-introduction">introductory slides</a> at hand</li><li>Send a reminder e-mail confirming location, date, and time</li><li>Engage key participants: if you&#8217;re trying a new language, find a language guru so she can assist during the session; if you&#8217;re doing a prepared kata, make sure the presenter is ready; if you want to share the session outcomes, find someone to be a scribe.</li></ul><h2>Respect the time</h2><p>Finally, try to respect people&#8217;s time. This was especially hard in Brazil since we are all used to being late :-)</p><p>People who arrive on time should be rewarded with an on-time start to get the maximum out of the coding session. Also, respect the timebox when rotating pairs and don&#8217;t let the meeting run longer than you planned. As programmers, we are all passionate about making things work, so stopping half-way through a solution is not an easy ask. However, <strong>the goal of the Coding Dojo is to learn</strong> from each other and not to finish the entire Kata. I would much rather save the last 15 minutes for the group retrospective to discuss what we learned than having a few more rounds of coding without a wrap-up at the end.</p><h2>Take action!</h2><p>Hopefully these tips will help you get off the ground. We have just recently started a Coding Dojo at ThoughtWorks&#8217; San Francisco office so I felt inspired to finally write about this. Let me know if you have more tips on how to run a great Coding Dojo!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+How+to+Start+a+Successful+Coding+Dojo+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D199" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2009/02/09/coding-dojo-london-next-session-is-february-12th/' rel='bookmark' title='Coding Dojo London: Next session is February 12th'>Coding Dojo London: Next session is February 12th</a></li><li><a
href='http://www.dtsato.com/blog/2008/10/21/source-of-problems-for-your-coding-dojo/' rel='bookmark' title='Source of Problems for your Coding Dojo'>Source of Problems for your Coding Dojo</a></li><li><a
href='http://www.dtsato.com/blog/2008/02/24/coding-dojo-sao-paulo-agile-2008/' rel='bookmark' title='Coding Dojo SÃ£o Paulo @ Agile 2008'>Coding Dojo SÃ£o Paulo @ Agile 2008</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2013/07/05/how-to-start-a-successful-coding-dojo/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2013/07/05/how-to-start-a-successful-coding-dojo/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[Refactoring Strategies: a walkthrough experiment]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2011/12/10/refactoring-strategies-a-walkthrough-experiment/" /> <id>http://www.dtsato.com/blog/?p=407</id> <updated>2011-12-12T08:38:08Z</updated> <published>2011-12-10T07:55:02Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="design" /><category
scheme="http://www.dtsato.com/blog" term="intellij" /><category
scheme="http://www.dtsato.com/blog" term="java" /><category
scheme="http://www.dtsato.com/blog" term="mechanics" /><category
scheme="http://www.dtsato.com/blog" term="refactoring" /><category
scheme="http://www.dtsato.com/blog" term="strategy" /><category
scheme="http://www.dtsato.com/blog" term="tdd" /> <summary
type="html"><![CDATA[In my last QCon presentation in SÃ£o Paulo, I gave the audience my take on refactoring strategies. You can check out my slides from that talk on Slideshare (in Portuguese, but you should be able to follow the pictures and code samples). One of my main points is that you need to learn how to [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2011/12/10/refactoring-strategies-a-walkthrough-experiment/"><![CDATA[<p>In my last QCon <a
title="RefatoraÃ§Ã£o em Larga Escala" href="http://www.qconsp.com/palestra/danilo-sato/refatoracao-em-larga-escala" target="_blank">presentation</a> in SÃ£o Paulo, I gave the audience my take on <strong>refactoring strategies</strong>. You can check out my slides from that talk on <a
title="RefatoraÃ§Ã£o em Larga Escala" href="http://www.slideshare.net/dtsato/refatorao-em-larga-escala" target="_blank">Slideshare</a> (in Portuguese, but you should be able to follow the pictures and code samples).</p><p>One of my main points is that you need to learn how to shift between two levels of thinking when you engage in refactoring, each requiring you to develop different sets of skills. I called them: <strong>Mechanic vs. Strategic</strong>.</p><p><strong>Mechanics</strong> is important because you should be doing small, incremental, and <a
title="Opportunistic Refactoring" href="http://martinfowler.com/bliki/OpportunisticRefactoring.html" target="_blank">opportunistic refactorings</a> all the time while you develop code. It&#8217;s not a coincidence that TDD has an explicit step of refactoring after you tests are green. In order to improve the design of your code you should master how to perform these small steps well. A lot of the modern IDEs &#8211; especially in static typed languages &#8211; provide great support for this and you should learn how to use them well.</p><p>On a <strong>strategic</strong> level, you have to be able to take a step back and understand the big picture of what you&#8217;re trying to achieve. While it&#8217;s important to know how to perform individual refactorings, it&#8217;s more important at this level to know how to compose them in order to achieve the design improvement you desire.</p><p>One of the examples I used to demonstrate this, was inspired by a <a
title="Refactoring Experiment" href="http://paulhammant.com/2011/09/01/refactoring-experiment/" target="_blank">blog entry</a> that Paul Hammant published a few weeks before my talk. I got some feedback that it was hard to follow the code changes on the slides, so I decided to record a small video of me tackling his refactoring experiment.</p><p>In the following video, the strategy is not overly complex: extracting a few methods from a single controller into separate controllers. However, you will see how the order of steps you use can affect the refactoring, making your job harder or easier. You should also be able to pick up a lot of the mechanics along the way:</p><p><iframe
src="http://player.vimeo.com/video/33403686?portrait=0" frameborder="0" width="601" height="338"></iframe></p><p>You can find some of my attempts in branches on this <a
title="Github: Refactoring Experiment" href="https://github.com/dtsato/refactoring_experiment" target="_blank">Github repository</a>. If you want to try it out for yourself, or to take this experiment further, these are some of the things I would explore:</p><ul><li>The <code>Upseller</code> class should have it&#8217;s own tests, and I missed the <code>@Component</code> and <code>@Scope("request")</code> annotations that would probably be caught by integration tests.</li><li>Using Mockito or some other mocking framework to mock collaborators, and adding more behaviour to the domain model objects since using <code>toString</code> for testing is not something I would particularly do in real life.</li><li>Perhaps I could&#8217;ve used <code>git stash</code> instead of <code>git reset</code> to save the initial refactoring steps and later reapplying it assuming the merge would be simple.</li><li>The path I took is not the only one and you can probably explore different refactoring steps and different approaches to get to the goal.</li></ul><p>I would like to thank Paul Hammant for coming up with this experiment and for encouraging me to publish this screencast. Please send me some feedback if you think this was useful or helpful for you!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+Refactoring+Strategies%3A+a+walkthrough+experiment+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D407" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2008/04/07/git-tip-for-brazilians/' rel='bookmark' title='Git tip for Brazilians'>Git tip for Brazilians</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2011/12/10/refactoring-strategies-a-walkthrough-experiment/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2011/12/10/refactoring-strategies-a-walkthrough-experiment/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[Agile Brazil 2011 &#8211; I&#8217;m going!]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/" /> <id>http://www.dtsato.com/blog/?p=401</id> <updated>2011-06-09T06:35:13Z</updated> <published>2011-06-09T06:35:13Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agilebrazil" /><category
scheme="http://www.dtsato.com/blog" term="conference" /><category
scheme="http://www.dtsato.com/blog" term="refactoring" /><category
scheme="http://www.dtsato.com/blog" term="talk" /><category
scheme="http://www.dtsato.com/blog" term="technical debt" /><category
scheme="http://www.dtsato.com/blog" term="thoughtworks" /><category
scheme="http://www.dtsato.com/blog" term="user stories" /> <summary
type="html"><![CDATA[Clique aqui para ler em PortuguÃªs I&#8217;m excited to be going to Fortaleza at the end of this month to present and organize Agile Brazil 2011. Last year in Porto Alegre I decided to focus on the organization aspects of the conference, but this year I decided to present again. Even though I&#8217;ve been participating [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/"><![CDATA[<p><a
href="#agile-brazil-2011-im-going-pt_br">Clique aqui para ler em PortuguÃªs</a></p><p><a
href="http://www.agilebrazil.com/2011/pt/" target="_blank"><img
class="alignleft" src="http://www.agilebrazil.com/2011/pt/imagens/banner-250.png" alt="Agile Brazil 2011" width="150" height="212" /></a></p><p>I&#8217;m excited to be going to Fortaleza at the end of this month to present and organize <a
title="Agile Brazil 2011" href="http://www.agilebrazil.com" target="_blank">Agile Brazil 2011</a>. Last year in Porto Alegre I decided to focus on the organization aspects of the conference, but this year I decided to present again. Even though I&#8217;ve been participating in conferences around the world, my last talk in Brazil was in 2008 and I really miss being around the Brazilian community and sharing experiences with everyone. That&#8217;s why I&#8217;m happy to be presenting in (mostly) Portuguese again :-)</p><h3>Managing your technical debt &#8211; June 29th</h3><p>In this <a
title="Managing your technical debt" href="http://www.agilebrazil.com/2011/pt/detalhes.php#280" target="_blank">50 minutes talk</a>, I will cover a few practices and ideas I&#8217;ve used and seen used in projects to manage technical debt responsibly. Some of the topics I will cover are:</p><ul><li>What is technical debt and what are the consequences of incurring it</li><li>Ideas on how to identify &#8220;hot spots&#8221;</li><li>How to prioritize and plan the payment of your debt</li><li>Tracking and visibility</li><li>How to avoid incurring debt</li><li>Communicating the importance of paying technical debt to non-technical managers and stakeholders</li></ul><h3>Slicing and dicing your user stories &#8211; July 1st</h3><p>Co-presenting with <a
title="Jenny Wong's blog" href="https://jcwong.wordpress.com/" target="_blank">Jenny</a>, in this <a
title="Slicing and dicing your user stories" href="http://www.agilebrazil.com/2011/pt/detalhes.php#318" target="_blank">50 minutes talk</a> we will discuss the benefits of working with small user stories, and present different ways to split requirements into user stories. The session will cover topics related to:</p><ul><li>What makes good user stories</li><li>How to break down features into smaller chunks without losing track of the overall goal</li><li>Different ways to split stories into vertical slices</li><li>Helping stakeholders to track and understand how the feature will be delivered piece by piece</li><li>Planning the delivery to increase feedback</li></ul><h3>Refactoring Katas &#8211; July 1st</h3><p>In this <a
title="Refactoring Katas" href="http://www.agilebrazil.com/2011/pt/detalhes.php#325" target="_blank">10 minutes Lightning Talk</a>, I&#8217;ll share an idea I&#8217;ve been using to practice refactoring. Using a different Kata format, I will explain the mechanics and quickly demonstrate it in practice.</p><p>If you haven&#8217;t registered yet, you can still <a
title="Register for Agile Brazil 2011" href="http://submissoes.agilebrazil.com/attendees/new" target="_blank">register online</a>. And if you are around Rio and SÃ£o Paulo the following week, I will be giving <strong>ThoughtWorks&#8217; <a
title="AWS Training" href="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/">AWS Training</a></strong>, which you can <a
title="ThoughtWorks AWS Training" href="http://www.thoughtworks.com/aws-training" target="_blank">register here</a>. I&#8217;m looking forward to seeing you in Fortaleza!</p><hr
/><h2><a
name="agile-brazil-2011-im-going-pt_br">Agile Brazil 2011 &#8211; Eu vou!</a></h2><p>Estou empolgado com a viagem para Fortaleza no final do mÃªs para participar e organizar a <a
title="Agile Brazil 2011" href="http://www.agilebrazil.com" target="_blank">Agile Brazil 2011</a>. No ano passado em Porto Alegre, eu decidi me focar mais na organizaÃ§Ã£o do evento, mas esse ano resolvi apresentar. Mesmo estando participando de diversas conferÃªncias ao redor do mundo, minha Ãºltima palestra no Brasil foi em 2008 e eu sinto saudade de estar compartilhando experiÃªncias com a comunidade brasileira. Ã‰ por isso que estou feliz por apresentar (na maior parte) em PortuguÃªs novamente :-)</p><h3>Gerenciando sua dÃ­vida tÃ©cnica &#8211; 29 de Junho</h3><p>Nessa <a
title="Gerenciando sua dÃ­vida tÃ©cnica" href="http://www.agilebrazil.com/2011/pt/detalhes.php#280" target="_blank">palestra de 50 minutos</a>, eu vou apresentar algumas idÃ©ias e prÃ¡ticas que tenho usado para gerenciar dÃ­vida tÃ©cnica de forma responsÃ¡vel. Alguns dos tÃ³picos que irei abordar:</p><ul><li>O que Ã© dÃ­vida tÃ©cnica? Quais os sintomas mais comuns e qual as consequÃªncias do acÃºmulo de dÃ­vida tÃ©cnica?</li><li>Formas de identificar e encontrar â€œ<em>hot spots</em>â€</li><li>Como priorizar e planejar o pagamento da dÃ­vida</li><li><em>Tracking</em> e visibilidade</li><li>Como evitar o acÃºmulo</li><li>IdÃ©ias para convencer gerentes e pessoas sem conhecimento tÃ©cnico sobre a importÃ¢ncia de pagar a dÃ­vida</li></ul><h3>Slicing and dicing your user stories &#8211; 1 de Julho</h3><p>Apresentado junto com a <a
title="Jenny Wong's blog" href="https://jcwong.wordpress.com/" target="_blank">Jenny</a>, essa <a
title="Slicing and dicing your user stories" href="http://www.agilebrazil.com/2011/pt/detalhes.php#318" target="_blank">palestra de 50 minutos</a> vai discutir os benefÃ­cios de usar <em>user stories</em> pequenas e apresentar diferentes formas de dividir requisitos em histÃ³rias. A palestra vai cobrir tÃ³picos sobre:</p><ul><li>CaracterÃ­sticas de boas <em>user stories</em></li><li>Como quebrar funcionalidades em pedaÃ§os pequenos sem perder a visÃ£o do todo</li><li>Diferentes idÃ©ias para quebrar requisitos em fatias verticais</li><li>Formas de ajudar <em>stakeholders </em>a rastrear e entender como uma funcionalidade serÃ¡ entregue em pedaÃ§os menores</li><li>Planejamento da entrega para maximizar o <em>feedback</em></li></ul><h3>Refactoring Katas &#8211; 1 de Julho</h3><p>Nessa <a
title="Refactoring Katas" href="http://www.agilebrazil.com/2011/pt/detalhes.php#325" target="_blank">Lightning Talk de 10 minutos</a>, vou compartilhar uma ideia que tenho usado para praticar refatoraÃ§Ã£o. Usando um formato de Kata diferente, vou explicar a mecÃ¢nica do exercÃ­cio e demonstrar um pouco como ela funciona na prÃ¡tica.</p><p>Se vocÃª ainda nÃ£o se inscreveu, ainda pode se <a
title="InscriÃ§Ã£o para Agile Brazil 2011" href="http://submissoes.agilebrazil.com/attendees/new" target="_blank">inscrever online</a>. E caso esteja por perto no Rio e em SÃ£o Paulo na semana seguinte, estarei ministrando o <strong><a
title="AWS Training" href="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/">Treinamento AWS</a> da ThoughtWorks</strong>, que vocÃª pode se <a
title="ThoughtWorks AWS Training" href="http://www.thoughtworks.com/aws-training" target="_blank">inscrever aqui</a>. Vejo vocÃªs em Fortaleza!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+Agile+Brazil+2011+%E2%80%93+I%E2%80%99m+going%21+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D401" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/' rel='bookmark' title='[Agile Brazil 2010] Martin Fowler for the first time in Brazil!'>[Agile Brazil 2010] Martin Fowler for the first time in Brazil!</a></li><li><a
href='http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/' rel='bookmark' title='[Agile Brazil 2010] Session submission postponed and logo contest'>[Agile Brazil 2010] Session submission postponed and logo contest</a></li><li><a
href='http://www.dtsato.com/blog/2010/02/03/agile-brazil-2010-opens-for-session-submissions/' rel='bookmark' title='Agile Brazil 2010 opens for session submissions!'>Agile Brazil 2010 opens for session submissions!</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[AWS Training in Brazil]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/" /> <id>http://www.dtsato.com/blog/?p=393</id> <updated>2011-06-07T05:39:31Z</updated> <published>2011-06-07T05:39:31Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agilebrazil" /><category
scheme="http://www.dtsato.com/blog" term="aws" /><category
scheme="http://www.dtsato.com/blog" term="cloud" /><category
scheme="http://www.dtsato.com/blog" term="thoughtworks" /><category
scheme="http://www.dtsato.com/blog" term="training" /><category
scheme="http://www.dtsato.com/blog" term="twbr" /> <summary
type="html"><![CDATA[Clique aqui para ler em PortuguÃªs With my visit to Brazil to attend Agile Brazil 2011, ThoughtWorks is organizing two classes of our AWS (Amazon Web Services) training in Brazil. If you are near Rio de Janeiro on July 6th or near SÃ£o Paulo on July 7th, don&#8217;t miss the chance to participate! ThoughtWorks AWS [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/"><![CDATA[<p><a
href="#aws-training-in-brazil-pt_br">Clique aqui para ler em PortuguÃªs</a></p><p>With my visit to Brazil to attend <a
title="Agile Brazil 2011" href="http://www.agilebrazil.com" target="_blank">Agile Brazil 2011</a>, ThoughtWorks is organizing two classes of our AWS (Amazon Web Services) training in Brazil. If you are near <strong>Rio de Janeiro on July 6th</strong> or near <strong>SÃ£o Paulo on July 7th</strong>, don&#8217;t miss the chance to participate!</p><p><a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank"><strong>ThoughtWorks AWS Training</strong></a> is a one-day, hands-on training course for developers, systems administrators and all technologists who want to embark on a technical deep-dive of Amazonâ€™s powerful AWS tools. Developed in partnership with Amazon, the class will lead you through the AWS infrastructure services, and show you how to architect and deploy your applications â€œin the cloudâ€.</p><h3>Target Audience</h3><ul><li>Developers</li><li>Architects</li><li>System Administrators</li><li>Technologists in general</li></ul><h3>Prerequisites</h3><ul><li>Basic Unix command line experience required. No previous AWS experience necessary</li><li>AWS account configured and setup (registered directly with Amazon)</li></ul><h3>What you&#8217;ll learn</h3><ul><li>Understand how Amazon EC2, S3, EBS, VPC, CloudFront and other services work together to form a scalable web architecture</li><li>Gain hands-on experience provisioning machines, managing storage, caching content at network endpoints, and more</li><li>Walk through migrating systems from internal infrastructure to Amazon</li><li>Understand use cases, best practices, and tips to make cloud computing easier</li></ul><h3>Topics</h3><ul><li>Introduction to Amazon Web Services</li><li>S3 (Simple Storage Service)</li><li>CloudFront and Import/Export</li><li>EC2 (Elastic Compute Cloud), Availabitilty Zones, and Regions</li><li>EBS (Elastic Block Storage)</li><li>Managing security</li><li>ELB (Elastic Load Balancing)</li><li>CloudWatch and AutoScaling</li><li>VPC (Virtual Private Cloud)</li><li>RDS (Relational Database Service)</li><li>Architecture / Migrating systems to AWS</li></ul><h3>More Information</h3><p>For more information about prices and registration, please go to <a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank">the training&#8217;s page</a> on <a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank">ThoughtWorks&#8217;</a> website. If you have any questions, get in touch or leave a comment here!</p><hr
/><h2><a
name="aws-training-in-brazil-pt_br">Treinamento AWS no Brasil</a></h2><p>Aproveitando minha visita ao Brasil para participar da <a
title="Agile Brazil 2011" href="http://www.agilebrazil.com" target="_blank">Agile Brazil 2011</a>, a ThoughtWorks vai promover duas turmas do nosso treinamento do AWS (Amazon Web Services) no Brasil. Se vocÃª estÃ¡ perto do <strong>Rio de Janeiro no dia 6 de Julho</strong> ou perto de <strong>SÃ£o Paulo no dia 7 dia Julho</strong>, nÃ£o perca a chance de participar!</p><p>O treinamento <a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank"><strong>Amazon Web Services (AWS) da ThoughtWorks</strong></a> Ã© um workshop de um dia para desenvolvedores, administradores de sistema e pessoas interessadas em tecnologia que querem embarcar numa experiÃªncia <em>&#8220;hands-on&#8221;</em> das poderosas ferramentas do AWS. Desenvolvido pela ThoughtWorks em parceria com a Amazon, esse curso vai guiÃ¡-lo atravÃ©s dos serviÃ§os de infra-estrutura do AWS e mostrar como arquitetar e fazer deploy de suas aplicaÃ§Ãµes &#8220;na nuvem&#8221;.</p><h3>PÃºblico-Alvo</h3><ul><li>Desenvolvedores</li><li>Arquitetos</li><li>Administradores de Sistema</li><li>Interessados em Tecnologia em geral</li></ul><h3>PrÃ©-Requisitos</h3><ul><li>Conhecimento bÃ¡sico em linha de comando (terminal)</li><li>Conta configurada com acesso ao AWS (registre-se diretamente com a Amazon)</li></ul><h3>BenefÃ­cios</h3><ul><li>Entender como EC2, S3, EBS, VPC, CloudFront e outros serviÃ§os do AWS trabalham em conjunto para criar uma arquitetura web escalÃ¡vel.</li><li>Ganhar experiÃªncia &#8220;<em>hands-on</em>&#8221; provisionando servidores,  gerenciando armazenamento, fazendo cache de conteÃºdo em CDN, e  mais.</li><li>Discutir formas de migraÃ§Ã£o de sistema internos para insfra-estrutura na Amazon.</li><li>Entender os casos de uso, boas prÃ¡ticas, e dicas de como aproveitar computaÃ§Ã£o em nuvem de forma efetiva.</li></ul><h3>TÃ³picos</h3><ul><li>IntroduÃ§Ã£o ao Amazon Web Services</li><li>S3 (Simple Storage Service)</li><li>CloudFront e Import/Export</li><li>EC2 (Elastic Compute Cloud) e RegiÃµes</li><li>EBS (Elastic Block Storage)</li><li>Gerenciamento de seguranÃ§a</li><li>ELB (Elastic Load Balancing)</li><li>CloudWatch e AutoScaling</li><li>VPC (Virtual Private Cloud)</li><li>RDS (Relational Database Service)</li><li>Arquitetura / MigraÃ§Ã£o de sistemas para o AWS</li></ul><h3>Maiores InformaÃ§Ãµes</h3><p>Para maiores informaÃ§Ãµes sobre preÃ§os e formas de inscriÃ§Ã£o, por favor acesse a <a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank">pÃ¡gina do treinamento</a> no site da <a
title="AWS Training - ThoughtWorks" href="http://www.thoughtworks.com/aws-training" target="_blank">ThoughtWorks</a> e preencha o formulÃ¡rio de contato. Caso tenha alguma dÃºvida, entre em contato ou deixe um comentÃ¡rio aqui!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+AWS+Training+in+Brazil+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D393" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2014/05/06/implementing-blue-green-deployments-with-aws/' rel='bookmark' title='Implementing Blue-Green Deployments with AWS'>Implementing Blue-Green Deployments with AWS</a></li><li><a
href='http://www.dtsato.com/blog/2014/05/07/implementando-implantacoes-azul-verde-com-amazon-web-services-aws/' rel='bookmark' title='Implementando ImplantaÃ§Ãµes Azul-Verde com Amazon Web Services (AWS)'>Implementando ImplantaÃ§Ãµes Azul-Verde com Amazon Web Services (AWS)</a></li><li><a
href='http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/' rel='bookmark' title='Agile Brazil 2011 &#8211; I&#8217;m going!'>Agile Brazil 2011 &#8211; I&#8217;m going!</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/#comments" thr:count="7"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2011/06/07/aws-training-in-brazi/feed/atom/" thr:count="7"/> <thr:total>7</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[[XP 2010] Report of second day (Wednesday)]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2010/07/19/xp-2010-report-of-second-day/" /> <id>http://www.dtsato.com/blog/?p=388</id> <updated>2010-07-19T20:21:10Z</updated> <published>2010-07-19T20:21:10Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agile" /><category
scheme="http://www.dtsato.com/blog" term="conference" /><category
scheme="http://www.dtsato.com/blog" term="xp" /><category
scheme="http://www.dtsato.com/blog" term="xp2010" /> <summary
type="html"><![CDATA[The second day of the conference was one of the busiest for me, and it started with a great keynote&#8230; Keynote: Leveraging Diversity in Parallel: Perspective, Heuristics and Oracles &#8211; Scott Page Scott Page, author of &#8220;Complex Adaptive Systems: an introduction to computational models of social life&#8221; and &#8220;The Difference: how the power of diversity [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2010/07/19/xp-2010-report-of-second-day/"><![CDATA[<p>The second day of the conference was one of the busiest for me, and it started with a great keynote&#8230;</p><p
style="text-align: center;"><a
href="http://www.flickr.com/photos/jnywong/4677350182"><img
class="aligncenter" src="http://farm5.static.flickr.com/4056/4677350182_d3d844b271_m.jpg" alt="" width="240" height="180" /></a></p><h2>Keynote: Leveraging Diversity in Parallel: Perspective, Heuristics and Oracles &#8211; Scott Page</h2><p>Scott Page, author of <em>&#8220;Complex Adaptive Systems: an introduction to  computational models of social life&#8221;</em> and <em>&#8220;The Difference: how the power of diversity creates better groups, firms, schools, and societies&#8221;</em>, gave the introductory keynote on the topic of diversity. His talk was one of the most interesting of the conference to me, since he showed the &#8220;algebra of collaboration&#8221; or, in other words, what are the factors that make diversity work in a team. A few of the highlights for me were:</p><ul><li>The importance of bringing different perspectives to the table: his example of playing the card game &#8220;Sum to 15&#8243; as Tic-Tac-Toe was really good.</li><li>When it comes to problem solving, hardness is not the same as complexity: in hard problems, the solution space have lots of peaks (hard to find the global optimum); in complex problems, the solution space moves (even if an optimum is found now, the entire landscape might change due to external conditions).</li><li>I&#8217;ve read about the Wisdom of Crowds before and saw <a
href="http://en.wikipedia.org/wiki/James_Surowiecki">James Surowiecki&#8217;s</a> keynote at <a
href="http://www.dtsato.com/blog/tag/agile2008/">Agile 2008</a>, but Scott showed the formula behind it: <strong>crowd error = average error &#8211; diversity</strong>. In other words, the amount of diversity will decrease the average error of a crowd.</li><li><a
href="http://www.netflixprize.com/">Netflix Prize</a>: an amazing story about a three-year-long contest put up by Netflix to beat on their own algorithm that predicts how much someone is going to enjoy a movie based on their preferences. What started as a competition to come up with the best algorithm, ended up in a race to collaboration, when the teams running for the prize started combining their approaches and finding that the diversity on the combined algorithm would yield a better result than any of the solutions in isolation. You can read more about this story <a
href="http://en.wikipedia.org/wiki/Netflix_Prize">here</a>.</li></ul><blockquote><p>&#8220;Diversity becomes more valuable as the problem becomes harder and harder&#8221; &#8212; Scott Page</p></blockquote><h2>Thawing the &#8220;Design Winter&#8221; &#8211; Michael Feathers</h2><p>The second talk I attended in the morning was about how there&#8217;s not much going on in the software design space lately. Michael Faethers started off noting that our industry is very generational: a lot of the innovation on development techniques in the past, were followed by a wave of design books around the topic (Structured programming, then Structured Analysis and Design; Object-Orientation, then OO Analysis and Design; and so on). Michael said he decided to stop when he saw the book <em>&#8220;Aspect Oriented Programming with Use Cases&#8221;</em> :-) But with Agile techniques, the last good reference about design was Martin Fowler&#8217;s <em>&#8220;Is Design Dead?&#8221;</em>, from the early 2000&#8217;s. Some of Michael&#8217;s points on the topic were:</p><ul><li><strong>Design happens around constraints:</strong> everytime there are decisions to be made around how to develop a given piece of software, there will be design happening.</li><li><strong>Architecture is design:</strong> people should acknowledge that and recognise software architecture as design.</li><li>Look at design as the composition of &#8220;things&#8221;, not just classes.</li><li>Design are the trade-offs and the discussions you make when taking a particular decision.</li></ul><p>I found it an interesting take on the topic, and agree with most of his claims about software design. I personally think that, as a TDD practitioner, I spend a lot of the time doing design (coding is a design activity, not just typing). I also agree that we need to think about design in a higher level, when defining the system/application architecture: those are the decisions that will be hard to change. To me it&#8217;s about being able to combine those early-and-hard-to-make decisions with the emergent aspects that you will discover with time, as your system evolve. What you can&#8217;t expect is to get it right on the first time, but be flexible enough to incorporate your learnings into something that can evolve.</p><h2>The Five Habits of Successful Lean Development &#8211; Mary Poppendieck</h2><p>This was the only session I ended up attending on the topic of Lean/Kanban on this conference. Mary summarised 5 habits of successful lean teams:</p><ul><li><strong>Purpose</strong> &#8211; <em>&#8220;Why are you doing it?&#8221;</em> In lean companies, workers have a high sense of purpose and understand how their jobs relate to the common goal/vision of the company.</li><li><strong>Passion</strong> &#8211; <em>&#8220;We Care&#8221;</em> Having individuals with intrinsic motivation will produce high quality results.</li><li><strong>Professionalism</strong> &#8211; <em>&#8220;Build the right thing&#8221;</em> customers don&#8217;t want software. If they could get the same thing without software, they would go there. But also <em>&#8220;Build the thing right&#8221;</em> as simple as possible &#8211; and no simpler</li><li><strong>Pride</strong> &#8211; Expect local decisions, and push them to the front-line workers. They are effectively engaged in delivering superior customer outcomes.</li><li><strong>Profit</strong> &#8211; <em>&#8220;GM stays in business to make money. Toyota makes money to stay in business.&#8221;</em></li></ul><p>As catchy as it sounds to summarise Lean into these &#8220;5 Ps&#8221; mnemonics, I found it to be just a partial view into the topic. Other strong aspects of Lean are the focus on <strong>people</strong>, and on leaders taking an active role as teachers. These were some of the things I would also expect to see in a lean organisation that I found missing on this &#8220;5 Ps&#8221; view.</p><h2>Done Considered Harmful &#8211; Marcus Ahnve</h2><p>This was a lightning talk by my friend Marcus, and I found it really interesting. It was provocative, by picking on a widely discussed concept in Scrum: the Definition of Done (and things like <em>Done-Done</em>, or <em>Ready-Ready</em>). Marcus&#8217; point is that by calling it &#8220;Done&#8221;, it creates a fake state that usually translates to a hand-off to a different team, or a partial completion state that encourages local optimization. From Lean thinking we know that hand-offs are usually a big source of waste (along with the queues that are usually associated with it).</p><p>I was worried he would only present the problem in the talk, but was otherwise pleased with the approach he suggests to tackle this problem: instead of &#8220;Done&#8221;, call the state by what it represents (e.g. &#8220;Ready for deployment&#8221;, &#8220;In UAT&#8221;, &#8220;In Production&#8221;). Look at the last column in your wall from a hand-off perspective and treat it as inventory in the end-to-end value stream: you might be accumulating WIP and optimizing locally instead of improving the overall effectiveness of your value stream.</p><h2>Test Automation at Enterprise Scale &#8211; Mark Streibeck</h2><p>This was the technical session I most enjoyed in the conference. Mark talked about the story behind creating Google&#8217;s infrastructure to run tests in a massive scale, across teams and codebases, and to provide useful feedback and reports to their developers and teams. Some of the highlights for me were:</p><ul><li><strong>Scale of the system:</strong> they run 60M tests/day, including browser tests (cross-browser and running multiple configurations). More than 1700 projects use it (they account that ~80% of all tests are run on this system). The system runs in ~5000 cores.</li><li><strong>Sharing their challenges:</strong> this project involved a lot of infrastructure work, which took a lot of time at the beginning of the project, to come up with a scalable architecture. Also, they had to design a UI for a system that solves a known problem in a different way. They also had a lot of work when integrating with various heterogeneous build/test systems that were already in place accross different teams.</li><li><strong>Rollout process:</strong> the way they planned and executed the rollout across the company: starting with a few <em>&#8220;early innovators&#8221;</em>, organic rolling our to a few <em>&#8220;early adopters&#8221;</em>, and using feedback from these early teams to &#8220;fix it&#8221; when helping the <em>&#8220;early majority&#8221;</em> (they even had setup a day where the entire software engineering group could fix things to make the system better.)</li><li><strong>Creativity when solving problems:</strong> one of the biggest problems on building and running tests was fixing dependencies issues for projects. Instead of tackling the difficult task to try and solve those issues as a system feature, they focused on improving the way that these issues are displayed on the UI. Just showing the dependencies and letting the teams see it and fix it by themselves proved to be a much simpler solution to the problem.</li></ul><h2>Conference Banquet and Keynote</h2><p>The second day finished with a keynote and banquet at the Student Society building. The keynote was presented by BjÃ¸rn Alterhaug and John PÃ¥l Inderberg, and the topic was <em>&#8220;Improvisation: Between Panic and Boredom. Perspectives on teamwork, dialogue and presence in music and other contexts&#8221;</em>. It was a very interesting talk about improvisation in music but, most of all, it showed me how practice can lead to mastery: the dynamics between the two musicians and how they communicate to each other through music was a fine example of highly skilled individuals that can achieve incredible results in a highly collaborative environment. A great talk to an Agile audience :-)</p><p>The evening finished with an amazing banquet and more music concerts, including a <a
href="http://www.keepofkalessin.no/">&#8220;Keep of Kalessin&#8221;</a> show &#8211; an Epic Metal norwegian band.</p><p
style="text-align: center;"><a
href="http://www.flickr.com/photos/dtsato/4809800978"><img
class="aligncenter" src="http://farm5.static.flickr.com/4139/4809800978_494267ced5_m.jpg" alt="" width="180" height="240" /></a></p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+%5BXP+2010%5D+Report+of+second+day+%28Wednesday%29+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D388" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2010/06/30/xp-2010-report-first-day/' rel='bookmark' title='[XP 2010] Report of first half-day (Tuesday)'>[XP 2010] Report of first half-day (Tuesday)</a></li><li><a
href='http://www.dtsato.com/blog/2008/11/07/falando-em-agile-conference-report/' rel='bookmark' title='[Falando em Agile] Conference Report'>[Falando em Agile] Conference Report</a></li><li><a
href='http://www.dtsato.com/blog/2008/09/02/agile-2008-new-product-development-toyota/' rel='bookmark' title='[Agile 2008] New Product Development @ Toyota'>[Agile 2008] New Product Development @ Toyota</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2010/07/19/xp-2010-report-of-second-day/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2010/07/19/xp-2010-report-of-second-day/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[[XP 2010] Report of first half-day (Tuesday)]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2010/06/30/xp-2010-report-first-day/" /> <id>http://www.dtsato.com/blog/?p=383</id> <updated>2010-06-30T00:27:45Z</updated> <published>2010-06-30T00:27:45Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agile" /><category
scheme="http://www.dtsato.com/blog" term="conference" /><category
scheme="http://www.dtsato.com/blog" term="xp" /><category
scheme="http://www.dtsato.com/blog" term="xp2010" /> <summary
type="html"><![CDATA[Tuesday was the first day of the XP2010 Conference, being held in beautiful Trondheim, Norway. I was on a morning flight from Oslo and only managed to arrive at the venue in the afternoon. It was nice to see a lot of my friends again &#8211; so far, I managed to count 8 Brazilians, which [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2010/06/30/xp-2010-report-first-day/"><![CDATA[<p>Tuesday was the first day of the <a
href="http://www.xp2010.org">XP2010 Conference</a>, being held in beautiful Trondheim, Norway. I was on a morning flight from Oslo and only managed to arrive at the venue in the afternoon. It was nice to see a lot of my friends again &#8211; so far, I managed to count 8 Brazilians, which is probably the highest number in XP conferences so far :-)</p><p
style="text-align: center;"><a
href="http://www.flickr.com/photos/jnywong/4663765362"><img
class="aligncenter" src="http://farm5.static.flickr.com/4035/4663765362_1f5d99e198_m.jpg" alt="" width="240" height="180" /></a></p><h2>Functional Programming with XP &#8211; Amanda Laucher</h2><p>The first talk I attended in the afternoon was from my friend Amanda Laucher. She presented on an interesting topic, discussing how Functional Programming languages and concepts can relate to today&#8217;s Agile practices and principles. Some of the lessons that I took away from her session were:</p><ul><li> <strong>Functional Programming and Testing:</strong> she talked about different aspects of Functional Programming and how you can approach testing them. Things like: testing for lazyness, testing monads, minimizing side-effects, testing on strong vs. weak typed languages, testing on static vs. dynamic typed languages (and useful tools like <a
href="http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck">quickcheck</a>). Even though I don&#8217;t have a lot of professional experience in FP languages, one particular topic resonated quite strong with my experience: <em>&#8220;you need to know FP before you TDD in FP&#8221;</em>. On our Coding Dojo in SÃ£o Paulo, we learned a similar lesson when trying to TDD algorithms: you need to have an idea of how to solve the problem before you drive your solution with TDD. If you don&#8217;t know how to solve your problem, TDD won&#8217;t give you the solution.</li><li><strong>How to learn a new language:</strong> I really liked Amanda&#8217;s pragmatic approach to learning new languages. I particularly liked her reference to the <a
href="http://github.com/relevance/functional-koans">Functional Koans</a>, specifically designed to teach you features of a new language by giving you failing tests that you need to understand and fix. This approach separates the learning of the language, from the learning of the testing tool, or TDD. This is a problem I found when trying to learn a new language by first looking for the testing frameworks available, before understanding the languages&#8217; constructs and concepts.</li></ul><h2>System Metaphor revisited: The lost XP practice &#8211; Joshua Kerievsky</h2><p>My second session of the day was Joshua Kerievsky&#8217;s take on the System Metaphor, an XP practice that he asked on his review of Kent Beck&#8217;s second edition of the XP book to be removed, and that has been later applied with great success on Industrial Logic&#8217;s main product.</p><p>He first talked about metaphors in general: how they link a source domain to a target domain, how they&#8217;re always partial, and how people need to have experienced the metaphor in the source in order to apply it to the target. He also briefly compared the role of a System Metaphor with the Ubiquitous Language, as described by Eric Evans on Domain-Driven Design (this is something <a
href="http://www.dtsato.com/blog/2008/04/13/what-happened-to-the-system-metaphor/">I came across a while ago too</a>). Finally, Joshua described the benefits of a System Metaphor, summarising them on the <strong>three I&#8217;s</strong>:</p><ul><li> <strong>Illumination:</strong> when the chosen metaphor is good, it will provide illumination into aspects of the system design, clarifying unfamiliar design via a familiar domain. It will help describe not only static structure, but also the runtime behaviour of the system. I particularly liked how he described two ways of understanding the Composite pattern using concepts from the music metaphor.</li><li><strong>Inspiration:</strong> a good metaphor will also provide inspiration for new ideas. It provides a system of names from which these ideas may flourish. You might consider ideas from the source domain and evaluate how to apply them to the target. The only thing you need to be careful is that the metaphor is partial, so stretching it to fit your situation might not always be a good idea.</li><li><strong>Integrity: </strong>when the source has a rich, familiar set of related parts, it will provide more integrity when applying it to your target. It will also have more integrity when the mapping between the source and the target is strong. If integrity is high, mixing other metaphors won&#8217;t weaken the overall structure.</li></ul><p>What I found interesting on Industrial Logic&#8217;s use of the System Metaphor is that it is visible to the users of the system. If you&#8217;re taking one of their eLearning courses, you can see and interact with concepts from the music metaphor such as albums and playlists. The previous examples I&#8217;ve heard about uses of the System Metaphor were internal to the team and the business stakeholders, to improve communication. You can read more about how they discovered and applied the music metaphor <a
href="https://elearning.industriallogic.com/gh/submit?Action=PageAction&amp;album=welcome&amp;path=welcome/metaphor&amp;devLanguage=Java">here</a>.</p><h2>Conference reception &#8211; Nidaros Cathedral</h2><p>The first day ended with an organ concert at the beautiful Nidaros Cathedral, followed by the conference reception with drinks and food at the Archbishops Residence and Palace Museum.</p><p
style="text-align: center;"><a
href="http://www.flickr.com/photos/jnywong/4663141427"><img
class="aligncenter" src="http://farm5.static.flickr.com/4067/4663141427_cdb0e9586c_m.jpg" alt="" width="180" height="240" /></a></p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+%5BXP+2010%5D+Report+of+first+half-day+%28Tuesday%29+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D383" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2010/07/19/xp-2010-report-of-second-day/' rel='bookmark' title='[XP 2010] Report of second day (Wednesday)'>[XP 2010] Report of second day (Wednesday)</a></li><li><a
href='http://www.dtsato.com/blog/2008/04/13/what-happened-to-the-system-metaphor/' rel='bookmark' title='What happened to the System Metaphor?'>What happened to the System Metaphor?</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2010/06/30/xp-2010-report-first-day/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2010/06/30/xp-2010-report-first-day/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[[Agile Brazil 2010] Session submission postponed and logo contest]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/" /> <id>http://www.dtsato.com/blog/?p=379</id> <updated>2010-03-02T16:21:01Z</updated> <published>2010-03-02T16:21:01Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agile" /><category
scheme="http://www.dtsato.com/blog" term="agilebrazil" /><category
scheme="http://www.dtsato.com/blog" term="brazil" /><category
scheme="http://www.dtsato.com/blog" term="conference" /> <summary
type="html"><![CDATA[Clique aqui para ler em PortuguÃªs As I&#8217;ve already mentioned here, the Agile Brazil 2010 conference is accepting session proposals to be part of our program. Already with more than 90 sessions proposed, the program committee decided to postpone the deadline for session submissions until next Sunday (7th March 2010) due to requests and to [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/"><![CDATA[<p><a
href="#agile-brazil-2010-session-submission-postponed-and-logo-contest-pt_br">Clique aqui para ler em PortuguÃªs</a></p><p>As I&#8217;ve already <a
href="http://www.dtsato.com/blog/2010/02/03/agile-brazil-2010-opens-for-session-submissions/">mentioned here</a>, the Agile Brazil 2010 conference is accepting session proposals to be part of our program. Already with more than 90 sessions proposed, the program committee decided to <strong>postpone the deadline for session submissions until next Sunday (7th March 2010)</strong> due to requests and to allow more time for the community to interact and help us build the program. Some new functionality was also released:</p><ul><li>Users are now able to <strong>add comments</strong> to the sessions. We want the community to provide feedback to help our authors to improve their sessions prior to the deadline;</li><li>You can now <strong>vote and help us choose the conference logo</strong>. We received many proposals, and narrowed it down to 3, and we&#8217;re now asking the community to vote on the winner.</li></ul><p>In order to participate voting or adding comments, you don&#8217;t have to fill out the full author profile, so visit our <a
href="http://submissoes.agilebrazil.com/?locale=en">website</a> (if you haven&#8217;t created your account yet) and participate!</p><hr
/><h2><a
name="agile-brazil-2010-session-submission-postponed-and-logo-contest-pt_br">[Agile Brazil 2010] Prazo de envio de sessÃµes prorrogado e concurso do logo</a></h2><p>Como jÃ¡ <a
href="http://www.dtsato.com/blog/2010/02/03/agile-brazil-2010-opens-for-session-submissions/">publiquei aqui</a>, a Agile Brazil 2010 estÃ¡ aceitando propostas de sessÃµes para fazer parte do nosso programa. Com mais de 90 sessÃµes propostas, o comitÃª de programa decidiu <strong>prorrogar o prazo de submissÃµes atÃ© o prÃ³ximo domingo (7 de MarÃ§o de 2010)</strong> devido a pedidos e para dar mais tempo para a comunidade interagir e nos ajudar a montar o programa da conferÃªncia. Algumas novas funcionalidades foram lanÃ§adas:</p><ul><li>UsuÃ¡rios agora podem <strong>adicionar comentÃ¡rios</strong> nas propostas existentes. Queremos que a comunidade nos ajude fornecendo feedback aos autores e ajudando-os a melhorar suas propostas antes do prazo final;</li><li>VocÃª pode agora <strong>votar e nos ajudar a escolher o logotipo da conferÃªncia</strong>. NÃ³s recebemos diversas propostas de logotipo e escolhemos 3 para a votaÃ§Ã£o final, onde a comunidade vai decidir o vencedor.</li></ul><p>Para participar da votaÃ§Ã£o ou adicionar comentÃ¡rios, vocÃª nÃ£o precisa preencher o perfil completo de autor, entÃ£o visite <a
href="http://submissoes.agilebrazil.com/?locale=pt">nosso website</a> (se ainda nÃ£o criou uma conta) e participe!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+%5BAgile+Brazil+2010%5D+Session+submission+postponed+and+logo+contest+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D379" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2010/02/03/agile-brazil-2010-opens-for-session-submissions/' rel='bookmark' title='Agile Brazil 2010 opens for session submissions!'>Agile Brazil 2010 opens for session submissions!</a></li><li><a
href='http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/' rel='bookmark' title='[Agile Brazil 2010] Martin Fowler for the first time in Brazil!'>[Agile Brazil 2010] Martin Fowler for the first time in Brazil!</a></li><li><a
href='http://www.dtsato.com/blog/2009/02/09/coding-dojo-london-next-session-is-february-12th/' rel='bookmark' title='Coding Dojo London: Next session is February 12th'>Coding Dojo London: Next session is February 12th</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/#comments" thr:count="0"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/feed/atom/" thr:count="0"/> <thr:total>0</thr:total> </entry> <entry> <author> <name>Danilo Sato</name> </author><title
type="html"><![CDATA[[Agile Brazil 2010] Martin Fowler for the first time in Brazil!]]></title><link
rel="alternate" type="text/html" href="http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/" /> <id>http://www.dtsato.com/blog/?p=365</id> <updated>2010-02-10T23:13:24Z</updated> <published>2010-02-10T23:13:24Z</published> <category
scheme="http://www.dtsato.com/blog" term="Uncategorized" /><category
scheme="http://www.dtsato.com/blog" term="agile" /><category
scheme="http://www.dtsato.com/blog" term="agilebrazil" /><category
scheme="http://www.dtsato.com/blog" term="brazil" /><category
scheme="http://www.dtsato.com/blog" term="conference" /><category
scheme="http://www.dtsato.com/blog" term="fowler" /><category
scheme="http://www.dtsato.com/blog" term="interview" /><category
scheme="http://www.dtsato.com/blog" term="martin" /><category
scheme="http://www.dtsato.com/blog" term="thoughtworks" /> <summary
type="html"><![CDATA[Clique aqui para ler em PortuguÃªs I&#8217;m one of the organizers of the program committee for Agile Brazil 2010, and we&#8217;re very happy to announce that ThoughtWorks has agreed to sponsor the visit of Martin Fowler, our Chief Scientist, as one of our keynote speakers. Since this is Martin&#8217;s first visit to Brazil, I decided [&#8230;]]]></summary> <content
type="html" xml:base="http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/"><![CDATA[<p><a
href="#agile-brazil-2010-martin-fowler-first-time-in-brazil-pt_br">Clique aqui para ler em PortuguÃªs</a></p><p>I&#8217;m one of the organizers of the program committee for <a
href="http://www.agilebrazil.com">Agile Brazil 2010</a>, and we&#8217;re very happy to announce that <a
href="http://www.thoughtworks.com">ThoughtWorks</a> has agreed to sponsor the visit of <a
href="http://www.martinfowler.com">Martin Fowler</a>, our Chief Scientist, as one of our keynote speakers. Since this is Martin&#8217;s first visit to Brazil, I decided to ask him some questions that I thought would be of interest to the participants, and he has kindly agreed to participate in this mini-interview:</p><p><strong>Q: What have been keeping you busy lately?</strong></p><p><em>Martin Fowler: Overwhelmingly it&#8217;s my upcoming <a
href="http://martinfowler.com/bliki/DslBookRoadmap.html">book on DSLs</a>. I found writing books to be hard work, and it&#8217;s actually getting harder. By June I expect all of the content will be cast so my mind will be able to get away from it &#8211; which I&#8217;m very much looking forward to.</em></p><p><strong>Q: What are your expectations about Agile Brazil 2010?</strong></p><p><em>MF: I try not to have expectations about things, that way my mind can be open to the reality when I see it. I&#8217;ve been doing conferences frequently for two decades now, so it&#8217;s hard to get excited about them. I am excited about coming to Brazil. It will be my first time in South America and both I and my wife have long wanted to come down.</em></p><p><strong>Q: What are you going to talk about in your keynote?<br
/> </strong><br
/> <em>MF: I have no idea. I often don&#8217;t decide on my keynote until very close to speaking &#8211; often doing extemporaneous talks &lt;<a
href="http://martinfowler.com/bliki/ExtemporarySpeaking.html" target="_blank">http://martinfowler.com/bliki/ExtemporarySpeaking.html</a>&gt;. Recently I&#8217;ve been doing keynote talks consisting of three or so talklets, some with slides, some without. But exactly how I&#8217;ll do it is something I may only decide the night before.</em></p><p><strong>Q: How do you see the Brazilian software community influencing the future of Agile?<br
/> </strong><br
/> <em>MF: It&#8217;s hard to say, as I&#8217;m not that familiar with the Brazilian software world. I&#8217;ve been very impressed by the Brazilian ThoughtWorkers I&#8217;ve met over the years, so I know there&#8217;s great potential here. I&#8217;m generally keen to see more varied cultures contribute to the software world, I think it&#8217;s an important part of us growing as a profession.</em></p><p><a
href="http://www.agilebrazil.com">Agile Brazil 2010</a> is going to be an incredible conference, and we&#8217;re inviting speakers to <a
href="http://submissoes.agilebrazil.com/?locale=en">submit session proposals</a> (the deadline is approaching: <strong>28/Feb!</strong>). Don&#8217;t miss the chance to see and talk to Martin Fowler, as he&#8217;s one of the few speakers I know of that can put together a first-class keynote on the night before :-)</p><p>Don&#8217;t forget to follow <a
href="http://twitter.com/agilebrazil">@agilebrazil</a> on Twitter for conference news, and hope to see you there!</p><hr
/><h2><a
name="agile-brazil-2010-martin-fowler-first-time-in-brazil-pt_br">[Agile Brazil 2010] Martin Fowler pela primeira vez no Brasil!</a></h2><p>Como um dos organizadores do comitÃª de programa da <a
href="http://www.agilebrazil.com">Agile Brazil 2010</a>, estamos felizes em anunciar que a <a
href="http://www.thoughtworks.com">ThoughtWorks</a> aceitou patrocinar a visita de <a
href="http://www.martinfowler.com">Martin Fowler</a>, nosso Cientista-Chefe, como um dos keynotes do evento. Como esta serÃ¡ a primeira vez que Martin visita o Brasil, decidi fazer algumas perguntas que julguei interessantes para os participantes do evento, e ele concordou gentilmente em participar desta mini-entrevista:</p><p><strong>P: O que tem te mantido ocupado ultimamente?</strong></p><p><em>Martin Fowler: Surpreendentemente Ã© o meu novo <a
href="http://martinfowler.com/bliki/DslBookRoadmap.html">livro sobre DSLs</a>. Eu acho que escrever livros Ã© um trabalho Ã¡rduo e na verdade isso tem se tornado cada vez mais difÃ­cil. AtÃ© Junho eu espero que todo o conteÃºdo esteja definido assim isso vai poder sair um pouco da minha cabeÃ§a &#8211; algo que estou realmente ansioso para acontecer.</em></p><p><strong>P: Quais sÃ£o suas expectativas para a Agile Brazil 2010?</strong></p><p><em>MF: Eu tento nÃ£o criar expectativas sobre essas coisas, assim minha mente pode estar aberta para a realidade quando eu a ver. Eu tenho participado de conferÃªncias frequentemente hÃ¡ duas dÃ©cadas, entÃ£o acho difÃ­cil me empolgar com elas. Mas estou empolgado em visitar o Brasil. Esta serÃ¡ minha primeira vez na AmÃ©rica do Sul e tanto eu quanto minha esposa estamos ansiosos hÃ¡ tempos por essa visita.</em></p><p><strong>P: O que vocÃª irÃ¡ abordar no seu keynote?<br
/> </strong><br
/> <em>MF: Eu nÃ£o tenho idÃ©ia. Eu geralmente nÃ£o decido o assunto do meu keynote atÃ© uma data muito prÃ³xima do evento &#8211; geralmente fazendo palestras extemporÃ¢neas (improvisadas) &lt;<a
href="http://martinfowler.com/bliki/ExtemporarySpeaking.html" target="_blank">http://martinfowler.com/bliki/ExtemporarySpeaking.html</a>&gt;. Recentemente eu tenho feito keynotes com em torno de trÃªs pequenas palestras, algumas com slides, outras nÃ£o. PorÃ©m decidir exatamente como irei fazÃª-lo vai ser algo que eu possivelmente decida na noite anterior.</em></p><p><strong>P: Como vocÃª vÃª a comunidade brasileira de software influenciando o futuro dos MÃ©todos Ãgeis?<br
/> </strong><br
/> <em>MF: Ã‰ difÃ­cil dizer, pois nÃ£o estou tÃ£o familiarizado com o mundo de software brasileiro. Eu tenho me impressionado bastante com os ThoughtWorkers brasileiros que conheci ao longo dos anos, entÃ£o eu sei que existe um grande potencial aqui. Em geral eu gosto de ver uma variedade maior de culturas contribuindo para o mundo do software, pois acredito que seja uma parte importante para crescermos como profissÃ£o.</em></p><p>A <a
href="http://www.agilebrazil.com">Agile Brazil 2010</a> vai ser uma conferÃªncia incrÃ­vel, e estamos convidando palestrantes para <a
href="http://submissoes.agilebrazil.com/?locale=pt">submeterem propostas de sessÃ£o</a> (a data limite estÃ¡ se aproximando: <strong>28/Fev!</strong>). NÃ£o perca a oportunidade de ver e conhecer o Martin Fowler pessoalmente, pois ele Ã© um dos poucos palestrantes que conheÃ§o que consegue preparar um keynote da mais alta qualidade na noite anterior :-)</p><p>NÃ£o esqueÃ§a de seguir <a
href="http://twitter.com/agilebrazil">@agilebrazil</a> no Twitter para notÃ­cias da conferÃªncia, e espero ver vocÃªs por lÃ¡!</p><div
class="tweetthis" style="text-align:left;"><p> <a
class="tt" href="http://twitter.com/home/?status=RT+%40dtsato+%5BAgile+Brazil+2010%5D+Martin+Fowler+for+the+first+time+in+Brazil%21+http%3A%2F%2Fdtsato.com%2Fblog%2F%3Fp%3D365" title="Post to Twitter"><img
class="nothumb" src="http://www.dtsato.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div><div
class='yarpp-related-rss'><p>Related posts:<ol><li><a
href='http://www.dtsato.com/blog/2010/02/03/agile-brazil-2010-opens-for-session-submissions/' rel='bookmark' title='Agile Brazil 2010 opens for session submissions!'>Agile Brazil 2010 opens for session submissions!</a></li><li><a
href='http://www.dtsato.com/blog/2010/03/02/agile-brazil-2010-session-submission-postponed-and-logo-contest/' rel='bookmark' title='[Agile Brazil 2010] Session submission postponed and logo contest'>[Agile Brazil 2010] Session submission postponed and logo contest</a></li><li><a
href='http://www.dtsato.com/blog/2011/06/09/agile-brazil-2011-im-going/' rel='bookmark' title='Agile Brazil 2011 &#8211; I&#8217;m going!'>Agile Brazil 2011 &#8211; I&#8217;m going!</a></li></ol></p></div> ]]></content><link
rel="replies" type="text/html" href="http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/#comments" thr:count="2"/><link
rel="replies" type="application/atom+xml" href="http://www.dtsato.com/blog/2010/02/11/agile-brazil-2010-martin-fowler-first-time-in-brazil/feed/atom/" thr:count="2"/> <thr:total>2</thr:total> </entry> </feed>