<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Fragmental</title>
	<atom:link href="http://blog.fragmental.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fragmental.com.br</link>
	<description>Software e Batatas</description>
	<pubDate>Sat, 16 Aug 2008 15:30:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Analista Pedreiro</title>
		<link>http://blog.fragmental.com.br/2008/08/09/analista-pedreiro/</link>
		<comments>http://blog.fragmental.com.br/2008/08/09/analista-pedreiro/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 06:30:28 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[arquitetura]]></category>

		<category><![CDATA[metodologias]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=483</guid>
		<description><![CDATA[Meu post sobre Análise de Sistemas já teve 65 comentários (incluindo respostas, é claro). Acho que já descartei uns 20 comentários anônimos para este. Nem todos falavam da minha mãe, alguns tinham coisas interessantes mas infelizmente este blog não aprova comentários anônimos, sejam criticas interessantes ou xingamentos.
Esta manhã eu recebi um destes anônimos interessantes e, [...]]]></description>
			<content:encoded><![CDATA[<p>Meu <a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/">post sobre Análise de Sistemas</a> já teve 65 comentários (incluindo respostas, é claro). Acho que já descartei uns 20 comentários anônimos para este. Nem todos falavam da minha mãe, alguns tinham coisas interessantes mas infelizmente este blog não aprova comentários anônimos, sejam criticas interessantes ou xingamentos.</p>
<p>Esta manhã eu recebi um destes anônimos interessantes e, apesar de não o aprovar, gostaria de comentar trecho deste:</p>
<blockquote><p> Francamente modelar com o código é o mesmo que fazer um projeto de uma casa com tijolo e cimento.</p></blockquote>
<p>Este trecho me despertou o interesse porque há algum tempo fiz um experimento e gostaria de convidar vocês para repeti-lo. Como falei em posts anteriores Melbourne, minha cidade atual, é um lugar razoavelmente conhecido por suas boas universidades e centros de pesquisa. Como conheço alguns estudantes de graduação ou recém-formados (A ThoughtWorks possui <a href="http://www.thoughtworks.com/work-for-us/TWU.html">um programa para contratar graduandos</a>) eu conheci algumas pessoas que lecionam em universidade locais, entre eles uma simpática senhora que ensina disciplinas num curso de arquitetura e edificações local. </p>
<p>O dialogo foi sobre especificações, plantas e modelos.</p>
<blockquote><p>
-	Imagine que a senhora pudesse, ao invés de criar um modelo em papel, construir seu projeto incrementalmente. Em dois dias a senhora tem o banheiro pronto, em três dias a varanda.<br />
-	Como numa maquete?<br />
-	Não, eles estão prontos mesmo. Você pode usar o banheiro, pode dormir no quarto, pode efetivamente utilizar o prédio.<br />
-	Mas e se eu precisar mudar algo? Isso iria ficar muito caro.<br />
-	Imagine que o custo é apenas o de dois dias de trabalho. Sem custo material. A cada dois dias você termina um pedaço da casa e mudar é tão simples quanto construir.<br />
-	Ok. Seria ótimo. Qual seu ponto?<br />
-	Isso ainda afaria requerer uma planta baixa, um modelo em papel ou AutoCAD?<br />
-	Precisaria porque eu preciso comunicar o projeto aos trabalhadores.<br />
-	Ah, sim, claro, mas imagina que construir não seja um trabalho braçal. Você tem, sei lá, robôs que sobem paredes e fazem o trabalho pesado, você só diz qual a dimensão, inclinação, que material, etc. e eles constroem. Você desenha no AutoCAD e os Robôs constroem imediatamente, daí você pode entrar no prédio e se tem algo errado em segundos você conserta. Você pode levar seu cliente para andar no prédio.<br />
-	Ok. Mas neste caso você não está eliminando o modelo gráfico.<br />
-	Não?<br />
-	Não, neste caso você automatizou a construção. O que você fez foi fazer com que o trabalho do arquiteto seja simplificado eliminando o custo da construção. Se qualquer coisa que eu mudar no modelo muda no prédio real imediatamente e sem custo o papel do modelo é ainda mais importante. Você não tem real diferença entre modelo e prédio. Você não tem transformação real entre um e outro. <strong>O modelo é o prédio</strong>.
</p></blockquote>
<p>Deste ponto eu comecei a explicar para ela como engenharia de software funciona. A conclusão que nós chegamos é que engenheiros de software possuem o poder que falta para engenheiros civis/arquitetos e ainda assim usam as ferramentas de quem não tem este poder. </p>
<p>Arquitetos <strong>adorariam</strong> modelar com tijolos, paredes e coisas reais. Eles não podem. Nós podemos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/08/09/analista-pedreiro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Start Me Up</title>
		<link>http://blog.fragmental.com.br/2008/08/09/start-me-up/</link>
		<comments>http://blog.fragmental.com.br/2008/08/09/start-me-up/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 05:44:33 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[eventos]]></category>

		<category><![CDATA[thoughtworks]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=482</guid>
		<description><![CDATA[Este post do Jay Fields, ex-colega ThoughtWorker, é exatamente o que eu penso sobre o assunto. Por favor, leia. 
Aproveitando a deixa, Jay vai estar no Brasil para o Rails Summit junto com alguns outros grandes nomes. O evento custa R$300,00 se você comprar até Setembro. Eu estou vendo muita gente reclamar do valor e, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.jayfields.com/2008/08/be-your-start-up.html">Este post do Jay Fields</a>, ex-colega ThoughtWorker, é exatamente o que eu penso sobre o assunto. Por favor, leia. </p>
<p>Aproveitando a deixa, Jay vai estar no Brasil para o <a href="http://www.locaweb.com.br/railssummit/">Rails Summit</a> junto com alguns outros grandes nomes. O evento custa R$300,00 se você comprar até Setembro. Eu estou vendo muita gente reclamar do valor e, sinceramente, não entendo o motivo. É um evento de grande porte e o preço está bem abaixo do que eu esperaria que custasse. Um evento destes no exterior não sai por menos de mil dólares (mais preço de passagem e hospedagem), e, sinceramente, este evento possui um grupo de palestrantes mais interessante que o JAOO Sydney onde estive que custou, se me lembro bem AUD$1,700.00 (uns R$3.500,00 à época).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/08/09/start-me-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Patterns de Adoção Ágil</title>
		<link>http://blog.fragmental.com.br/2008/08/03/patterns-de-adocao-agil/</link>
		<comments>http://blog.fragmental.com.br/2008/08/03/patterns-de-adocao-agil/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 02:06:14 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[gerencia]]></category>

		<category><![CDATA[livros]]></category>

		<category><![CDATA[metodologias]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=481</guid>
		<description><![CDATA[Uma pergunta frequente é: Como eu introduzo Agilidade na minha empresa?
Recentemente eu fiz uma revisão do Agile Adoption Patterns. Este livro é fantástico para você conhecer diversas técnicas e seus impactos. Mais importante ainda: sem ficar preso à uma metodologia de caixinha.
]]></description>
			<content:encoded><![CDATA[<p>Uma pergunta frequente é: <strong>Como eu introduzo Agilidade na minha empresa?</strong></p>
<p>Recentemente eu fiz uma <a href="http://fragmental.tw/2008/08/03/agile-adoption-patterns-a-review/">revisão do Agile Adoption Patterns</a>. Este livro é fantástico para você conhecer diversas técnicas e seus impactos. Mais importante ainda: <a href="http://fragmental.tw/2008/07/30/enough-of-methodologies-lets-do-practices/">sem ficar preso à uma metodologia de caixinha</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/08/03/patterns-de-adocao-agil/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Uh-Éme-Éle</title>
		<link>http://blog.fragmental.com.br/2008/07/25/uh-eme-ele/</link>
		<comments>http://blog.fragmental.com.br/2008/07/25/uh-eme-ele/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 10:11:13 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[arquitetura]]></category>

		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[engenharia]]></category>

		<category><![CDATA[metodologias]]></category>

		<category><![CDATA[plataformas]]></category>

		<category><![CDATA[programando]]></category>

		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=479</guid>
		<description><![CDATA[Este tópico no GUJ chamou atenção, especialmente porque o li logo após um interessante texto noblog do Marcelo Araújo sobre uma outra faceta do mesmo tema: modelagem usando especificações não executáveis.
O que eu quero dizer com isso? Dada a tecnologia atual na maioria das empresas (desconsiderando o uso de coisas como DSLs ou mesmo alguma [...]]]></description>
			<content:encoded><![CDATA[<p>Este <a href="http://www.guj.com.br/posts/list/0/97823.java#527232">tópico no GUJ chamou atenção</a>, especialmente porque o li logo após um interessante texto no<a href="http://web.mac.com/marcelocosta/timebox/home/Entries/2008/7/23_documento_de_arquitetura._quando_e_pra_que..html">blog do Marcelo Araújo</a> sobre uma outra faceta do mesmo tema: modelagem usando especificações não executáveis.</p>
<p>O que eu quero dizer com isso? Dada a tecnologia atual na maioria das empresas (desconsiderando o uso de coisas como DSLs ou mesmo alguma solução MDSD que, ao contrario de MDA, funcione) todos os documentos comumente utilizados para &#8220;modelagem&#8221; não são verificáveis, não são executáveis e requerem um trabalho manual enorme. Como bem disse o <a href="http://codificando.com/">Emerson Macedo</a> no post, você acaba programando duas vezes, uma na sua notação gráfica (UML) e uma na sua notação executável (Java, C#, Ruby&#8230; o que for).</p>
<p>Acontece que ao passar do diagrama (e diagramas aceitam qualquer besteira) para o código (onde o compilador e testes unitários são muito exigentes – fora os usuários) o tal do pseudo-modelo criado pelo &#8220;analista&#8221; no Rational Rose (porque a empresa não percebeu que o Rose foi descontinuado há anos) é completamente diferente do modelo implementado. As classes até têm o mesmo nome mas a mecânica interna é bem diferente. E por quê? <strong>Porque UML não vai te oferecer tudo o necessário para modelar</strong>. O mínimo que se espera de um modelo de um sistema é que ele seja verificável para saber se cumpre seus requisitos. Como é que eu vou saber isso com UML? Como eu testo UML?</p>
<p>Há algum tempo que eu me pergunto porque que se usa UML para &#8220;modelar&#8221;. Não me entenda mal, UML é uma ótima noção gráfica para Orientação a Objetos e com ela você consegue passar uma <em>big picture</em> muitas vezes mais rapidamente do que código; mas ela fica por aí: <strong>comunicação</strong>.</p>
<p>Quando modelamos o comportamento de objetos nós estamos descrevendo como este se comporta em diversas situações. Ao modelar uma determinada atividade você precisa descrever um conjunto grande de detalhes sobre esta, e UML não esta pronta para este tipo de coisa - e nem é a idéia por trás dela. Se modelar em UML fosse eficiente nós estaríamos programando em UML  não em C#, Java ou o que for.</p>
<p>O primeiro problema ao tentar introduzir este pensamento na indústria é: mas eu não posso deixar que meus &#8220;implementadores&#8221; façam o que quiserem. Pergunta: o que raios é um implementador? Um datilografo de luxo? </p>
<p>Supondo que sua empresa seja a típica empresa de três letrinhas, aquelas que contratam qualquer um como &#8220;programador júnior&#8221; porque ele vai receber instruções do analista. Neste cenário eu pergunto: para que o tal programador? Que tal dar ao seu &#8220;analista&#8221; uma ferramenta mágica em que ele consiga criar um modelo abstrato e ao mesmo tempo executável? Que tal se ao invés de gastar rios de dinheiro pagando 10-reais-mais-o-busão para seus implementadores você eliminasse completamente a necessidade deles, fazendo com que o &#8220;analista&#8221; sozinho cuide do serviço?</p>
<p>Não precisa sacar seus milhões do banco nem pensar em como justificar o gasto com esta ferramenta no orçamento, você muito provavelmente já possui o necessário dentro da sua empresa: uma linguagem de programação decente. Faça seu &#8220;analista&#8221; usar código para expressar a modelagem. No final dá no mesmo para o nível de modelagem desejada e você ainda ganha algo verificável e executável. Economia de rios de dinheiro quase que instantânea.</p>
<p>Mas como assim? O &#8220;modelo lógico&#8221; é muito diferente do &#8220;modelo físico&#8221; e o &#8220;analista&#8221; não pode perder tempo com essas coisinhas de tecnologia, tem que pensar em modelar o negocio. Muito bem, duas coisas:</p>
<ol>
<li><a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/">Analista de Sistemas não é analista de negócios.</a> Se você não sabe o que é um analista de negócios eu recomendo que você mande um e-mail pro <a href="http://www.pfvasconcellos.eti.br/blog/">Paulo Vasconcellos</a> perguntando.</li>
<li>Há mais de cinco anos que não há quase nenhum motivo para que uma aplicação Java ou C# não seja uma <strong>cópia de 1-para-1 de um modelo UML do tipo &#8220;diagrama de domínio&#8221;</strong>. POJO/POCO, Hibernate, IoC, Camadas, OO, AOP, EJB3, MVC&#8230; toda essa parafernália de letrinhas permite que seus objetos de negocio não tenham o menor traço de infra-estrutura. Claro que alguém vai ter que fazer a infra-estrutura –ainda que seja mínima. Caso seus &#8220;analistas&#8221; sejam de qualidade extremamente baixa eu recomendo que você contrate um bom técnico para atuar como arquiteto e líder técnico do time.</li>
</ol>
<p>Verdade seja dita: esta não é a primeira vez que este blog trata do tema e desde a última vez <strong>muita</strong> coisa melhorou, mas ainda há muito que melhorar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/07/25/uh-eme-ele/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rastreabilidade em User Stories</title>
		<link>http://blog.fragmental.com.br/2008/07/18/rastreabilidade-em-user-stories/</link>
		<comments>http://blog.fragmental.com.br/2008/07/18/rastreabilidade-em-user-stories/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 14:38:34 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[gerencia]]></category>

		<category><![CDATA[metodologias]]></category>

		<category><![CDATA[programando]]></category>

		<category><![CDATA[testes]]></category>

		<category><![CDATA[você.pergunta]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=478</guid>
		<description><![CDATA[Pergunta na XP-Rio:
 Me ajudem no seguinte, no processo unificado, espera-se que todos os casos de uso gerem algum tipo de artefato dentro do projeto. Na verdade, com os casos de uso espera-se chegar em classes que juntas formarão o sistema. Dentro da metodologia existe artefatos que quando feitos, permitem mapear todos os artefatos gerados [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tech.groups.yahoo.com/group/xprio/message/5445">Pergunta na XP-Rio</a>:</p>
<blockquote><p> Me ajudem no seguinte, no processo unificado, espera-se que todos os casos de uso gerem algum tipo de artefato dentro do projeto. Na verdade, com os casos de uso espera-se chegar em classes que juntas formarão o sistema. Dentro da metodologia existe artefatos que quando feitos, permitem mapear todos os artefatos gerados a partir de um caso de uso. A matriz de rastreabilidade.</p>
<p>Gostaria de saber como o XP permite chegar as classes (código) a partir das User Stories. Por exemplo, dado uma User Stories, quais são as classes geradas para atender essa User Stories?</p>
<p>O XP permite isso? Como é feito?
</p></blockquote>
<p>Provavelmente a primeira coisa a se perguntar é: <strong>por que eu precisaria deste dados?</strong> Alguns modelos de processo como CMMI definem <a href="http://en.wikipedia.org/wiki/Requirements_Traceability">rastreabilidade</a>, que geralmente é definida nesta linha:</p>
<blockquote><p>
Requirements traceability refers to the ability to describe and follow the life of a requirement, in both forwards and backwards direction (i.e. from its origins, through its development and specification, to its subsequent deployment and use, and through all periods of on-going refinement and iteration in any of these phases.)
</p></blockquote>
<p>- Gotel O.C.Z and Finklestein A.C.W (tirado da Wikipedia)</p>
<p>A necessidade parece justa e real, é preciso saber quais partes do software são afetadas por mudanças no negocio e vice-versa. O grande problema desta métrica é que <a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/">transformações de modelo não são mais tão drásticas há algumas décadas</a>. Ao utilizar qualquer tecnologia relativamente comum (Java, Ruby, .Net, Python, JavaScript&#8230;) não existe motivo técnico para que o software não modele o negocio em uma relação próxima de 1-para-1, desta forma saber qual parte de um código realiza qual tarefa torna-se bem simples.</p>
<p>Outro problema é que eu nunca vi um artefato de rastreabilidade, seja qual for, que não ficasse defasado. Se você abraça uma metodologia ágil sabe que refactoring faz parte da vida.</p>
<p>Mesmo com todos os problemas que esta métrica possui eu entendo que existem casos onde seu uso se faz necessário –especialmente por equipes tentando introduzir agilidade em ambientes tradicionais. Supondo que exista uma necessidade justificável para algum controle deste tipo, metodologias ágeis em geral possuem um mecanismo muito mais eficiente que documentos ou mesmos sistemas: testes.</p>
<p>Toda história, todo cartão, deve ter um critério de aceite. O critério de aceite traz o que o cliente considera ser o mínimo para que a história seja considerada concluída. Por exemplo:</p>
<blockquote><p>
História: <em>Como administrador eu quero criar um novo grupo para que possa aplicar permissões à diversos usuários de uma só vez</em>.<br />
Critérios de Aceite:
<ul>
<li>O novo grupo criado deve possuir o usuário que o criou como seu administrador</li>
<li>O novo grupo não deve conter outros membros</li>
<li>O novo grupo não deve ser visível na listagem de grupos</li>
</ul>
</blockquote>
<p>Cada um destes critérios via um teste unitário e/ou funcional que é executado como parte da integração contínua. Para saber exatamente quais classes e códigos são afetados por cada um deles é simples: use uma ferramenta de test coverage como o <a href="http://emma.sourceforge.net/">Emma</a> e execute apenas os testes de aceitação para aquele cartão. A ferramenta irá gerar relatórios como estes:</p>
<pre>
[class, %]	[method, %]	[block, %]	[line, %]	[name]
25%  (1/4)!	25%  (3/12)!	40%  (3012/7446)!	25%  (3/12)!	com.sun.tools.javac.v8.resources
94%  (16/17)!	49%  (41/83)!	48%  (1111/2292)!	45%  (201.1/450)!	com.sun.tools.javac.v8
88%  (45/51)!	61%  (242/397)!	54%  (3070/5729)!	52%  (809.6/1563)!	com.sun.tools.javac.v8.tree
</pre>
<p>Classes que possuem alguma cobertura foram afetadas pelo teste, logo são parte da execução daquela história. Não é difícil escrever um script que –talvez como parte do build- processe estes relatórios e gere o artefato de rastreabilidade que seu processo te obrigar a fazer. Melhor ainda: este artefato nunca estará desatualizado.</p>
<p>Só não se esqueça que melhoria contínua é um conceito importante. Se o artefato de rastreabilidade é algo tão ineficiente a obrigação de um desenvolvedor que perceba isto é mostrar para sua organização que o valor desta pratica é nulo. Não se acomode.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/07/18/rastreabilidade-em-user-stories/feed/</wfw:commentRss>
		</item>
		<item>
		<title>User Stories: Não Crie Godzillas!</title>
		<link>http://blog.fragmental.com.br/2008/07/10/user-stories-nao-crie-godzillas/</link>
		<comments>http://blog.fragmental.com.br/2008/07/10/user-stories-nao-crie-godzillas/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 03:32:46 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[metodologias]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=477</guid>
		<description><![CDATA[Hoje de manhã eu acabei iniciando um debate interessante com o Antônio Carlos via twitter. Tudo começou quando o Fernando Meyer postou uma foto dos cartões que ele usa para planning poker. O meu primeiro comentário foi sobre as cartas com valores exorbitantes como 40 e 100.
Qual o problema destes valores?
Eles são um sintoma de [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje de manhã eu acabei iniciando um debate interessante com o <a href="http://www.acarlos.com.br/">Antônio Carlos</a> via twitter. Tudo começou quando o <a href="http://fmeyer.org/">Fernando Meyer</a> postou <a href="http://twitter.com/fmeyer/statuses/853704167">uma foto dos cartões</a> que ele usa para planning poker. <a href="http://twitter.com/pcalcado/statuses/853761273">O meu primeiro comentário</a> foi sobre as cartas com valores exorbitantes como 40 e 100.</p>
<p>Qual o problema destes valores?</p>
<p>Eles são um sintoma de um problema. São um <em>bad smell</em>. Dado que toda história tem algum valor para o usuário do sistema, como alguém pode ter no mesmo sistema, na mesma iteração, duas histórias que valem 2 e 100? Existem tarefas que realmente envolvem tão pouco esforço que o numero é baixo. Mudar um texto para itálico, por exemplo, mas se isso é um dois o que seria tão grande a ponto de ser (40/2 =)  20 vezes mais trabalhoso e ainda assim ser considerado uma história?</p>
<p>Possibilidades:</p>
<ol>
<li><strong>Histórias mal formuladas</strong>: O analista de negocio cria histórias que não possuem valor nenhum e/ou histórias que não são atômicas.</li>
<li><strong>Incerteza</strong>: Os desenvolvedores fazendo a estimativa de tamanho da história não tem idéia de como fazer aquilo e chutam o tamanho para o alto, o mais alto que conseguirem.</li>
</ol>
<p>O primeiro problema é muito comum –tem um post nos rascunhos sobre minhas experiências recentes com este. Analistas –especialmente os com experiência em desenvolvimento- tendem a pensar em tarefas que são decomposições funcionais e não partições verticais dos sistemas. Invés de pensas no ponta-a-ponta da tarefa eles criam histórias apenas sobre um pedacinho específico. No outro lado da moeda o analista não consegue particionar o sistema em histórias. No final os cartões trazem histórias gigantescas.</p>
<p>É fácil estimar histórias pequenas. Na verdade o princípio que move as estimativas de métodos ágeis é que é muito mais fácil estimar alo pequeno do que algo grande. O problema é que estimar o tamanho uma história grande é <strong>muito</strong> difícil.</p>
<p>A solução neste caso provavelmente passa por ter histórias melhor definidas. É claro que vão existir histórias que são tão simples que até um 2 é muito para elas, nesse caso use algo menor como um numero abaixo da sua menor história &#8220;normal&#8221; (quase sempre isso quer dizer 1).</p>
<p>A segunda causa é bem simples de resolver, creio. A incerteza é algo comum, especialmente antes de executar algumas histórias para saber onde se pisa. Neste caso ao invés de se chutar a estimativa para a Lua com um 100 você pode começar usando uma carta que deixa claro que não se consegue estimar este cartão com as informações atuais:</p>
<p><a href="http://www.flickr.com/photos/cainanunes/2595613720/"><img src="http://farm4.static.flickr.com/3037/2595613720_3e46018f9d.jpg"/></a></p>
<p>E prosseguir criando um <a href="http://www.extremeprogramming.org/rules/spike.html">spike</a> com objetivo de obt6er mais dados sobre aquela tarefa. Estimar um spike é bem mais simples do que uma história.</p>
<p>Mas e para estimarmos em alto-nível estas histórias enormes, confusas e distantes? <a href="http://www.agile-software-development.com/2008/01/thats-not-user-story-thats-epic.html">Algo assim não é história, é um <strong>épico</strong></a>. Neste caso estimativas de alto nível são aceitáveis enquanto o épico estiver no backlog <strong>mas antes de serem agendados os épicos são desmembrados em histórias</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/07/10/user-stories-nao-crie-godzillas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile Software Deployment?</title>
		<link>http://blog.fragmental.com.br/2008/06/20/agile-software-deployment/</link>
		<comments>http://blog.fragmental.com.br/2008/06/20/agile-software-deployment/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 11:59:42 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[arquitetura]]></category>

		<category><![CDATA[engenharia]]></category>

		<category><![CDATA[gerencia]]></category>

		<category><![CDATA[metodologias]]></category>

		<category><![CDATA[plataformas]]></category>

		<category><![CDATA[thoughtworks]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=475</guid>
		<description><![CDATA[A melhor coisa sobre meu trabalho atual é que, como consultores, tentamos sempre pensar fora da caixa. Isso não é fácil numa consultoria, você pode imaginar, já que o mercado tende à empresas de três letrinhas que não se interessam tanto em otimizar ou melhorar e sim em cobrar por hora.
Um desses momentos recentes me [...]]]></description>
			<content:encoded><![CDATA[<p>A melhor coisa sobre meu trabalho atual é que, como consultores, tentamos sempre pensar fora da caixa. Isso não é fácil numa consultoria, você pode imaginar, já que o mercado tende à <a href="http://blog.fragmental.com.br/2007/06/07/3-letrinhas/">empresas de três letrinhas</a> que não se interessam tanto em otimizar ou melhorar e sim em cobrar por hora.</p>
<p>Um desses momentos recentes me fez passar por algo que eu nunca havia visto na pratica: <strong>como fazer deployment (instalação) e administração de software de maneira ágil?</strong></p>
<p>O cliente em questão possui times ágeis em diversos segmentos há alguns anos. Durante o andamento de um projeto enorme surgiram algumas dificuldades em gerenciar ambientes e versões do software. Apesar de toda a agilidade os testadores ainda precisam que versões específicas, com bases de dados específicas, estejam instaladas em ambientes para homologar o sistema. Para piorar mesmo os desenvolvedores precisam ter uma instância de uma <em>search engine</em> (algo como o Lucene) e popular esta engine para que seja usável demora por volta de 10 horas.</p>
<p>Era preciso controlar qual desenvolvedor possui acesso à qual instalação da search engine e quais as versões instaladas em quais ambientes. No passado já ocorreu algumas vezes de um deployment para QA demorar mais que o esperado pela confusão generalizada de ambientes e isso atrasar o release para produção em uma semana.</p>
<p>A primeira proposta que eles tiveram foi clássica: vamos automatizar tudo. Construir um mega-sistema que controle o que está instalado onde, avise por email os responsáveis, tenha um controle de workflow, se integre ao sistema de QA, seja parte do IBM Tivoli, faça café&#8230; e seja extremamente caro.</p>
<p>Uma outra proposta surgiu do &#8220;grupo de governança&#8221; da empresa: ninguém faz deployment de nada sem ser autorizado. Toda vez que alguém precisa subir algo para QA ou outro ambiente precisa usar o Jira, toda vez que alguém precisar de uma modificação numa instancia da search engine precisa usar o Jira. Todos os pedidos são aprovados pelas pessoas competentes.</p>
<p>Aí começa o trabalho da nossa equipe: como ter o benefício esperado sem ter que vender a empresa pra comprar o sistema ou passar 20% do tempo preenchendo formulários?</p>
<p>O início deste trabalho foi feito seis meses atrás e foi parte do meu primeiro projeto aqui. Apos analisarmos o sistemas vimos que ele era estupidamente complexo sem a menor necessidade. O débito técnico foi se acumulando com o passar dos anos e uma coisa simples como instalar um WAR no Tomcat estava levando mais de duas horas, e trabalhando em par! Um dos grandes problemas era que das duas horas uma você gastava andando pelo corredor perguntando para outras pessoas o que fazer no caso X, qual a versão que está no servidor Y, etc.</p>
<p>A primeira coisa a se fazer era resolver o débito técnico. Não há solução que agüente mais de um mês em pé com aquela quantidade de problemas para resolver (incluindo um build que durava mais de quarenta minutos). Para isso os donos do negocio aceitaram alocar 10% dos pontos de uma iteração e, conforme a previsão, a maioria dos problemas graves se solucionou em cinco meses.</p>
<p>Enquanto isso, para amenizar o problema de maneira imediata, nós resolvemos usar um quadro-branco com a configuração dos ambientes. Quando a pressão do release passou o quadro foi para no wiki interno, numa grande tabela que qualquer um editava. Para o problema das instâncias de search engine nós criamos tokens: cada instancia tinha um cartão. Se você precisa de uma instancia você vai até uma parede e pega um cartão, adiciona as configurações daquela instancia na sua máquina e cola o cartão no seu monitor. </p>
<p>Simples e eficiente, a solução do cartão dura até hoje. O mesmo não se pode dizer do wiki. Enquanto o grupo de usuários era pequeno o wiki serviu de maneira ótima, após passarmos de algumas dezenas de pessoas -e diversos sub-projetos e spikes rodando em paralelo- ele se tornou inviável. O problema é que a tabela não comporta mais todos os dados de maneira eficiente e qualquer tentativa de organizar em sub-páginas faz com que as pessoas &#8220;esqueçam&#8221; de atualizar o wiki. Solução? Seguir o exemplo do que deu certo: cartões!</p>
<p><img src="http://farm4.static.flickr.com/3157/2595231832_f4f78a197f_m.jpg"/></p>
<p>Acima você pode ver uma das paredes de cartões para nosso controle de mudanças e versões. O cartão rosa, no topo, tem o nome do ambiente. Cada um dos cartões azuis abaixo deste representa um dos componentes, os post-it laranja indicam as versões que foram instaladas. Os amarelos indicam qual instancia da search engine é usada em qual ambiente.</p>
<p>Os outros post-its colados nos cartões são meta-dados, eles indicam, por exemplo, que um serviço está inativo:</p>
<p><img src="http://farm4.static.flickr.com/3095/2594396373_076220c073_m.jpg"/></p>
<p>Esta solução tem funcionado nos últimos meses de maneira exemplar. Na verdade ela funciona tão bem que o problema agora é convencer os analistas de negocio que o problema do deployment não está solucionado e que eles ainda precisam investir nele.</p>
<p>Uma das conseqüências dessa técnica é que as duas pessoas que ficavam alocadas 100% do tempo gerenciando ambientes estarão em breve voltando a desenvolver as histórias e gerar valor de negócios ao invés de dar suporte aos desenvolvedores.</p>
<p>Muitas vezes você não precisa de milhões de dólares nem de burocracia, basta pensar fora da caixa.</p>
<p><img src="http://farm4.static.flickr.com/3222/2595231442_e823ccc1e0.jpg"/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/06/20/agile-software-deployment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby é JavaScript ao Avesso</title>
		<link>http://blog.fragmental.com.br/2008/06/12/ruby-e-javascript-ao-avesso/</link>
		<comments>http://blog.fragmental.com.br/2008/06/12/ruby-e-javascript-ao-avesso/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 11:13:32 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[beyondjava]]></category>

		<category><![CDATA[engenharia]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[orientacao.a.objetos]]></category>

		<category><![CDATA[programacao.funcional]]></category>

		<category><![CDATA[programando]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=473</guid>
		<description><![CDATA[O titulo é uma brincadeira mas é uma boa forma de lembrar algumas coisinhas sobre programação nestas linguagens. Cada vez mais lidamos no dia-a-dia com conceitos que estão presentes há décadas em linguagens mais esotéricas mas nunca deram as caras no mainstream, um deles é o uso de funções como abstração. Existe um conflito de [...]]]></description>
			<content:encoded><![CDATA[<p>O titulo é uma brincadeira mas é uma boa forma de lembrar algumas coisinhas sobre programação nestas linguagens. Cada vez mais lidamos no dia-a-dia com conceitos que estão presentes há décadas em linguagens mais esotéricas mas nunca deram as caras no <em>mainstream</em>, um deles é o uso de funções como abstração. Existe um conflito de termos aqui então só para deixar claro eu não estou falando de funções como em programação procedural mas sim de funções como vemos em closures.</p>
<p>Muita gente tem escrito sobre como devemos aprender programação funcional. Eu concordo mas não posso deixar de notar que quando alguém diz <em>programação funcional</em> geralmente ela quer dizer Higher-Order Functions.</p>
<p>E o que é isso? Bom, uma linguagem possui higher-order quando uma função pode receber como parâmetro outra função. O nome deriva do fato de que uma função que recebe outra é considerada de ordem 1, uma função que recebe outra que recebe outra é considerado 3 e assim em diante.</p>
<p>JavaScript possui higher-order programming. Funções são a abstração principal em javaScript e elas podem ser passadas à vontade pelo programa. Por exemplo, vamos supor que queremos comparar dois objetos de acordo com um critério arbitrário. Em JavaScript podemos fazer algo assim:</p>
<pre name="code" class="js">
function melhorEntre(um, outro, criterio){
  if(criterio(um, outro)){
    return um;
  }
  else {
    return outro;
  }
}

sorvete1 = {sabor: 'morango'};
sorvete2 = {sabor: 'chocolate'};

prefiroChocolate = (function (s1, s2){
                                   return (s1.sabor === 'chocolate');
                            });

prefiroMorango = (function (s1, s2){
                                  return (s1.sabor === 'morango');
                            });

alert(melhorEntre(sorvete1, sorvete2, prefiroMorango).sabor);
alert(melhorEntre(sorvete1, sorvete2, prefiroChocolate).sabor);
</pre>
<p>Em Ruby o código ficaria um pouco diferente:</p>
<pre class="ruby" name="code">
def melhor_entre(um, outro, criterio)
    if criterio.call(um, outro)
        um
    else
        outro
    end
end

sorvete_1 = { :sabor => 'chocolate' }
sorvete_2 = { :sabor => 'morango' }

prefiro_chocolate = lambda {|s1,s2| s1[:sabor] == 'chocolate'}
prefiro_morango = lambda {|s1,s2| s1[:sabor] == 'morango'}

puts melhor_entre(sorvete_1, sorvete_2, prefiro_morango)[:sabor]
puts melhor_entre(sorvete_1, sorvete_2, prefiro_chocolate)[:sabor]
</pre>
<p>Agora vamos pensar: as duas linguagens possuem higher-order programming? <strong>Não</strong>, só JavaScript possui. Em Ruby o que é passado não é uma função e sim um objeto, veja só:</p>
<pre class="ruby" name="code">
prefiro_chocolate = lambda {|s1,s2| s1[:sabor] == 'chocolate'}
puts prefiro_chocolate
#=> #&lt;Proc:0x00028a64@tmp/compara.rb:19&gt;
puts prefiro_chocolate.class
#=> Proc
</pre>
<p>O principal divergente da solução em Ruby é que você deve <a href="http://blog.fragmental.com.br/2008/05/25/nem-so-de-troca-de-mensagens-vivem-os-objetos/">passar a mensagem</a> <em>call</em> para o objeto (ou usar a palavra-chave <em>yield</em>). Na pratica do dia-a-dia não tem tanta diferença e é comum falar em higher-order Ruby.</p>
<p>Em Ruby não precisamos de funções de verdade para termos higher-order programming, podemos usar objetos para modelar as funções. Em JavaScript não temos construções especiais para objetos, mas utilizamos funções:</p>
<pre name="code" class="js">
function Sorveteiro(){
  this.numeroDeVendidos = 0;
  this.vender = function(){this.numeroDeVendidos++;};
};

s = new Sorveteiro();
alert(s.numeroDeVendidos);
s.vender();
alert(s.numeroDeVendidos);
s.vender();
s.vender();
alert(s.numeroDeVendidos);
</pre>
<p>Alguém me disse essa semana que uma das grandes vantaens em aprender higher-order programming (a pessoa falou em programação funcional mas não é bem isso que ela quis dizer) é que com ela você simula objetos mas o contrario não é verdade. Bom, não é assim. Nada impede de você ter higher-order programming em uma linguagem Orientada a Objetos (JavaScript é Orientada a Objetos!) e com objetos você pode facilmente modelar higher-order programming.</p>
<p>E qual a diferença disso tudo para programação funcional? Bom, programação funcional usa higher-order programming, mas não é isso que define uma linguagem funcional (JavaScript não é funcional).</p>
<p>Em 1984, <a href="http://www.math.chalmers.se/~rjmh/Papers/whyfp.html">John Hughes publicou um paper chamado &#8220;Why Functional Programming Matters&#8221;</a>. Este paper é, até hoje, uma das obras mais importantes para o paradigma. Nele o autor descreve:</p>
<blockquote><p> The special characteristics and advantages of functional programming are often summed up more or less as follows. Functional programs contain no assignment statements, so variables, once given a value, never change. More generally, functional programs contain no side-effects at all. A function call can have no effect other than to compute its result. This eliminates a ma jor source  of bugs, and also makes the order of execution irrelevant - since no side-efect can change the value of an expression, it can be evaluated at any time. This relieves the programmer of the burden of prescribing the flow of control. Since expressions can be evaluated at any time, one can freely replace variables by their values and vice versa - that is, programs are “referentially transparent”. This freedom helps make functional programs more tractable mathematically  than their conventional counterparts.
</p></blockquote>
<p><a href="http://jaoo.com.au/sydney-2008/file?path=/jaoo_aus2008/slides/Meijer_functionalProgramming.pdf ">Erik Meijer apresentou uma palestra no JAOO chamada &#8220;Why Functional Programming (still) Matters&#8221;</a> onde ele afirma que nenhuma linguagem é realmente funcional, provando que se pode simular efeitos colaterais em Erlang, Haskell, F# e várias outras.</p>
<p>A conclusão do Erik -<a href="http://research.microsoft.com/~emeijer/">é claro que defendendo suas decisões ao criar o LINQ</a>- é que os conceitos por trás das linguagens ditas funcionais são mais importantes do que ser uma linguagem puramente funcional ou não.</p>
<p>Isso significa que você deve aprender sobre programação funcional e aplicar suas técnicas sempre que necessário mas cuidado com o termo &#8220;funcional&#8221;. Na maioria das vezes você quis dizer <strong>Higher-Order Programming</strong>.</p>
<p><strong>Update:</strong> Alguns dos comentários msotram uma confusão com funções javaScript e objetos. Não só o texto falou que em JavaScript funções são objetos bem como ele mostrou o exemplo do sorveteiro, mas tentando deixar ainda mais claro:</p>
<p><img src="http://farm4.static.flickr.com/3021/2572401771_f17312a7e9_o.jpg" alt="ds" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/06/12/ruby-e-javascript-ao-avesso/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Singletons&#8230;</title>
		<link>http://blog.fragmental.com.br/2008/05/28/singletons/</link>
		<comments>http://blog.fragmental.com.br/2008/05/28/singletons/#comments</comments>
		<pubDate>Tue, 27 May 2008 14:37:26 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[programando]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=472</guid>
		<description><![CDATA[Singleton Considered Stupid
]]></description>
			<content:encoded><![CDATA[<p><a href="http://steve.yegge.googlepages.com/singleton-considered-stupid">Singleton Considered Stupid</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/05/28/singletons/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Completa Irrelevância do Certified Scrum Master</title>
		<link>http://blog.fragmental.com.br/2008/05/27/a-completa-irrelevancia-do-certified-scrum-master/</link>
		<comments>http://blog.fragmental.com.br/2008/05/27/a-completa-irrelevancia-do-certified-scrum-master/#comments</comments>
		<pubDate>Tue, 27 May 2008 12:50:56 +0000</pubDate>
		<dc:creator>Phillip Calçado</dc:creator>
		
		<category><![CDATA[australia]]></category>

		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[eventos]]></category>

		<category><![CDATA[gerencia]]></category>

		<category><![CDATA[metodologias]]></category>

		<category><![CDATA[negocios]]></category>

		<category><![CDATA[thoughtworks]]></category>

		<guid isPermaLink="false">http://blog.fragmental.com.br/?p=471</guid>
		<description><![CDATA[Semana passada o Richard Durnall me chamou para assistir a uma aula que ele deu na University of Melbourne. O Rich é o guru local de Lean e é uma figura.
A aula foi interessante. O curso é o mestrado em alguma das 343.435 ramificações de Tecnologia da Informação, basicamente uma escolinha para CIO-wannabe. Para se [...]]]></description>
			<content:encoded><![CDATA[<p>Semana passada o <a href="http://www.richarddurnall.com/">Richard Durnall</a> me chamou para assistir a uma aula que ele deu na <a href="http://www.unimelb.edu.au/">University of Melbourne</a>. O Rich é o guru local de <a href="http://en.wikipedia.org/wiki/Lean_manufacturing">Lean</a> e é uma figura.</p>
<p>A aula foi interessante. O curso é o mestrado em alguma das 343.435 ramificações de Tecnologia da Informação, basicamente uma escolinha para CIO-wannabe. Para se ter uma idéia todas as perguntas da sessão foram sobre implantação de ERPs, você via claramente que nenhum dos estudantes tinha a mínima vivencia na indústria e acreditavam piamente nas suas Info Corporate da vida.</p>
<p>A matéria era sobre comparação de metodologias e o Rich não foi o único. Antes dele apresentou um senhor, que é professor da instituição e arquiteto do maior banco da Austrália, onde inclusive tenho conta (brr&#8230;). A palestra do senhor arquiteto foi sobre como ele participou da salvação de um projeto de data mining usando o bom e velho waterfall. O único ponto diferente de uma lição clássica sobre como não fazer software foi sobre o uso de técnicas de <a href="http://en.wikipedia.org/wiki/Six_Sigma">Six Sigma</a> para avaliação e priorização dos requisitos.</p>
<p>Quando chegou a vez do Rich apresentar Agile/Lean foi um contraste enorme. Na sessão de perguntas:</p>
<blockquote><p>
- Você falou sobre estes métodos ágeis e sobre como eles&#8230;er.. não ligam para requisitos. O [cara defendendo waterfall] apresentou um caso real de um grande banco. Você realmente acha que as técnicas de algo como agile podem competir com Six Sigma? [nota: uh?]<br />
- Então, na minha apresentação eu fui bem ralo e essa é uma palestra introdutória, então foi bom você perguntar isso. Eu trabalhei na [top 5 montadora de automóveis], na [maior empresa aérea do mundo] e em alguns bancos. Nas duas primeiras empresas eu fiz parte da implantação de Six Sigma, inclusive eu sou <a href="http://www.asq.org/certification/six-sigma/">Black Belt</a>. O que eu vi deste processo foi [&#8230;] e por isso que agile/lean é uma boa escolha.
</p></blockquote>
<p>Agora pense que em vez de &#8220;Six Sigma Black Belt&#8221; ele tivesse dito algo como &#8220;inclusive eu sou <a href="http://www.agilecertificationnow.com/">Agile Software Specialist</a> e os problemas de Six Sigma são [&#8230;]&#8221;. Teria o mesmo efeito?</p>
<p>Outro caso recente e interessante foi no <a href="http://blog.fragmental.com.br/2008/05/17/mais-sobre-o-australian-architecture-forum-%E2%80%93-melbourne/">Australian Architecture Fórum</a> em Sydney. O <a href="http://blog.halvard.skogsrud.com/">Halvard</a> estava apresentando uma palestra extremamente interessante sobre governança de projetos SOA onde a única ferramenta é um wiki. Em algum momento alguém levanta:</p>
<blockquote><p>
- Ok, ok, isso aí é muito Web 2.0, muito legal mas não é aplicável no meu cenário.<br />
- E qual seu cenário?<br />
- Eu trabalho em um banco, faço parte do grupo de controle de serviços de segurança. Isso de REST, wiki é muito legal mas vocês não entrariam num banco de modo algum!<br />
- Uhm.. interessante você falar disso porque segurança em serviços é uma das minhas áreas de estudo&#8230; <a href="http://portal.acm.org/citation.cfm?id=1248879&#038;dl=&#038;coll=">eu concluí meu Ph. D. em SOA na Universidade de Sydney e meu foco é exatamente segurança</a>. Na verdade, na ThoughtWorks a maioria dos clientes são bancos e, inclusive, tivemos hoje de manhã o arquiteto principal do banco [top 5 banco australiano] falando exatamente sobre como usaram este tipo de técnica para governança num projeto que participei.
</p></blockquote>
<p>Imagine que ele tivesse falado &#8220;Eu sou um Wiki Certified Contributor e um RESTafarian Official Gold Partner&#8221;. Teria o mesmo efeito?</p>
<p>Por que das historinhas? Para argumentar numa discussão que eu tive com o grande <a href="http://teamware.com.br/cms/component/option,com_frontpage/Itemid,1/lang,en/">Juan Bernabó</a> sobre a total e completa ausência d sentido em algo como <a href="http://www.scrumalliance.org/view/graduate_level_of_certification/ ">Certified Scrum Master</a>. O Juan argumentou que certificações são valorizadas  -e requeridas- pelas empresas. Meus pontos são:</p>
<ul>
<li>Eu não conheço nenhuma pessoa que acredite que um curso de dois dias, sem sequer uma avaliação final –pagou, passou na pratica- deva ser valorizada. Se nós sabemos que a certificação não tem valor por que a venderíamos de outra forma? Agile não é sobre trazer valor e melhorar praticas?</li>
<li>O mercado também quer porque quer e acha que precisa de cronogramas detalhados, requisitos esmiuçados e projetos que terminam em uma grande fase de testes. Nós sabemos que isso não traz valor não fazemos apologia a este tipo de coisa, por que com certificação seria diferente? Por que ao invés de combater a ineficiência e a busca por respostas fáceis nós criamos e glorificamos nossos próprios selos?</li>
<li>Uma certificação emitida por si mesmo não vale nada. A menos que alguém já acredite que Scrum traz algum valor essa certificação é como acreditar que o Inri Cristo é Jesus porque ele afirma o ser.</li>
</ul>
<p>Em resumo, eu acho o curso que é dado com o CSM ótimo. Ele abre mentes e é uma fantástica introdução. E só. O certificado emitido por este curso não tem qualquer valor real e propagandear o contrario, ajudando empresas a continuar glorificando certificações sem sentido, vai contra a primeira linha do <a href="http://agilemanifesto.org/">Manifesto Ágil</a>: </p>
<blockquote><p> We are uncovering better ways of developing<br />
software by doing it and helping others do it.
</p></blockquote>
<p><a href="http://br.groups.yahoo.com/group/scrum-brasil/message/818?var=1&#038;l=1">O debate completo está aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fragmental.com.br/2008/05/27/a-completa-irrelevancia-do-certified-scrum-master/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.531 seconds -->
<!-- Cached page served by WP-Cache -->
