<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" version="2.0">

<channel>
	<title>Bruno Mentges de Carvalho</title>
	
	<link>http://www.brunocarvalho.com</link>
	<description>Desenvolvimento de software</description>
	<pubDate>Fri, 08 May 2009 04:07:19 +0000</pubDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/brunodotcom" type="application/rss+xml" /><item>
		<title>Mantendo contexto usando ajax</title>
		<link>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/</link>
		<comments>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/#comments</comments>
		<pubDate>Fri, 08 May 2009 04:07:19 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[contexto]]></category>

		<category><![CDATA[desenvolvimento]]></category>

		<category><![CDATA[semantica]]></category>

		<category><![CDATA[tralhacontroller]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=69</guid>
		<description><![CDATA[Digamos que você tenha uma página com um vídeo e um box ao lado com vídeos relacionados. Neste box de vídeos relacionados há uma paginação e você não quer que o usuário clique ali e o site faça o reload, fazendo seu usuário recarregar o vídeo todo denovo.
A maioria dos sites implementa chamadas AJAX usando [...]]]></description>
			<content:encoded><![CDATA[<p>Digamos que você tenha uma página com um vídeo e um box ao lado com vídeos relacionados. Neste box de vídeos relacionados há uma paginação e você não quer que o usuário clique ali e o site faça o reload, fazendo seu usuário recarregar o vídeo todo denovo.</p>
<p>A maioria dos sites implementa chamadas <a href="http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)">AJAX</a> usando o atributo onClick da tag html <strong>a</strong>. Ex:</p>
<pre name="code" class="HTML">
  <a href="#"
  onClick="atualizarBoxVideosFavoritos('pagina=2');">
    Próxima Página
  </a>
</pre>
<p>Até aí tudo bem. Funciona que é uma beleza, o youtube usa isso, etc. O href=&#8217;#&#8217; é usado para não gerar um request pro servidor, usando um recurso simples do html, a âncora. </p>
<p>Se você paginou até a 7a página e quer passar o vídeo para um amigo, com a 7a página selecionada para mostrar alguns vídeos que lá estão, de repente um seu que está ali por exemplo, só com o recurso onClick não seria possível. Teria que pedir para ele paginar e olhar. Mas há uma maneira de fazer isso, e um amigo lá do trabalho, <a href="http://programandosemcafeina.blogspot.com/">Tiago Motta</a>, fez uma classe javascript que possibilita passar o contexto de todos os boxes da sua página que funcionam com ajax no link para seus amigos.</p>
<p>É o projeto TralhaController: <a href="http://github.com/timotta/TralhaController/tree/master">http://github.com/timotta/TralhaController/tree/master</a></p>
<p>Mas Bruno, comofas/ </p>
<p>Esta classe javascript, após você adicionar um observador, ela começa a monitorar a URL do usuário por mudanças na âncora (#). Vamos aos exemplos:</p>
<pre name="code" class="JavaScript">
<script>
var paginacao_box_videos_relacionados = {
      update: function(url) {
          // faz o parsing da URL
          // faz um request ajax e atualiza o box de videos relacionados
      }
  }
TralhaController.addObserver( paginacao_box_videos_relacionados );
</script>
</pre>
<p>A partir daí o TralhaController passa a monitorar a URL do usuário. Vejamos como montar o link que muda de página no box:</p>
<pre name="code" class="HTML">
  <a href="#pagina_box_videos_relacionados=2">
    Próxima Página
  </a>
</pre>
<p>Dessa forma, quando a URL mudar, o observador que programou e adicionou ao TralhaController será notificado e o método update será chamado com a url &#8220;http://seu-site-aqui/#pagina_box_videos_relacionados=2&#8243;, sem mudar de página, possibilitando que seu observador faça uma chamada ajax atualizando o box.</p>
<p>Até aqui o onClick também faria. A novidade é que se você copiar este link e passar para um amigo, ele conseguirá ver o vídeo/página/qualquer coisa que estava vendo e o box estaria paginado na segunda página, ou seja, o mesmo contexto que você via, o seu amigo também verá pois ao acessar a página seu observador será notificado e atualizará o box com a página certa.</p>
<p>Espero que este projeto os ajude. Ele implementa um padrão de projeto conhecido: O <a href="http://en.wikipedia.org/wiki/Observer_pattern">Observer</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails e Rspec sem ActiveRecord</title>
		<link>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/</link>
		<comments>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 00:12:40 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[activerecord]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ror]]></category>

		<category><![CDATA[rspec]]></category>

		<category><![CDATA[rspec-rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=51</guid>
		<description><![CDATA[Caso seus models não tenham representação no banco ou não seja ActiveResource, você precisará mudar umas coisinhas para fazer o rspec e rspec-rails funcionar. Este post se refere a: rails 2.3.2, rspec 1.2.2, rspec-rails 1.2.2, mas deve funcionar com algumas versões anteriores.
O primeiro passo é desabilitar o framework ActiveRecord no arquivo config/environment.rb

# config/environment.rb
Rails::Initializer.run do &#124;config&#124;
 [...]]]></description>
			<content:encoded><![CDATA[<p>Caso seus models não tenham representação no banco ou não seja ActiveResource, você precisará mudar umas coisinhas para fazer o rspec e rspec-rails funcionar. Este post se refere a: rails 2.3.2, rspec 1.2.2, rspec-rails 1.2.2, mas deve funcionar com algumas versões anteriores.</p>
<p>O primeiro passo é desabilitar o framework ActiveRecord no arquivo config/environment.rb</p>
<pre name="code" class="ruby">
# config/environment.rb
Rails::Initializer.run do |config|
  config.frameworks -= [:active_record, :active_resource]
  # outras configuracoes aqui
end
</pre>
<p>Agora voce deve deletar o arquivo <strong>config/database.yml</strong> e comentar as seguintes linhas do arquivo spec/spec_helper.rb</p>
<pre name="code" class="ruby">
# spec/spec_helper.rb
Spec::Runner.configure do |config|
  # config.use_transactional_fixtures = true
  # config.use_instantiated_fixtures  = false
  # config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
  # nao comente outras configuracoes
end
</pre>
<p>Agora o rspec funcionará numa boa. Você também notará que não conseguirá usar o <strong>logger</strong> do rails como usava em seus models do ActiveRecord. Para utiliza-lo, basta usar a constante RAILS_DEFAULT_LOGGER. Exemplo:</p>
<pre name="code" class="ruby">
# app/models/aluno.rb
class Aluno
  def ola
    RAILS_DEFAULT_LOGGER.info "falando ola mundo"
    #PPDD - Passei por aqui driven development
    RAILS_DEFAULT_LOGGER.debug "passei por aqui"
    "Ola mundo"
  end
end
</pre>
<p>Fica aqui a dica <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Buscando ser mais produtivo</title>
		<link>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/</link>
		<comments>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 05:39:22 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Artigo]]></category>

		<category><![CDATA[Produtividade]]></category>

		<category><![CDATA[desktop]]></category>

		<category><![CDATA[emacs]]></category>

		<category><![CDATA[pomodoro]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=44</guid>
		<description><![CDATA[Onde trabalho, temos uma política de feedback contínuo e pensando neles (os feedbacks que recebi) percebi que precisava melhorar minha produtividade e lutar mais contra uma característica que tenho: a procrastinação.  Essa característica é um dos motivos que meu blog tem estado as traças, sem atualização.
Identificado o problema, comecei a pensar sobre tudo o [...]]]></description>
			<content:encoded><![CDATA[<p>Onde trabalho, temos uma política de feedback contínuo e pensando neles (os feedbacks que recebi) percebi que precisava melhorar minha produtividade e lutar mais contra uma característica que tenho: a <a href="http://pt.wikipedia.org/wiki/Procrastina%C3%A7%C3%A3o">procrastinação</a>.  Essa característica é um dos motivos que meu blog tem estado as traças, sem atualização.</p>
<p>Identificado o problema, comecei a pensar sobre tudo o que eu fazia durante o dia, sobre o que precisava ser melhorado para que eu pudesse ter mais performance, mais produtividade e gerar mais valor em menos tempo. A primeira coisa que reparei foi que as ferramentas que eu usava estavam me atrapalhando. Olhei em volta e percebi que um dos meus amigos (<a href="http://vp.blog.br">Vitor Pellegrino</a>) no trabalho usa um editor de texto não usual como IDE e que com aquele editor ele se mantinha mais focado.</p>
<p>Este editor é o <a href="http://www.gnu.org/software/emacs/">emacs</a>. Vitor Pellegrino, como de costume, ficou empolgado em saber que eu queria aprender sobre o emacs, me enviou um monte de material sobre o emacs e se prontificou a me ajudar no que fosse preciso para que aprendesse mais rápido. Inclusive, faço propaganda aqui de um screencast do peepcode sobre o emacs que é muito bom: <a href="https://peepcode.com/products/meet-emacs">Emacs Peepcode</a>.</p>
<p>Depois disso, veio a organização do desktop do Ubuntu. A primeira dica foi o <a href="http://github.com/rmm5t/dotfiles/tree/master">projeto dotfiles do Ryan McGeary no github</a>. Nele, há todos os arquivos que começam com ponto (.), ou <em>dotfiles</em>, do seu home guardados no github com um install.rb para instalar no seu terminal linux. Isso facilita muito ao formatar/trocar de micro pois todas as suas configurações ficam lá. Inclusive todas do emacs também. O meu dotfiles no github fica <a href="http://github.com/bmentges/dotfiles/tree/master">aqui</a>.</p>
<p>Continuando no desktop, configurei meus desktops virtuais para uma matriz 2&#215;3. No primeiro desktop fica o emacs e um terminal. No segundo, tudo de comunicação: email e gtalk/y!, no terceiro fica tudo que me faz procrastinar: basicamente o google reader, no 4o fica o browser onde testo a aplicação que ta sendo desenvolvida no primeiro desktop, no 5o e 6o alguns terminais rodando os servidores/logs/e qualquer lixo que eu resolva abrir. Denovo, dando o mérito a quem é de direito, isso também foi dica do Vitor Pellegrino.</p>
<p>O próximo passo era gerenciar meu tempo melhor. Ainda não tinha achado nada eficiente para resolver esse problema. É engraçado, quando você fica genuinamente querendo resolver um problema para melhorar sua vida e só aí passa a enxergar as soluções a sua volta. Coincidentemente, o <a href="http://twitter.com/unclebobmartin">@unclebobmartin</a> twittou outro dia sobre a técnica do tomate (<a href="http://www.pomodorotechnique.com">Pomodoro Technique</a>). Por mais engraçado e simples que esta técnica possa parecer, resolvi testar, até porque o Uncle Bob e o Jim Weirich, duas pessoas que admiro, a utilizam. Venho tendo muito sucesso, meus amigos até me perguntam se eu estou dentro de um &#8220;pomodoro&#8221; quando querem falar comigo.</p>
<p>A técnica do pomodoro consiste basicamente em ter um timer (aqueles de cozinha) setado para 25 minutos, o que ele chama de um Pomodoro, e trabalhar em uma tarefa do seu to-do list. Ao acabar o pomodoro, devo descansar 5 minutos antes de iniciar o próximo. A cada 4 pomodoros, descanso 15 minutos. Entre cada pomodoro é a única hora que posso ir para meu desktop da procrastinação (o terceiro desktop), fazer pausa para ir ao banheiro, encher a garrafa de água, enfim, qualquer coisa não relacionada ao trabalho. Existem mais detalhes sobre a técnica, como por exemplo como registrar os pomodoros (to-do list), etc. Recomendo a leitura do livro no site (é gratuito) a quem interessar.</p>
<p>É claro que todas essas escolhas funcionaram para mim, mas podem não funcionar para todos. Não existe uma única maneira eficiente de melhorar sua produtividade, acredito que cada um deve buscar a sua. O mais importante é tentar melhorar continuamente e ser honesto consigo mesmo, identificando o que realmente pode estar atrapalhando tudo (dica: Geralmente é algo que você gosta muito).</p>
<p>Gostaria aqui de agradecer ao pessoal do meu time por todo o apoio, feedback e toda a ajuda para que eu pudesse identificar e implementar tudo isso, em especial agradeço a: <a href="http://vp.blog.br/">Vitor Pellegrino</a>, <a href="http://gcirne.wordpress.com/">Guilherme Cirne</a>, <a href="http://www.anselmoalves.com/">Anselmo Alves</a> e <a href="http://programandosemcafeina.blogspot.com/">Tiago Motta</a>. Sou fã de todos vocês individualmente !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Summit, eu vou</title>
		<link>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/</link>
		<comments>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 16:00:09 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/</guid>
		<description><![CDATA[Dias 15 e 16 de outubro estarei em São Paulo para prestigiar o evento Rails Summit. Vou com o Guilherme Chapiewski e espero encontrar todo mundo lá. O evento vai contar com palestras de desenvolvedores importantes como David Chelimsky, Chad Fowler, Jay Fields, Carlos Vilella, Os koreanos da Phusion (]]></description>
			<content:encoded><![CDATA[<p>Dias 15 e 16 de outubro estarei em São Paulo para prestigiar o evento <a title="http://site.locaweb.com.br/railssummit" href="http://site.locaweb.com.br/railssummit">Rails Summit</a>. Vou com o Guilherme Chapiewski e espero encontrar todo mundo lá. O evento vai contar com palestras de desenvolvedores importantes como David Chelimsky, Chad Fowler, Jay Fields, Carlos Vilella, Os koreanos da Phusion (<3 passenger), Charles Nutter, Danilo Sato, Fabio Kung e Obie Fernandez.</p>
<p>Nos vemos lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Criando um Product Backlog, parte 1</title>
		<link>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/</link>
		<comments>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 00:26:48 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/</guid>
		<description><![CDATA[Recentemente um dos nossos clientes internos na globo.com pediu para que nós os ajudássemos a elaborar um product backlog para uma nova versão de seu produto. Eu representando o lado técnico, um product owner, um arquiteto da informação e um designer fomos escolhidos para tal atividade.
Product backlog é um documento de alto nível do projeto. [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente um dos nossos clientes internos na <a title="http://www.globo.com" href="http://www.globo.com">globo.com</a> pediu para que nós os ajudássemos a elaborar um product backlog para uma nova versão de seu produto. Eu representando o lado técnico, um product owner, um arquiteto da informação e um designer fomos escolhidos para tal atividade.</p>
<p>Product backlog é um documento de alto nível do projeto. Nele é contido todas as features, wish-lists, etc. que o cliente deseja para o sistema descritas de uma maneira bem abrangente e na linguagem do cliente, que chamamos de &#8220;histórias&#8221;. Cada história contém também uma estimativa de complexidade e o valor de negócio da mesma para o cliente, para facilitar na priorização.</p>
<p>Um exemplo de uma história é o seguinte: &#8220;<em>Para poder ter uma experiência melhor assistindo um vídeo, eu como usuário gostaria de poder assistir o vídeo em tela cheia</em>&#8220;.</p>
<p>A primeira etapa foi marcar uma reunião com os envolvidos para ouvir deles o que eles tem hoje, o que os atrapalha, e o que eles querem para resolver seus problemas. Do ponto de vista técnico, que é o que vos apresento, o maior desafio é se ater ao &#8220;O QUÊ&#8221; ao invés do &#8220;COMO&#8221;. Ouvir o que eles querem fazer, o que eles precisam, o que os atrapalha, etc. Por vezes me peguei com vontade de perguntar se queriam isso dessa ou daquela forma, e precisei me conter para não tirar o foco da reunião.</p>
<p>Depois dessa reunião nós tivemos uma visão mais clara da necessidade de nossos futuros clientes e resolvemos reunir o time e conversar a respeito, visto que serão eles (e eu) que iremos desenvolver o produto. Essa reunião foi muito produtiva pois levantou diversos pontos que ainda precisavam ser trabalhados.</p>
<p>Já aí temos alguns pontos desse nosso processo:</p>
<p>1. Se reunir com o time do cliente e o cliente e ouvir deles os &#8220;<strong>o quês</strong>&#8221;<br />
2. Se reunir com o seu time e discutir os pontos levantados<br />
3. Marcar uma reunião com o cliente e o time do cliente para dar este primeiro <em>feedback</em>.</p>
<p>Como podemos ver, a presença do cliente é fundamental. E esse ciclo de reuniões já produz um primeiro <em>feedback</em>. Tivemos uma nova reunião para passar o feedback e atacar os pontos levantados. Tudo isso foi feito em menos de uma semana, o que é o mote das práticas ágeis: ciclos curtos de feedback.</p>
<p>A partir destes 3 pontos já é possível rascunhar um primeiro product backlog. E, como seguimos o <a title="http://en.wikipedia.org/wiki/Scrum_(development)" href="http://en.wikipedia.org/wiki/Scrum_(development)">scrum</a> e práticas ágeis, isso não é nenhum problema, pois o product backlog é aberto e modificável.</p>
<p>Essa foi a parte 1 do processo de criação do product backlog. Em breve estarei escrevendo o próximo da série, enquanto avançamos com a criação product backlog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>O desafio de criar a visão do projeto</title>
		<link>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/</link>
		<comments>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/#comments</comments>
		<pubDate>Thu, 22 May 2008 03:48:50 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Negócios]]></category>

		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/</guid>
		<description><![CDATA[No Scrum nosso de cada dia, existe um papel que eu considero o mais difícil de todos: o Product Owner (daqui pra frente, P.O). No Scrum, o P.O. representa o interesse do cliente e é o responsável por definir a visão do projeto, traçar uma estratégia para atingir essa visão incluindo histórias no backlog e [...]]]></description>
			<content:encoded><![CDATA[<p>No <a title="http://en.wikipedia.org/wiki/Scrum_(development)" href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> nosso de cada dia, existe um papel que eu considero o mais difícil de todos: o <strong>Product Owner</strong> (daqui pra frente, P.O). No Scrum, o P.O. representa o interesse do cliente e é o responsável por definir a visão do projeto, traçar uma estratégia para atingir essa visão incluindo histórias no backlog e definir o que será desenvolvido e entregue nos Sprints pelo time. Ou seja, ele é o responsável direto pelo <strong>ROI</strong> (Retorno do Investimento).</p>
<p>O meu post hoje foca na visão do projeto e as dificuldades em criá-la, principalmente para um produto já existente, que é o caso da empresa <a title="www.globo.com" href="http://www.globo.com">onde trabalho</a>, que há algum tempo resolveu adotar o Scrum.</p>
<p>A <strong>visão do projeto</strong> é basicamente o que o nome diz: é o motivo para ele existir, sua filosofia e seus conceitos de negócio. No cenário de projetos, existe uma característica que os difere de produtos: projetos tem início, meio e fim. Já para produtos, que é o nosso caso, o P.O. deve não apenas criar uma visão, como também uma expectativa a longo prazo para o produto, e definir limites. Até onde é responsabilidade do produto e até onde queremos chegar.</p>
<p>Essa visão deve ser adaptativa, pois o mundo muda muito rápido, e agilidade em mudar de rumo é vantagem competitiva hoje. Nisso, o Scrum ganha de longe de outras metodologias: você tem entregas em sprints curtos e a próxima entrega ainda será definida, o que dá muita margem para mudanças.</p>
<p>E como fazer quando você quer migrar pro Scrum e você não tinha apenas um stakeholder, de um produto que já existe há pelo menos cinco anos, mas sim vários ?</p>
<p>A primeira coisa a se fazer, acredito, seria pegar todos os requisitos pendentes, ou seja, os já existentes do sistema e organizá-los em histórias, do tipo: &#8220;Eu como usuário gostaria de assistir vídeos no linux (em flash)&#8221;, ou &#8220;Eu como Product Owner gostaria de disponibilizar o player para que outros sites possam incluí-lo (embedded)&#8221;. Com todas essas histórias que o produto tinha pela frente postas no papel você consegue ter uma visão geral da direção que o produto estava seguindo.</p>
<p>Descobrindo essa direção você pode: ou se ater à direção atual ou definir uma nova e criar novas histórias para que o produto começe a mudar de direção. O importante é ter essa direção, que não é fácil, diga-se de passagem. Com a direção definida você provavelmente terá agora mais facilidade em estimar o <strong>valor de negócio</strong> de cada história (valor esse de 0 a 100). O valor de negócio é uma métrica de quanto uma história traria de valor para a empresa em comparação com outra.</p>
<p>Para iniciar essa definição, pegue a história que tenha o menor valor de negócio e estime um número baixo para usar de referência, como 2 por exemplo. Daí, vá pegando as outras histórias e comparativamente dando seus valores de negócio. Rapidamente você terá um quadro bem definido com quais histórias provavelmente você irá atacar nos próximos sprints e conseguirá antever pelo menos 2 ou 3 entregas.</p>
<p>Nisso, é hora de comunicar ao time a estratégia do produto e as histórias que você pretende atacar no futuro próximo. No Sprint Planning 1, que é a primeira de duas reuniões que definem um sprint, o time irá estimar <strong>a complexidade</strong> que cada história tem e encaixar no Sprint (que no nosso caso leva 2 semanas) aquilo que o time consegue se comprometer em entregar. São também definidos nessa reunião, pelo P.O., o <a title="http://agilefaq.net/2007/10/24/what-is-definition-of-done/" href="http://agilefaq.net/2007/10/24/what-is-definition-of-done/">DoD</a> (Definition of Done, ou em português: Definição de Terminado) e os critérios de aceitação.</p>
<p>Com isso tudo feito, é só correr para o abraço. Com o time a par da visão e o sprint definido e bem detalhado, o P.O. poderá ter a certeza que caso ele precise mudar de estratégia, será tão simples como colocar mais itens no backlog do produto, estimar o valor de negócio, re-estimar ou mesmo remover histórias do backlog (não os do sprint atual, claro).</p>
<p>Uma experiência legal que tivemos aqui foi que a nossa P.O. marcou uma reunião para nos passar a visão do projeto, ouvir idéias e ter um feedback do que o time gostaria de sugerir para a plataforma <a title="http://video.globo.com/" href="http://video.globo.com/">que trabalhamos</a>. O formato da reunião foi o seguinte: Reunimos os dois times que participam do projeto dessa plataforma e de outra plataforma relacionada, misturamos todos e dividimos em dois grupos. Cada grupo teve meia hora para fazer um brainstorm de idéias, colocá-las no papel, sem que ninguém pudesse criticar a idéia do outro, apenas contribuir com as suas. Depois disso (por incrível que pareça, eram 4 folhas A4 de idéias para cada grupo), nós deveríamos discutir as idéias por mais meia hora, eliminando as idéias que fossem claramente ruins. Após essa primeira eliminação e discussão, cada grupo teve 10 minutos para escolher as top 10 idéias.</p>
<p>Foi impressionante como as idéias se mesclavam no final. Das duas listas top 10, conseguimos 12 ou 13 idéias muito boas, e as outras 7 que sobraram eram repetidas. O timebox da reunião foi de 2:30 horas. Em 2 horas e meia conseguimos ver qual a visão a médio e longo prazo da plataforma, ter uma noção muito maior do que é a nossa plataforma para a empresa como um todo e sugerir idéias para melhorar, mudar e acrescentar valor ao projeto.</p>
<p>Off-topic: Como as reuniões estão mais produtivas, depois que adotamos o Scrum&#8230; mas isso é assunto pra outro post. Voltando ao tópico e para concluir, esse é o maior desafio, na minha opinião, em uma migração para Scrum: Definir a visão dos projetos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Daily Meeting é comprometimento</title>
		<link>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/</link>
		<comments>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/#comments</comments>
		<pubDate>Mon, 19 May 2008 15:15:04 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Negócios]]></category>

		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/</guid>
		<description><![CDATA[Desde que adotamos Scrum na empresa que trabalho, tivemos um impacto enorme no resultado de nossos projetos. A velocidade, conformidade com os requisitos e qualidade dos nossos produtos aumentaram drasticamente. Mas isso não quer dizer que não tivemos nossos problemas ao implementar o Scrum. Hoje quero falar um pouco de uma das mais importantes práticas [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que adotamos <a title="http://en.wikipedia.org/wiki/Scrum_%28development%29" href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a> na <a title="www.globo.com" href="http://www.globo.com">empresa que trabalho</a>, tivemos um impacto enorme no resultado de nossos projetos. A velocidade, conformidade com os requisitos e qualidade dos nossos produtos aumentaram drasticamente. Mas isso não quer dizer que não tivemos nossos problemas ao implementar o Scrum. Hoje quero falar um pouco de uma das mais importantes práticas do Scrum e alguns dos empecilhos que encontramos.</p>
<p>O <a title="http://en.wikipedia.org/wiki/Scrum_%28development%29#The_Scrum_meeting" href="http://en.wikipedia.org/wiki/Scrum_%28development%29#The_Scrum_meeting">Daily Meeting</a> é uma reunião do Scrum que ocorre todos os dias e tem as seguintes características:</p>
<ul>
<li>Ela deve ocorrer diariamente e sempre no mesmo horário, que pode ser decidido pelo time no Sprint Planning, e preferencialmente ser sempre pela manhã.</li>
<li>O Time e o Scrum Master devem estar presentes.</li>
<li>A reunião tem um timebox de 15 minutos e não deve ultrapassar esse tempo.</li>
<li>Cada participante do time deve responder a tres perguntas: &#8220;O que fiz ontem?&#8221;, &#8220;O que farei hoje?&#8221; e &#8220;O que está me impedindo?</li>
<li>Todos devem estar de pé. (Afinal, são só 15 minutos)</li>
<li>Qualquer um pode assistir a reunião, como chicken* (chicken não pode falar durante a reunião).</li>
</ul>
<p>Eu faço parte de um time, composto por desenvolvedores, designer e arquiteto da informação. Somos 8 pessoas e o<strong> comprometimento</strong> e a <strong>participação ativa</strong> de todos do time é extremamente importante para o sucesso do sprint e consequentemente do projeto como um todo.</p>
<p>O horário oficial de chegada da empresa é as 9:30 da manhã,  e nosso time decidiu que o Daily Meeting aconteceria as 10:45. Ainda assim, temos pessoas que chegam atrasado, por motivos diversos. Quando alguém atrasa e não avisa, acontecem diversos efeitos colaterais nocivos ao scrum, como o time não saber se aquela pessoa terminou o trabalho dela, se ela tá tendo problemas ou impedimentos, e o que ela planejava fazer hoje.</p>
<p>Nosso time, em conjunto com o scrum master, começou a elaborar punições. A primeira punição foi que se alguém atrasasse e não tivesse um motivo convincente pra isso (ex. Problemas médicos e tal), o Daily Meeting seria adiantado 15 minutos até o fim do Sprint. Ou seja, alguém atrasou, o Daily Meeting iria pra 10:30, depois 10:15, depois 10:00&#8230; até chegar na hora oficial da empresa (9:30).</p>
<p>Essa primeira punição ficou muito rígida, pois não tinha uma contra-moeda pra voltar o tempo e quanto mais cedo o Daily Meeting ficava, mais difícil era de ter todo mundo presente em tempo (trabalhamos num local distante no Rio de Janeiro). Então adaptamos para que se o time ficasse 4 dias sem atrasar, e tivesse alguma penalidade já em prática, essa penalidade seria reduzida em 15 minutos, ou seja, se alguém do time se atrasasse e o daily meeting caísse de 10:45 para 10:30, bastava o time conversar com o cara e o time todo vir 4 dias sem atraso algum para voltar pra 10:45.</p>
<p>Inacreditavelmente isso ainda não funcionou. Ainda assim continuávamos tendo problemas de atraso. Todos sempre esporádicos, mais ainda assim acontecia (no final do Sprint de 10 dias, o daily meeting já estava em 10:15). Todos sentamos pra conversar e ver se não havia ninguém desestimulado, ou com vontade de trocar de time, ou insatisfeito em geral com qualquer coisa, mesmo que pessoal. Após uma longa conversa chegamos a um novo e mais flexível sistema de punição: Se qualquer pessoa for se atrasar por qualquer motivo, deve ligar com pelo menos ~20 minutos de antecedência do daily meeting para o Scrum Master e avisar que vai se atrasar, e contar o que fez e o que está impedindo.</p>
<p>Se isso fosse respeitado, o daily meeting continuaria no mesmo horário e demonstraria que a pessoa estava comprometida em não prejudicar o time todo, mesmo que tivesse um problema qualquer (trânsito, despertador que não toca, sono profundo, etc). E ficaria a cargo do Scrum Master e da gerência controlar quem abusa e quem não abusa de chegar atrasado, ou seja, separar os casos esporádicos dos crônicos e resolver como a empresa achar correto.</p>
<p>Ficamos de usar esse processo flexível nesse sprint para ver como vamos nos sair. Queria saber como você, que também tem esse problema, o enfrenta (E quem não tem, qual a fórmula mágica :P) ? Comente !</p>
<p>UPDATE: (Acertos para refletir o que espero do post)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Workshop: Modelagem Ágil + Domain Driven Design</title>
		<link>http://www.brunocarvalho.com/17/05/2008/workshop-modelagem-agil-domain-driven-design/</link>
		<comments>http://www.brunocarvalho.com/17/05/2008/workshop-modelagem-agil-domain-driven-design/#comments</comments>
		<pubDate>Sat, 17 May 2008 23:34:22 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/17/05/2008/workshop-modelagem-agil-domain-driven-design/</guid>
		<description><![CDATA[Tivemos hoje em São Paulo o segundo dia do workshop Modelagem Ágil e Domain Driven Design da Fratech. No primeiro dia, palestrado pelo Manoel Pimentel, foi abordado modelagem ágil e scrum. Foram feitas atividades para demonstrar o que é e o que não é ágil e treinar dois conceitos apresentados durante a palestra: Mind Map [...]]]></description>
			<content:encoded><![CDATA[<p>Tivemos hoje em São Paulo o segundo dia do workshop Modelagem Ágil e Domain Driven Design da <a title="http://www.fratech.net/" href="http://www.fratech.net/">Fratech</a>. No primeiro dia, palestrado pelo <a title="http://manoelpimentel.blogspot.com/" href="http://manoelpimentel.blogspot.com/">Manoel Pimentel</a>, foi abordado modelagem ágil e scrum. Foram feitas atividades para demonstrar o que é e o que não é ágil e treinar dois conceitos apresentados durante a palestra: Mind Map Modeling (M3) e UML em Cores.</p>
<p>Particularmente ainda não vejo necessidade de usar <a title="http://en.wikipedia.org/wiki/UML_colors" href="http://en.wikipedia.org/wiki/UML_colors">UML em Cores</a>. Num mundo cada vez mais ágil, quanto mais detalhes e regras pra uma documentação que deve ser simples e objetiva, menos isso será usado. Em contrapartida, eles apresentaram também a nova buzzword do mercado: <a title="http://www.agiledraw.org/index.php/Main/Examples" href="http://www.agiledraw.org/index.php/Main/Examples">Agile Draw</a>, que nada mais é que nossos rascunhos, usando um subset da UML, num whiteboard. Nisso eu acredito <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>O segundo dia foi bem interessante. DDD é um assunto que eu gosto muito, até já li duas vezes o <a title="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215" href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215">Domain Driven Design</a> do Eric Evans. O palestrante do dia foi <a title="http://blog.fratech.net/author/felipe/" href="http://blog.fratech.net/author/felipe/">Felipe Rodrigues</a>, que também palestrou na QCon 2008 sobre o mesmo assunto. A palestra dele foi muito boa, exemplificando e tentando trazer de maneira mais simples os conceitos não-tão-simples do Domain Driven Design. Tivemos também atividades práticas pra exemplificar o que foi dito.</p>
<p>No mais, o evento foi muito bom. Tive a oportunidade de ver amigos de outros eventos, e trocar experiencias do dia a dia com eles. Amanhã estarei no <a title="http://www.falandoemjava.com.br/" href="http://www.falandoemjava.com.br/">Falando em Java</a>, que promete.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/17/05/2008/workshop-modelagem-agil-domain-driven-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet Explorer 8 - Compatibilidade Web Standards</title>
		<link>http://www.brunocarvalho.com/06/03/2008/internet-explorer-8-compatibilidade-web-standards/</link>
		<comments>http://www.brunocarvalho.com/06/03/2008/internet-explorer-8-compatibilidade-web-standards/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 07:13:34 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/06/03/2008/internet-explorer-8-compatibilidade-web-standards/</guid>
		<description><![CDATA[Li calmamente esses dias o artigo sobre o IE8 e fiquei surpreso com a decisão deles de adotarem mais web standards. O maior desafio deles está em não repetir a má experiência que tiveram quando lançaram o IE7. Nesse lançamento, todos os sites que fizeram workarounds dos problemas do IE6 passaram a não renderizar direito [...]]]></description>
			<content:encoded><![CDATA[<p>Li calmamente esses dias o <a title="http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx" href="http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx">artigo sobre o IE8</a> e fiquei surpreso com a decisão deles de adotarem mais web standards. O maior desafio deles está em não repetir a má experiência que tiveram quando lançaram o IE7. Nesse lançamento, todos os sites que fizeram workarounds dos problemas do IE6 passaram a não renderizar direito no IE7.</p>
<p>Adotar uma maneira diferente de renderizar conteúdo no IE8 pode causar o mesmo problema de quando lançaram o IE7. Mas para contornar isso, eles criaram um mecanismo para informar o browser IE8 a renderizar no formato IE7 via meta-tags no header. Exemplo:</p>
<pre lang="html"><meta content="IE=7" http-equiv="X-UA-Compatible" /></pre>
<p>Ou seja, vão mesmo mudar a forma de renderizar para uma forma mais padrão e deixar a compatibilidade com as versões anteriores pra ser especificada programaticamente. Isso nos afeta muito aqui na <a title="http://www.globo.com" href="http://www.globo.com">globo.com</a> visto que nossos sites tem como premissa funcionar em todos os browsers, provavelmente teremos um bom trabalho de adaptação, mas essa notícia me deixa esperançoso.</p>
<p>Eles inclusive consultaram experts como <a title="http://alistapart.com/" href="http://alistapart.com/">A List Apart</a> e o <a title="http://www.webstandards.org/" href="http://www.webstandards.org/">Webstandars.org</a>! Impressionante, não ?</p>
<p>Estou ansioso pra ver esse IE8.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/06/03/2008/internet-explorer-8-compatibilidade-web-standards/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Globo Vídeos agora com a opção “tela cheia” !</title>
		<link>http://www.brunocarvalho.com/31/01/2008/globo-videos-agora-com-a-opcao-tela-cheia/</link>
		<comments>http://www.brunocarvalho.com/31/01/2008/globo-videos-agora-com-a-opcao-tela-cheia/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 12:42:44 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/31/01/2008/globo-videos-agora-com-a-opcao-tela-cheia/</guid>
		<description><![CDATA[É galera, saiu. O Globo Vídeos agora tem a opção tela cheia. O post do Guilherme Chapiewski, nosso líder técnico, detalha todas as motivações que nos levaram a ficar pelo menos 40 dias sem a funcionalidade tela cheia.
Aos que sentiram falta da funcionalidade, ela já está no ar. Aproveitem.
Mais uma vez nossa equipe ninja conseguiu [...]]]></description>
			<content:encoded><![CDATA[<p>É galera, saiu. O <a title="http://video.globo.com" href="http://video.globo.com">Globo Vídeos</a> agora tem a opção tela cheia. O post do <a title="http://gc.blog.br/2008/01/30/novo-release-do-globo-videos-agora-em-tela-cheia/" href="http://gc.blog.br/2008/01/30/novo-release-do-globo-videos-agora-em-tela-cheia/">Guilherme Chapiewski</a>, nosso líder técnico, detalha todas as motivações que nos levaram a ficar pelo menos 40 dias sem a funcionalidade <strong>tela cheia</strong>.</p>
<p>Aos que sentiram falta da funcionalidade, ela já está no ar. Aproveitem.</p>
<p>Mais uma vez nossa equipe ninja conseguiu entregar tudo com qualidade e dentro do prazo ! Viva o <a title="http://en.wikipedia.org/wiki/Scrum_(development)" href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/31/01/2008/globo-videos-agora-com-a-opcao-tela-cheia/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
