<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>João &#38; Software</title>
	<atom:link href="http://www.joaodosoftware.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joaodosoftware.com</link>
	<description>Random.GenerateNext(thought)</description>
	<lastBuildDate>Tue, 10 Apr 2012 14:16:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Plano de Capacidade e Escalabilidade no Windows Azure – Parte 2</title>
		<link>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-2/</link>
		<comments>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-2/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 14:16:52 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[plano de capacidade]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=301</guid>
		<description><![CDATA[Planejamento de Capacidade O número de instancias que devem ser usadas, bem como o tamanho delas, depende basicamente da analise feita a partir de um plano de capacidade. Não vamos esgotar o assunto de planejamento de capacidade, mas podemos dar uma idéia de como inicia-lo. Planejamento de capacidade é o processo de previsão da saturação [...]]]></description>
			<content:encoded><![CDATA[<h2>Planejamento de Capacidade</h2>
<p>O número de instancias que devem ser usadas, bem como o tamanho delas, depende basicamente da analise feita a partir de um plano de capacidade. Não vamos esgotar o assunto de planejamento de capacidade, mas podemos dar uma idéia de como inicia-lo.</p>
<p>Planejamento de capacidade é o processo de previsão da saturação do sistema pelos níveis futuros de carga de processamento e ainda de se determinar a melhor forma de se retardar esta saturação tanto quanto possível.</p>
<p>Para construção de um plano de capacidade, o primeiro passo é definir a carga total da aplicação e os requisitos de capacidade usando métricas especificas como, tempo de resposta, capacidade de hardware consumida ou picos de processamento.</p>
<h3>3 perguntas importantes</h3>
<p>Com base em 3 perguntas simples podemos <strong>iniciar</strong> o planejamento de capacidade. Essas perguntas são:</p>
<p><strong>Quão bem sua infraestrutura está atuando?</strong></p>
<p>É importante medir a carga de trabalho para cada peça individual da arquitetura que compromete sua aplicação, servidor web, base de dados, rede. Compare esses itens com os requisitos de desempenho e verifique se a atuação está de acordo com o esperado.</p>
<p><strong>O que será preciso no futuro para manter um desempenho aceitável?</strong></p>
<p>Planeje o futuro baseado no que se sabe a respeito do passado da performance do sistema, então junte esse planejamento com sua capacidade de cumprir e um prazo realista. Determine o que será preciso e quando será preciso. Leve em conta recursos humanos, arquitetura e até recursos financeiros.</p>
<p>Podem ser necessárias otimizações em códigos, troca de componentes ou até upgrade de harware. Tudo isso implicará em recursos de alguma forma, fique atento a isso.</p>
<p><strong>Como será possível “instalar” e gerenciar recursos, após conseguir o que se deseja?</strong></p>
<p>É preciso ser capaz de se adaptar a novas realidades, por isso devemos aplicar ferramentas e técnicas que facilitem a adequação a novos cenários.</p>
<p>Não podemos esquecer a importância da melhoria continua, que pode nos ajudar a aperfeiçoar rotinas e processos ao longo do tempo.</p>
<p>&nbsp;</p>
<h3>Importância de regras</h3>
<p>Após o inicio do planejamento de capacidade devemos verificar as regras que gostaríamos de atender. Em geral elas devem vir acompanhadas de métricas para que se possa quantificar o atendimento ou não da regra.</p>
<p>Para simplificar é possível iniciar o planejamento de capacidade com apenas 2 tipos de regras.</p>
<p><strong>Regras de agendamento</strong></p>
<p>As regras de agendamento podem atender as demandas On/Off e Sazonal. Com elas podemos agendar períodos em que gostaríamos de escalar nossos recursos para atendimento da demanda.</p>
<p><strong>Regras baseadas em métricas</strong></p>
<p>Basear as regras em métricas é o cenário mais comum, por isso é importante alinhar os dados coletados com o planejamento feito na inicial do planejamento de capacidade.</p>
<h3>Cargas e Métricas</h3>
<p>As cargas de processamento podem variar de acordo com o sistema, por isso é importante utilizar as métricas corretas para se obter os resultados desejados.  Podemos categorizar as métricas para um melhor entendimento sobre elas.</p>
<p><strong>Métricas imediatas</strong></p>
<p>As métricas imediatas procuram definir e quantificar o trabalho que está sendo feito pelo sistema naquele momento. Como exemplos, podemos citar:</p>
<ul>
<li>Número de requisições atendidas por segundo</li>
<li>Tempo de processamento de determinada rotina</li>
<li>Número de mensagens atendidas em uma fila de processamento por segundo</li>
</ul>
<p>Quanto a esse tipo de métrica deve haver cuidado para que a medição não interfira na performance do sistema e também com o tratamento dos dados que serão muito volumosos.</p>
<p><strong>Métricas de carga</strong></p>
<p>Essas métricas definem a carga que está sendo aplicada ao sistema.  Algumas sugestões de medição podem incluir:</p>
<ul>
<li>Utilização do CPU</li>
<li>Utilização de Mémoria RAM</li>
<li>Tamanho de fila de processamento</li>
</ul>
<p>Algumas dessas métricas podem ter valor isoladamente, outras podem necessitar de algum dado adicional. Por exemplo, a quantidade de mensagens em uma fila de processamento só produz alguma informação útil se tivermos dados como o número de mensagens que podemos atender por segundo. Assim podemos provisionar nossas WorkRoles para atendimento da fila por exemplo.</p>
<p><strong>Métricas derivadas</strong></p>
<p>Como o próprio nome indica, essas métricas são variações de dados obtidos.  Como exemplo podemos ter:</p>
<ul>
<li>Variação na taxa de utilização do CPU</li>
<li>Variação do número de requisições por segundo</li>
<li>Variação do tamanho da fila de processamento</li>
</ul>
<p>Esse tipo de métrica é importante para determinar a velocidade de crescimento e diminuição da demanda. Dessa forma podemos planejar melhor a adição ou diminuição de recursos para não termos gastos desnecessários.</p>
<p><strong>Métricas indiretas</strong></p>
<p>Esse tipo de indicador pode não produzir nenhuma informação se analisado isoladamente, mas se colocado em contexto juntamente com outras métricas, podem produzir indicadores interessantes. Podemos por exemplo monitorar a quantidade de usuários do sistema ou os gastos com instâncias ou banco de dados no Windows Azure.</p>
<p>Com essas informações é possível estabelecer qual a relação de número de acessos e total de usuários do sistema em um momento de pico de carga. É possível tornar realidade cálculos que incluem, por exemplo, o custo financeiro de 1 usuário no sistema.</p>
<h2>Reunindo informações necessárias</h2>
<p>A plataforma da Microsoft possui muitas fontes que podemos usar para coletar dados. Uma delas é o Windows Azure Diagnostics (http://msdn.microsoft.com/en-us/library/windowsazure/hh411552.aspx), que permite a coleta de dados de aplicações que estão sendo executadas na plataforma. Essa API pode ser usada para log, auditoria, monitoramento de performance, entre outras coisas.</p>
<p>É possível também obter outros tipos de informações através da Service Management API do Windows Azure, que informa por exemplo, o status de uma determinada instância. Essa é uma API muito importante no que diz respeito a escalar os recursos computacionais.</p>
<p>É importante lembrar que quanto maior o volume de informação coletada, maior será a precisão para tomada de decisões, porém isso implicará em um custo maior também, relativo a trafego dessas informações de analise, armazenamento e até performance em determinados casos.</p>
<h2>Conclusão</h2>
<p>Ao concluir o planejamento de capacidade e tentar reunir as informações necessárias, você pode ter percebido que as regras têm diferentes complexidades. Submeter os dados coletados a tratamento, pode se tornar uma tarefa que exija a implementação de uma “engine” própria de interpretação de regras.</p>
<p>Sugestões e tipos de regras</p>
<p><strong>Regras restritivas</strong></p>
<p>Pelo bem do sistema e as vezes pela saúde financeira da empresa, é interessante criar regras de restrinjam a atuação em determinadas situações. Por exemplo:</p>
<ul>
<li>“Execute no mínimo 2 instâncias”</li>
<li>“Utilize os recursos necessários para melhor performance enquanto a conta de uso estiver abaixo de R$ 1.000”</li>
</ul>
<p><strong>Regras de respostas</strong></p>
<p>Para garantir o bom funcionamento do sistema, em determinados momentos é preciso “responder” a picos de utilização imediata ou análise de variações com o passar do tempo. Como exemplo podemos citar:</p>
<ul>
<li>“Se a media de requisições por segundo aumentar x%, aumente uma instância”</li>
<li>“Se o tempo de resposta de uma requisição ultrapassar 1000ms, aumentar uma instância”</li>
<li>“Se o número de mensagens na fila de processamento ultrapassar 100, adicionar uma Worker Role”</li>
</ul>
<p>O processamento de regras pode ser algo muito complexo, por isso não subestime a importância dessa etapa na construção da sua aplicação. Essa é apenas uma sugestão pessoal para implementação e definição de regras.</p>
<p>Aplicação</p>
<p>A construção de um sistema de escalabilidade dinâmica pode ser dividida em 3 grandes áreas, são elas:</p>
<p><strong>Monitor de Performance</strong></p>
<ul>
<li>Monitora as aplicações no Windows Azure</li>
<li>Coleta os dados</li>
<li>Armazena os dados</li>
</ul>
<p><strong>Motor de Interpretação de Regras</strong></p>
<ul>
<li>Executa o tratamento dos dados</li>
<li>Confronta dados e regras estabelecidas</li>
</ul>
<p><strong>Motor de Escalabilidade</strong></p>
<ul>
<li>Recupera os dados coletados e armazenados pelo monitor de performance</li>
<li>Passa informações ao motor de interpretação de regras</li>
<li>Executa rotinas de chamadas ao Windows Azure para provisionar os recursos na plataforma, de acordo com a saída estabelecida pela interpretação das regras.</li>
</ul>
<p>É possível também construir uma aplicação que seja reutilizada em ambiente Windows, fora da nuvem, pois os contadores de performance em muitos casos são comuns. Tudo vai depender do nível de acoplamento do seu código com as funcionalidades e APIs do Windows Azure.</p>
<p>A construção de uma aplicação para alcançar a escalabilidade dinâmica no Windows Azure não é algo tão complexo quanto pode parecer. Mas para que essa aplicação agregue valor ao seu produto, é preciso entender alguns conceitos por trás da escalabilidade dinâmica, que partem do planejamento de capacidade e chegam até a utilização do Windows Azure.</p>
<p>Esse artigo teve como objetivo sugerir um modelo para implementação de uma “engine” de escalabilidade dinâmica e explicar alguns conceitos que devem ser difundidos para o melhor atendimento da demanda computacional, através do planejamento de capacidade, utilizando a ferramenta Windows Azure.</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plano de Capacidade e Escalabilidade no Windows Azure &#8211; Parte 1</title>
		<link>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-1/</link>
		<comments>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-1/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 14:15:47 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[plano de capacidade]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=294</guid>
		<description><![CDATA[Depois de algum tempo sem publicar nada, resolvi publicar um texto meu sobre escalabilidade dinâmica no Windows Azure, que escrevi a algum tempo atrás. O texto é extenso, por isso irei dividi-lo em algumas partes. Espero que gostem. Introdução O Windows Azure é um ambiente flexível, oferecendo aos desenvolvedores de software uma grande resposta a [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de algum tempo sem publicar nada, resolvi publicar um texto meu sobre escalabilidade dinâmica no Windows Azure, que escrevi a algum tempo atrás. O texto é extenso, por isso irei dividi-lo em algumas partes.</p>
<p>Espero que gostem.</p>
<h2>Introdução</h2>
<p>O Windows Azure é um ambiente flexível, oferecendo aos desenvolvedores de software uma grande resposta a cenários que podem tirar vantagem da escalabilidade. A arquitetura do Windows Azure também permite que aplicações completas sejam reformadas como serviços, excluindo a necessidade de operações e equipamentos na infra-estrutura local.</p>
<p>Embora a plataforma forneça ferramentas e suplementos específicos para o sistema de desenvolvimento utilizando as tecnologias Microsoft, o Windows Azure é um ambiente aberto que permite que os desenvolvedores continuem usando as linguagens, ferramentas e serviços habituais.</p>
<p>Ter a computação funcionando apenas como um pacote de conveniências era um sonho que tinha o potencial de transformar o mercado de TI, oferecendo inúmeras vantagens, como a forma de entrega de softwares e a maneira de se pensar em recursos de hardware. Cloud Computing é um novo termo para a tão sonhada, computação como utilidade,  que recentemente emergiu como uma realidade comercial.</p>
<p>A escalabilidade que a cloud computing nos permite é muito mais que isso, é uma maneira de ganhar dinheiro, ou deixar de gastá-lo. É um caminho para pequenas organizações parecerem e tornarem-se grandes. Alguns dos fatores que tornam a cloud computing tão atraente são:</p>
<ol>
<li>A ilusão de recursos computacionais infinitos, disponíveis sob demanda, eliminando a necessidade dos clientes de pensar muito a frente para provisionar recursos.</li>
<li>A eliminação de um comprometimento por parte dos usuários de computação em nuvem, permitindo companhias começarem pequenas e aumentar recursos de hardware apenas quando há um aumento nas suas necessidades.</li>
<li>A habilidade de pagar pelo uso de recursos de hardware baseados em períodos pequenos como processamento por hora, armazenamento por dia e etc. E principalmente por liberar esses recursos quando não são mais necessários.</li>
</ol>
<h2>Situações de uso</h2>
<p><a href="http://www.joaodosoftware.com/wp-content/uploads/2012/04/cargaCloud.png"><img class="aligncenter size-full wp-image-295" title="cargaCloud" src="http://www.joaodosoftware.com/wp-content/uploads/2012/04/cargaCloud.png" alt="" width="640" height="473" /></a></p>
<ul>
<li><strong>On e Off</strong> – Podemos exemplificar esse tipo de demanda com sistemas ou rotinas que funcionam em horários pré-determinados para consolidar dados. A frenquencia pode variar a depender do tipo de sistema. O processamento pode ocorrer em horas determinadas do dia ou somente uma vez por mês, tudo depende da necessidade do sistema.</li>
<li><strong>Crescimento rápido</strong> – Um dos melhores padrões de uso para tirar vantagem da computação em nuvem. A dificuldade das startups em prever o crescimento da sua demanda é algo conhecido por todos. Utilizar cloud computing nesse cenário pode ser a diferença entra e vida e a morte de uma startup, que precisar gastar o mínimo possível, ao mesmo tempo que tem que responder rapidamente ao crescimento da demanda.</li>
<li><strong>Carga Imprevista</strong> – Nem sempre temos capacidade de prever um pico de trafego, por conta disso, essa também é uma boa situação para aplicação de cloud computing. O Windows Azure por exemplo, permite que você aumente seu poder de processamento em pouco tempo. Dessa forma será possível atender a demanda repentina de um website que virou hit nas redes sociais por exemplo.</li>
<li><strong>Carga Sazonal</strong> – Com o tempo você pode identificar um padrão sazonal na sua demanda computacional. Para esses casos a computação em nuvem o ajudará a manter uma estrutura mais barata durante a maior parte de tempo, aumentando os recursos de processamento apenas quando necessário.</li>
</ul>
<p>&nbsp;</p>
<h2>Windows Azure e cargas</h2>
<p>A característica de provisionamento dinâmico é um dos fatores que mais interessa, do ponto de vista da aplicação.  Com esse recurso, podemos ter a redução de custos operacionais, com uma configuração de infra-estrutura mais aderente às necessidades do negócio.</p>
<p>No Windows Azure temos o conceito de instancias computacionais, que facilitam o trabalho de provisionamento dinâmico. Na plataforma da Microsoft é possível manipular o tipo/tamanho dessas instancias, assim como o número delas.</p>
<h3>Tipos de instancias</h3>
<p>Atualmente existem 5 tipos ou “tamanhos” de instâncias, cada uma delas com diferentes recursos computacionais. Abaixo segue uma tabela informativa:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="93"><strong>Tamanho</strong></td>
<td valign="top" width="66"><strong>CPU</strong></td>
<td valign="top" width="76"><strong>Memória</strong></td>
<td valign="top" width="132"><strong>Armazenamento </strong></td>
<td valign="top" width="132"><strong>Desempenho I/O</strong></td>
<td valign="top" width="83"><strong>Custo por Hora</strong></td>
</tr>
<tr>
<td valign="top" width="93"><strong>Extra Pequena</strong></td>
<td valign="top" width="66">1.0 GHz</td>
<td valign="top" width="76">768 MB</td>
<td valign="top" width="132">20 GB</td>
<td valign="top" width="132">Baixo</td>
<td valign="top" width="83">$0.04</td>
</tr>
<tr>
<td valign="top" width="93"><strong>Pequena</strong></td>
<td valign="top" width="66">1.6 GHz</td>
<td valign="top" width="76">1.75 GB</td>
<td valign="top" width="132">225 GB</td>
<td valign="top" width="132">Moderado</td>
<td valign="top" width="83">$0.12</td>
</tr>
<tr>
<td valign="top" width="93"><strong>Média</strong></td>
<td valign="top" width="66">2 x 1.6 GHz</td>
<td valign="top" width="76">3.5 GB</td>
<td valign="top" width="132">490 GB</td>
<td valign="top" width="132">Alto</td>
<td valign="top" width="83">$0.24</td>
</tr>
<tr>
<td valign="top" width="93"><strong>Grande</strong></td>
<td valign="top" width="66">4 x 1.6 GHz</td>
<td valign="top" width="76">7  GB</td>
<td valign="top" width="132">1.000 GB</td>
<td valign="top" width="132">Alto</td>
<td valign="top" width="83">$0.48</td>
</tr>
<tr>
<td valign="top" width="93"><strong>Extra Grande</strong></td>
<td valign="top" width="66">8 x 1.6 GHz</td>
<td valign="top" width="76">14 GB</td>
<td valign="top" width="132">2.040 GB</td>
<td valign="top" width="132">Alto</td>
<td valign="top" width="83">$0.96</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Podemos perceber que o Windows Azure está preparado para atender a maior parte das necessidades computacionais. Temos opções de instâncias multiprocessadas, com baixo ou alto desempenho de I/O, com grandes capacidades de armazenamento interno e memória. Tudo depende da sua necessidade.</p>
<h3>Adicionando e removendo instancias</h3>
<p>Apenas o alto poder de processamento não encerra a discussão quando falamos de sistemas que precisam de uma alta disponibilidade. É importante saber que no Windows Azure existe a possibilidade de adicionar ou remover instancias computacionais a qualquer tempo.</p>
<p>A recomendação básica é que se trabalhe com um mínimo de 2 instancias computacionais sempre, para manter a disponibilidade.  Dessa forma se pode atender a picos de demanda e adequar o número de instancias a necessidade, sem causar indisponibilidade do serviço, de forma transparente para o usuário.</p>
<p>O Windows Azure fará o balanceamento de carga automaticamente para sua aplicação, portanto, devemos apenas tomar os cuidados básicos com relação a rotinas que tenham afinidade com a maquina em que são processadas.</p>
<p>Parece que em breve será possível controlar o esquema de load balancer nas aplicações, mas esse é um tema que merece uma outra discussão.</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2012/04/plano-de-capacidade-e-escalabilidade-no-windows-azure-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arquitetura, TDD e Profissionais</title>
		<link>http://www.joaodosoftware.com/2012/02/arquitetura-tdd-e-profissionais/</link>
		<comments>http://www.joaodosoftware.com/2012/02/arquitetura-tdd-e-profissionais/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 16:55:25 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[liderança]]></category>
		<category><![CDATA[poka-yoke]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=285</guid>
		<description><![CDATA[Voltando a falar um pouco sobre Poka-Yoke, que foi discutido em um post anterior, vou falar agora superficialmente sobre a parte mais prática disso, em código mesmo. Alguns amigos reclamam que escrevo posts longos demais, então dessa vez tentarei ser breve e direto ao ponto. Podemos aplicar Poka-Yoke através de testes unitários e até através [...]]]></description>
			<content:encoded><![CDATA[<p>Voltando a falar um pouco sobre <a href="http://www.joaodosoftware.com/2012/01/poka-yoke-e-qualidade-voce-faz-algo-a-respeito-disso/" target="_blank">Poka-Yoke</a>, que foi discutido em um post anterior, vou falar agora superficialmente sobre a parte mais prática disso, em código mesmo. Alguns amigos reclamam que escrevo posts longos demais, então dessa vez tentarei ser breve e direto ao ponto.</p>
<p>Podemos aplicar Poka-Yoke através de testes unitários e até através da arquitetura do software. O desenvolvimento guiado por testes é um forma de se aplicar Poka-Yoke e é muito fácil de se perceber isso, porque você está fazendo teste para garantir um processo com qualidade e não para testar a qualidade de um processo já pronto. A diferença é sutil mas muito importante.</p>
<p>Se você já tem um nível de maturidade um pouco maior, eu vou tentar adivinhar o que acontece com sua equipe.</p>
<p>Todos utilizam TDD, a arquitetura é aberta e flexível e os Smurfs passeiam pela manhã no seu escritório.</p>
<p>A realidade dos Smurfs não é impossível de ser alcançada,  porem depende de comprometimento da equipe e profissionais maduros.  Nós sabemos que essa não é a realidade da maioria das empresas. É difícil encontrar profissionais maduros e o comprometimento é um requisito que depende de vários outros fatores dentro da organização.</p>
<p>Esse é um problema de algumas metodologias ágeis na área de software. Elas trouxeram as pessoas para o centro e exigiram comprometimento para transformar todos os princípios ágeis em realidade. Mas infelizmente o mundo não é assim e frequentemente você terá que lidar com profissionais sem o comprometimento suficiente.</p>
<p>Às vezes temos equipes que misturam todo tipo de profissional, essa é a realidade da maioria. Nesse caso aplicar Poka-Yoke em arquitetura significa construir de forma que evite a falha por parte dos menos comprometidos ou menos experientes.</p>
<p>No seu ambiente de trabalho, como esses assuntos são tratados?</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2012/02/arquitetura-tdd-e-profissionais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estruturando testes unitários</title>
		<link>http://www.joaodosoftware.com/2012/01/como-estruturar-testes-unitarios/</link>
		<comments>http://www.joaodosoftware.com/2012/01/como-estruturar-testes-unitarios/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 01:49:17 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=288</guid>
		<description><![CDATA[A cultura de testes vem crescendo a cada dia que passa, mas as vezes encontramos testes básicos sem uma estruturação coerente, e isso aos poucos vai favorecendo os erros nas rotinas de teste. Existem diversas maneiras de estruturar a escrita de teste, mas vou falar rapidamente os conceitos básicos. Vamos ao código que interessa. Para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignleft size-full wp-image-289" title="Bug" src="http://www.joaodosoftware.com/wp-content/uploads/2012/01/Bug.png" alt="" width="128" height="128" />A cultura de testes vem crescendo a cada dia que passa, mas as vezes encontramos testes básicos sem uma estruturação coerente, e isso aos poucos vai favorecendo os erros nas rotinas de teste.</p>
<p style="text-align: justify;">Existem diversas maneiras de estruturar a escrita de teste, mas vou falar rapidamente os conceitos básicos. Vamos ao código que interessa.</p>
<p style="text-align: justify;">Para esse exemplo estou usando a suite de testes nativa do Visual Studio, mas todas as outras do mercado você deve encontrar as mesmas opções, apenas com nomes um pouco diferentes. Usando C# no exemplo:</p>
<p>&nbsp;</p>
<pre class="brush:csharp">[TestClass]
    public class ProdutoRepositorioTeste
    {

        public CommerceContexto contexto { get; set; }

        // Use TestInitialize() para rodar código antes de cada teste
        [TestInitialize()]
        public void InicializacaoTestes()
        {
            EstrategiaInicializacaoBancoDadosTeste estrategia = new EstrategiaInicializacaoBancoDadosTeste();
            contexto = new CommerceContexto("conexaoTeste", estrategia);
        }

        // Use TestCleanup para executar algum código depois de cada teste
        [TestCleanup()]
        public void MyTestCleanup()
        {
            contexto.Dispose();
        }

        [TestMethod]
        public void Deve_Retornar_Somente_Produtos_A_Venda()
        {
            //Arrange
            Repositorios.ProdutoRepositorio repositorio = new Repositorios.ProdutoRepositorio(contexto);

            //Act
            List&lt;Produto&gt; produtos = repositorio.ObterProdutosAVenda();

            //Assert
            Assert.IsNotNull(produtos);
            Assert.AreEqual(2, produtos.Count);
        }
    }</pre>
<p>Nesse caso estou testando uma rotina que utiliza o Entity Framework 4.1</p>
<p>Não vou entrar em detalhes técnicos da implementação, até porque a discussão sobre como e porque testar de determinadas maneiras com EF 4.1 é bem extensa. Só pra constar, essa implementação usa uma estrategia de inicialização própria e acaba sendo executada contra uma base de dados SQLCompact, por motivos específicos. Mas o código acima foi modificado para simplificar o entendimento do exemplo.</p>
<h2>Inicializando os teste</h2>
<p>Se você tem algum código, que precisa ser executado sempre antes de cada teste, então você pode fazer isso através de algum método com a notação <strong>TestInitialize()</strong></p>
<p>Desta forma, sempre antes da execução de cada caso de teste será executado o metodo <strong>InicializacaoTestes()</strong> no exemplo acima.</p>
<p>Você pode optar também por inicializar um objeto que seja válido para todos os testes executados dentro dessa classe de testes. Para fazer isso, basta substituir o <strong>TestInitialize()</strong> pelo <strong>ClassInitialize()</strong></p>
<h2>Executando testes</h2>
<p>Dentro do método de teste gosto de seguir algumas regrinhas, começando por colocar um nome compreensível na rotina de teste, definir e seguir uma convenção de nomes que será utilizada da mesma forma nas outras rotinas de teste.</p>
<p>Outro ponto é a separação do código de teste no famoso modelo mental AAA</p>
<blockquote><p>Arrange &#8211; Act &#8211; Assert</p>
<p>ou</p>
<p>Preparar &#8211; Agir &#8211; Verificar</p></blockquote>
<p>Organizando o código dessa forma fica mais fácil de identificar possíveis falhas e testes que estão abrangendo mais ações do que deveriam.</p>
<h2>Finalizando os testes</h2>
<p>A mesma logica que funciona para a inicialização de testes deve ser aplicada aqui também. O <strong>TestCleanup()</strong> cumpre a função de executar algum trecho de código após cada teste e o <strong>ClassCleanup()</strong> deve ser utilizado para executar rotinas depois da finalização de todos os testes dentro do contexto daquela classe.</p>
<p>Nada de complexo na estruturação dos testes, mas não utilizar esse ou algum outro modelo lógico de estruturação de testes facilita a ocorrência de erros, quando os testes começam a ficar complexos e o projeto vai crescendo. O texto é bem simples, mas é para não deixar passar batido alguns erros comuns que vejo em códigos por ai&#8230;</p>
<p>Você tem alguma opinião sobre isso? Concorda com a estrutura de testes? Deixe um comentário&#8230;</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2012/01/como-estruturar-testes-unitarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poka-Yoke e Qualidade &#8211; Você faz algo a respeito disso?</title>
		<link>http://www.joaodosoftware.com/2012/01/poka-yoke-e-qualidade-voce-faz-algo-a-respeito-disso/</link>
		<comments>http://www.joaodosoftware.com/2012/01/poka-yoke-e-qualidade-voce-faz-algo-a-respeito-disso/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 16:40:01 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[poka-yoke]]></category>
		<category><![CDATA[qualidade]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=281</guid>
		<description><![CDATA[Poka-Yoke é um conceito muito simples, que significa &#8220;a prova de falha&#8221;. Mas apesar da facilidade para entender o conceito, parece que as pessoas tem um pouco mais de dificuldade de aplicar isso no contexto de qualidade na produção de software. Exemplos de Poka-Yoke Dispositivos a prova de erro previnem o usuário de fazer alguma [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Poka-yoke" target="_blank">Poka-Yoke</a> é um conceito muito simples, que significa &#8220;a prova de falha&#8221;. Mas apesar da facilidade para entender o conceito, parece que as pessoas tem um pouco mais de dificuldade de aplicar isso no contexto de qualidade na produção de software.</p>
<h1>Exemplos de Poka-Yoke</h1>
<p>Dispositivos a prova de erro previnem o usuário de fazer alguma ação que leve a um comportamento ou resultado não desejado. Como exemplo simples, podemos citar os aparelhos de processamento de alimentos que só &#8220;funcionam&#8221; quando o compartimento de alimentos está devidamente fechado. Isso evita que o consumidor ligue o processador acidentalmente enquanto está com a mão dentro do compartimento.</p>
<p>Temos muitos outros exemplos, como por exemplo a retirada da chave da ignição do carro com o mesmo em movimento.</p>
<h1>Poka-Yoke em Software</h1>
<p>Muita coisa já foi escrita sobre Poka-Yoke em desenvolvimento de software, principalmente por autores que trazem as abordagens de LEAN para o mundo da produção de software.</p>
<p>Todos entendem o conceito e conseguem aplicar em determinados níveis, mas parece que as pessoas negligenciam o fator que leva isso a ser importante. Não vou entrar aqui na história da Qualidade e falar da era das inspeções, controle estatístico, qualidade total e etc. Vou citar apenas uma frase que resume muito bem a falha que muitos cometem.</p>
<blockquote><p>“Qualidade deve ser construída, não controlada!”</p></blockquote>
<p>Em software vivemos na era da inspeção da qualidade. As pessoas querem controlar a qualidade, ao invés de estabelecer processos que garantam a qualidade desde o inicio. Dessa forma vamos viver eternamente correndo atrás de bugs.</p>
<p>Marry Poppendieck costuma dizer em seus livros que:</p>
<blockquote><p>“Inspeção para encontrar defeitos é um desperdício. Inspeção para prevenir defeitos é essencial.”</p></blockquote>
<h1>Poka-Yoke no desenvolvimento</h1>
<p>&nbsp;</p>
<p>Podemos aplicar Poka-Yoke em diversos aspectos no desenvolvimento de software, mas vou fazer uma pergunta simples a você.</p>
<p><strong>Porque você controla a qualidade através de inspeções e testes depois que o software/funcionalidade já está pronto?</strong></p>
<p>Seguindo as referências que citei acima, o processo muito mais eficiente seria controlar a qualidade enquanto o software está sendo desenvolvido e não depois da funcionalidade pronta.</p>
<p>Podemos aplicar Poka-Yoke através de testes unitários e até através da arquitetura do software. O desenvolvimento guiado por testes é um forma de se aplicar Poka-Yoke e é muito fácil de se perceber isso, porque você está fazendo teste para garantir um processo com qualidade e não para testar a qualidade de um processo já pronto. A diferença é sutil mas muito importante.</p>
<p>Através da arquitetura também podemos aplicar Poka-Yoke, mas esse é um tema muito mais profundo, que merece um post só para essa discussão.</p>
<p>Concorda? Discorda? Deixe um comentário.</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2012/01/poka-yoke-e-qualidade-voce-faz-algo-a-respeito-disso/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Alguns Mitos sobre Liderança</title>
		<link>http://www.joaodosoftware.com/2011/10/alguns-mitos-sobre-lideranca/</link>
		<comments>http://www.joaodosoftware.com/2011/10/alguns-mitos-sobre-lideranca/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 15:01:23 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[liderança]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=275</guid>
		<description><![CDATA[Depois de algumas semanas ausente, estou de volta e pretendo voltar a escrever de forma mais constante. Pretendo também retomar os posts sobre tecnologia e desenvolvimento de software, mas antes preciso escrever algumas coisas que vem me angustiando. Recentemente tenho ouvido muita coisa que eu discordo a respeito de liderança. Na maioria das vezes essas [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.joaodosoftware.com/wp-content/uploads/2011/10/grupo.jpg"><img class="alignright size-medium wp-image-276" title="grupo" src="http://www.joaodosoftware.com/wp-content/uploads/2011/10/grupo-300x199.jpg" alt="" width="300" height="199" /></a>Depois de algumas semanas ausente, estou de volta e pretendo voltar a escrever de forma mais constante. Pretendo também retomar os posts sobre tecnologia e desenvolvimento de software, mas antes preciso escrever algumas coisas que vem me angustiando.</p>
<p style="text-align: justify;">Recentemente tenho ouvido muita coisa que eu discordo a respeito de liderança. Na maioria das vezes essas afirmações vem de pessoas que possuem uma posição profissional superior a minha, por isso, em determinados momentos, fica difícil confrontar o conhecimento teórico com a experiência prática.  Nesses casos a prática tem a seu favor o resultado alcançado e comprovado.</p>
<h2 style="text-align: justify;">Para ser Líder é preciso um cargo</h2>
<p style="text-align: justify;">Hoje as pessoas já conseguem ver a diferença entre liderança e autoridade com uma facilidade maior. Mas ainda existe muita gente que acha que a liderança só é exercida com um cargo. Isso é uma grande bobagem.</p>
<p style="text-align: justify;">O cargo só irá conferir a autoridade necessária para determinadas ações, mas um líder de fato tem sua autoridade estabelecida de outra forma. Não vou entrar na discussão de tipos de liderança, mas só para exemplificar, você já deve ter se deparado no seu ambiente de trabalho com alguem que não tinha nenhum cargo de liderança, porém conseguia unir todo time em uma direção. Os fatores que levam a isso podem variar de conhecimento técnico superior aos demais, até carisma e poder de negociação elevados.</p>
<h2 style="text-align: justify;">Para ser Líder é preciso ter carisma</h2>
<p style="text-align: justify;">Vejo muita gente se apegando a essa afirmação hoje em dia. Principalmente em tempos de Apple e Steve Jobs, todos acham que o modelo de sucesso é exatamente esse. O primeiro engano nessa afirmativa está implícito.  As pessoas acham que o carisma está diretamente ligado ao poder de convencimento e isso não é verdade. Poder de convencimento passa por diversos aspectos incluindo conhecimento, carisma e habilidades de negociação.</p>
<h2 style="text-align: justify;">Liderança x Conteúdo</h2>
<p style="text-align: justify;">Isso é muito importante! <strong>Não existe liderança sem conteúdo</strong>.</p>
<p style="text-align: justify;">Somente o carisma e habilidades interpessoais não irão criar um bom líder. Uma liderança dessa forma não se sustenta durante muito tempo. A mais de um ano, li um livro chamado &#8220;<a href="http://www.livrariasaraiva.com.br/produto/produto.dll/detalhe?pro_id=2658080" target="_blank">O andar do bêbado</a>&#8220;. É um daqueles livros que muda suas perspectivas diante de vários acontecimentos rotineiros da vida.</p>
<p style="text-align: justify;">Nesse caso o grande fator de mudança é um novo olhar sobre a matemática e a estatística. O livro vai de analises do mercado financeiro até Hollywood, passando pelos esportes. E ao final do livro eu garanto que você vai começar a olhar de forma diferente a aleatoriedade de fatos versus a real competência de determinadas pessoas.</p>
<h2 style="text-align: justify;"><a href="http://www.joaodosoftware.com/wp-content/uploads/2011/10/lideranca_e-camisa.jpg"><img class="alignright size-medium wp-image-278" title="King Penguins" src="http://www.joaodosoftware.com/wp-content/uploads/2011/10/lideranca_e-camisa-300x199.jpg" alt="" width="300" height="199" /></a>O Líder nasce pronto</h2>
<p style="text-align: justify;">Essa é uma das besteiras que ouço com mais freqüência. Já ouvi, inclusive de selecionadores, esse tipo de coisa.</p>
<p style="text-align: justify;">Ninguém nasce líder. A liderança vai ser formando aos poucos nas pessoas. Liderança é um processo de aprendizagem como qualquer outro, o que muda é que muitas coisas não podem ser aprendidas pela teoria, como relacionamento interpessoal.</p>
<p style="text-align: justify;">Nós aprendemos a ser líderes com a nossa familia, com os nossos amigos e na nossa vida profissional. Tudo tem influencia, mas como já tinha dito no tópico anterior, é preciso conteúdo também.</p>
<p style="text-align: justify;">Você realmente concorda que uma pessoa introvertida não possa exercer uma boa liderança? Eu poderia citar inúmeros casos de pessoas que não se enquadram no estereótipo de lider e que foram muito bem sucedidos em suas funções de liderança.</p>
<h2 style="text-align: justify;">Existe um tipo ideal de liderança</h2>
<p style="text-align: justify;">Essa é outra grande mentira. Cada pessoa e cada situação exige uma abordagem diferente.</p>
<p style="text-align: justify;">O importante é que o líder maximize seu estilo de liderança procurando tirar maior proveito de seus pontos fortes. Além disso, o contexto em que se está inserido pode exigir mais, de alguma habilidade especifica, e cabe ao líder notar isso e adequar seu estilo de liderança a situação.</p>
<h2 style="text-align: justify;">O Líder forma seguidores</h2>
<p style="text-align: justify;">Em entrevista, o <a href="http://www.cesarsouza.com" target="_blank">César Souza</a>, uma vez disse que o verdadeiro Líder não forma seguidores, ele forma outros Líderes. Isso é a mais pura verdade, mas vamos além. Vamos a teoria da &#8220;explosão dos palhaços&#8221; do Guy Kawasaki.</p>
<p style="text-align: justify;">Ele fala que o líder deve estar sempre cercado de pessoas mais inteligentes do que ele. &#8220;Contrate sempre pessoas A+&#8221;, é o que ele fala. Se você é uma pessoa nível &#8220;A&#8221; e começa a contratar pessoas nível &#8220;B&#8221;, essas pessoas nível &#8220;B&#8221; vão recrutar pessoas nível &#8220;C&#8221;, e um belo dia você vai acordar e vai se ver rodeado de pessoas nível &#8220;Z&#8221;.</p>
<p style="text-align: justify;">Contrate talentos e forme talentos. Faça isso de forma que eles consigam fazer as coisas melhor do que você, esse é o grande legado que se pode deixar em qualquer lugar.</p>
<p style="text-align: justify;">Todo esse texto foi baseado em experiências pessoais, mas o que me levou a escreve-lo de fato, foi uma entrevista do César Souza que eu vi na Globo News. Infelizmente não achei o link novamente para compartilhar, mas vou procurar. A cada tópico da entrevista eu sentia que todas as minhas indignações com relação a esses mitos faziam perfeito sentido.</p>
<p style="text-align: justify;">Você concorda com isso tudo?</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2011/10/alguns-mitos-sobre-lideranca/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Informação &#8211; Conhecimento &#8211; Sabedoria &#8211; Os estágios para inovar!</title>
		<link>http://www.joaodosoftware.com/2011/10/informacao-conhecimento-sabedoria-os-estagios-para-inovar/</link>
		<comments>http://www.joaodosoftware.com/2011/10/informacao-conhecimento-sabedoria-os-estagios-para-inovar/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 03:07:59 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[metodo]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=268</guid>
		<description><![CDATA[Para alguns não é novidade que eu leio muita coisa por ai na internet. Muita coisa de excelente qualidade, e muita coisa de baixa qualidade. Mas eu sou do tipo da pessoa que acredita que até com as coisas ruins, podemos aprender. Por isso não deixo passar muita coisa quando o assunto me interessa, quando [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.joaodosoftware.com/wp-content/uploads/2011/10/shuhari.jpg"><img class="alignright size-medium wp-image-269" title="shuhari" src="http://www.joaodosoftware.com/wp-content/uploads/2011/10/shuhari-205x300.jpg" alt="" width="205" height="300" /></a>Para alguns não é novidade que eu leio muita coisa por ai na internet. Muita coisa de excelente qualidade, e muita coisa de baixa qualidade. Mas eu sou do tipo da pessoa que acredita que até com as coisas ruins, podemos aprender. Por isso não deixo passar muita coisa quando o assunto me interessa, quando cai na aba do meu navegador fica marcado, e mais cedo ou mais tarde eu vou ter que ler.</p>
<p style="text-align: justify;">Ultimamente me deparei com muitas paginas e grupos de discussão que se apegam a conceitos e levam aquele conhecimento a ferro e fogo. Algumas dessas pessoas são fã boys e transformam aquele assunto em uma religião, outras tem interesses comerciais em defender determinadas posições e a grande maioria vai engrossar a voz da comunidade aplaudindo a metodologia ou tecnologia da vez.</p>
<h2 style="text-align: justify;">A comunidade agil</h2>
<p style="text-align: justify;">De muito tempo para cá, tenho visto muitas dessas discussões envolvendo a comunidade agil. Me parece que as pessoas que compraram a idéia de agilidade querem mostrar ao mundo como isso é maravilhoso. O que eu não entendo é porque ao invés de amadurecer o modelo que essas pessoas tem em mãos, elas se preocupam muito mais em seguir regras e tentar estabelecer o que é agil e o que não é.</p>
<h2 style="text-align: justify;">Arquitetura de software</h2>
<p style="text-align: justify;">A mesma preocupação existe no ramo de arquitetura de software. Os auto proclamados semi-deuses do desenvolvimento, aparecem com soluções já vistas antes em diversos outros cenários e sempre preocupados em criar uma soluções que atendam a todos os cenários possíveis, ao invés de atender com máxima eficiência o cenário existente no momento.</p>
<p style="text-align: justify;">Essa discussão pode se estender a diversos outros exemplos e nesse ponto você pode não estar enxergando onde eu quero chegar com todo esse papo furado, então deixe-me explicar.</p>
<h2 style="text-align: justify;">Não siga regras, estenda o modelo</h2>
<p style="text-align: justify;">Todos esses problemas ocorrem porque a grande maioria das pessoas estão no primeiro estagio do conhecimento. Elas simplesmente aprenderam uma maneira que funciona para elas, e estão replicando isso. São como potes vazios, que precisavam ser preenchidos pelo conhecimento.</p>
<p style="text-align: justify;">O que temos hoje são pessoas que adquiriram esse conhecimento e hoje seguem suas regras. Essas pessoas são perigosas, tenha cuidado. Em certo momento, eu mesmo posso me tornar uma dessas pessoas, porque todos passamos por esse estágio do conhecimento.</p>
<p style="text-align: justify;">São essas pessoas que vão te dizer que fazer as coisas de determinada maneira, não é ser agil. Ou aquelas outras que vão te dizer que pensar do jeito X ou do jeito Y viola o conceito Z e que isso não é mais admitido no mercado atual.</p>
<p style="text-align: justify;">Eu estou propondo algo diferente. Estou propondo que vocês pensem em dar o próximo passo. Ao invés de ficar preso ao que pode e o que não pode, estendam o modelo atual para atender as necessidades de vocês.</p>
<p style="text-align: justify;">Se você já possui o conhecimento e já consegue andar com as próprias pernas, então é hora de dar o próximo passo e quebrar as regras onde elas devem ser quebradas para gerar mais valor a sua proposta, seu modelo.</p>
<h2 style="text-align: justify;">Na verdade não existem regras</h2>
<p style="text-align: justify;">Se você conseguir sair da primeira etapa para a segunda, meus parabéns! Quebre as regras com consciência e alcance os melhores resultados, continue estudando e continue avaliando os resultados. O engraçado é que quando se chega nesse estagio em algum conhecimento, você para de ver sentido em discussões do tipo &#8220;pode fazer isso&#8221;, &#8220;não pode fazer aquilo&#8221;. Discussões do tipo &#8220;isso não é o padrão XYZ&#8221; ou &#8220;Isso não é SCRUM&#8221;, passam a ser tediosas.</p>
<p style="text-align: justify;">Obviamente que muita gente vai continuar a alimentar todo esse tipo de discussão, por diversos motivos, mas se você chegou nesse ponto, não engrosse a voz da comunidade debatendo sobre coisas sem sentido.</p>
<p style="text-align: justify;">Depois de ainda mais tempo praticando, você vai descobrir que na verdade não existem regras.</p>
<p style="text-align: justify;">Nunca existiram.</p>
<p style="text-align: justify;">Só existiam nomes e conceitos, mas nenhuma regra.</p>
<p style="text-align: justify;">É nessa hora que chega aquele momento mágico. Agora sim, você realmente consegue enxergar o sentido e a falta de sentido de tudo, e é nesse momento que surge a <strong>INOVAÇÃO</strong>!</p>
<p style="text-align: justify;">Quando chega esse momento você está livre do que é certo e errado, você simplesmente tem um objetivo e sabe tudo que é preciso para alcança-lo. Só depende de você usar uma ferramenta que já existe ou criar uma ferramenta inteiramente nova!</p>
<p style="text-align: justify;">Faça diferente e crie sua própria ferramenta para resolver os seus próprios problemas!</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2011/10/informacao-conhecimento-sabedoria-os-estagios-para-inovar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7 dicas para aumentar a criatividade e inovação</title>
		<link>http://www.joaodosoftware.com/2011/09/7-dicas-para-aumentar-a-criatividade-e-inovacao/</link>
		<comments>http://www.joaodosoftware.com/2011/09/7-dicas-para-aumentar-a-criatividade-e-inovacao/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 13:15:42 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[inovação]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=260</guid>
		<description><![CDATA[É engraçado conversar com as pessoas e ver como muitas delas ainda tem na cabeça os estereótipos de criatividade/invenção/inovação individual.  Aquela imagem em que o sujeito se tranca em um quarto com papel e caneta e sai de lá com uma idéia brilhante. Será que isso acontece mesmo? E nas empresas, será que é prudente [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joaodosoftware.com/wp-content/uploads/2011/09/criatividade1.jpg"><img class="alignleft size-medium wp-image-263" title="criatividade1" src="http://www.joaodosoftware.com/wp-content/uploads/2011/09/criatividade1-300x266.jpg" alt="" width="300" height="266" /></a>É engraçado conversar com as pessoas e ver como muitas delas ainda tem na cabeça os estereótipos de criatividade/invenção/inovação individual.  Aquela imagem em que o sujeito se tranca em um quarto com papel e caneta e sai de lá com uma idéia brilhante.</p>
<p>Será que isso acontece mesmo?</p>
<p>E nas empresas, será que é prudente deixar que isso aconteça? Você confiaria todo potencial de inovação de sua empresa a apenas uma pessoa?</p>
<p>Na minha opinião, esse estereótipo não deve existir em empresas. A inovação e criatividade é individual sim, mas pode e deve ser exercitada em grupo para chegar a resultados melhores. Somente em grupo podemos validar nossas idéias, termos opiniões para melhorar ou enxergar novos caminhos que não eram contemplados na idéia inicial. Por isso acredito que a inovação é uma atividade em grupo, mas esse grupo deve ser muito bem formado, por pessoas que queiram inovar, que queiram criar algo melhor!</p>
<p>Por acaso, hoje li um texto que falava mais ou menos a mesma coisa, na pagina da HSM e tinha o título de: <a href="http://www.hsm.com.br/blog/2011/09/criatividade-produtiva/" target="_blank">Criatividade Produtiva</a></p>
<p>Baseado nesse texto, copiei 7 dicas para vocês e estou disseminando&#8230;</p>
<p><strong>1 – Atitude:</strong> catalisadora de energia criativa e agregadora de habilidades e talentos. Ver-se como alguém criativo é passo importante para liberar a imaginação e aproveitar habilidades e conhecimentos.<br />
<strong>2 – Desafiar suposições: </strong>temos crenças – e somos afetados pelas crenças de outras pessoas – que nos impedem de usar a imaginação e resolver os problemas criativamente. É importante identificar e listar as suposições, convenções e crenças que afetam a compreensão, análise e solução, e livrar das que não são verdadeiras ou que se tornaram obsoletas.<br />
<strong>3 – Quebrar regras:</strong> na solução de problemas e na inovação é importante questionar as regras, especialmente quando elas aprisionam a mente a velhos hábitos e modos de pensar.<br />
<strong>4 – Não ter medo de errar:</strong> grandes invenções raramente resultam de golpe da sorte, mas da sucessão de tentativas frustradas.<br />
<strong>5 – Acreditar que há mais de uma solução certa:</strong> Na escola somos ensinados que há uma única solução certa. Na realidade, com muita frequência há mais do que uma e, muitas vezes, a primeira resposta que nos ocorre é a menos criativa. Esforce-se para procurar outras soluções de forma que você tenha várias opções para comparar e escolher a melhor.</p>
<p><strong>6 <strong>–</strong> Suspenda o julgamento</strong>. O julgamento prematuro é o caminho certo para bloquear a criatividade. É essencial separar a fase de geração de ideias da fase de julgamento, pois não se pode dirigir com um pé no acelerador e outro no freio. No trabalho em equipe, deve-se ficar atento para os comportamentos que desencorajam as contribuições dos participantes, bloqueiam suas mentes e minam o espírito de equipe.<br />
<strong>7 – Persistir:</strong> experimentar e ter alguns fracassos faz parte do processo de geração de ideias e inovação. O segredo do sucesso está na constância de propósito, em manter-se firme apesar dos percalços no caminho.</p>
<p>&nbsp;</p>
<p><strong>E você, o que acha disso? Deixe sua opinião sobre criatividade e inovação</strong></p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2011/09/7-dicas-para-aumentar-a-criatividade-e-inovacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Estratégia &#8211; Se você não sabe onde quer chegar, não chegará a lugar nenhum</title>
		<link>http://www.joaodosoftware.com/2011/09/estrategia-se-voce-nao-sabe-onde-quer-chegar-nao-chegara-a-lugar-nenhum/</link>
		<comments>http://www.joaodosoftware.com/2011/09/estrategia-se-voce-nao-sabe-onde-quer-chegar-nao-chegara-a-lugar-nenhum/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 19:36:30 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[estratégia]]></category>
		<category><![CDATA[produto]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=251</guid>
		<description><![CDATA[Aos poucos durante minhas leituras, acabei descobrindo que estratégia empresarial é um tema fascinante, e também percebi que é dado pouquíssima importância a esse tema em pequenas empresas. Muito se fala hoje sobre Lean Startups e derivados que propõem, de certa forma, estratégias para desenvolvimento de produtos e ir para o mercado rapidamente.  Mas infelizmente [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.joaodosoftware.com/wp-content/uploads/2011/09/estrategia.jpg"><img class="alignleft size-medium wp-image-256" title="estrategia" src="http://www.joaodosoftware.com/wp-content/uploads/2011/09/estrategia-300x193.jpg" alt="" width="300" height="193" /></a>Aos poucos durante minhas leituras, acabei descobrindo que estratégia empresarial é um tema fascinante, e também percebi que é dado pouquíssima importância a esse tema em pequenas empresas.</p>
<p style="text-align: justify;">Muito se fala hoje sobre Lean Startups e derivados que propõem, de certa forma, estratégias para desenvolvimento de produtos e ir para o mercado rapidamente.  Mas infelizmente tenho visto exemplos consecutivos de startups que se perdem no caminho, justamente por não ter uma estratégia traçada.</p>
<p style="text-align: justify;">Começar é importante, mas igualmente importante é saber onde você quer chegar no futuro e traçar alternativas para fazer isso acontecer.</p>
<p style="text-align: justify;">Algum autor certa vez citou uma frase parecida com essa:</p>
<blockquote><p>Se você não sabe onde quer chegar, qualquer lugar servirá!</p></blockquote>
<p style="text-align: justify;">Essa frase tem uma certa beleza e é muito poética, mas na minha opinião, não se aplica ao cenário de empresas. Nesse contexto, se você não sabe onde quer chegar, significa que você provavelmente não chegará a lugar nenhum!</p>
<p style="text-align: justify;">É muito normal você encontrar startups que aos poucos vão se afastando do seu objetivo primário, deixando de lado conceitos e idéias que levaram ao surgimento do negócio. Mudar é normal, e não tem problema nenhum se a mudança for parte de um plano estratégico de crescimento e melhoria, mas infelizmente essa não é a realidade.</p>
<p style="text-align: justify;">As empresas vão mudando para atender a clientes com exigências chatas, para conseguir entrar em um novo mercado e entre outras coisas. Mas aos poucos elas vão se afastando da sua verdadeira essência, e aquele valor unico que  deu inicio a tudo, vai ficando para trás.</p>
<p style="text-align: justify;">Dentro de pouco tempo a empresa está fazendo de tudo um pouco para atender aos seu clientes. Fazer tudo não é um problema, o problema é não fazer nada bem feito. Os pedidos dos clientes aos poucos vão sugando todo o tempo e aquela razão de ser da empresa vai começando a ter cada vez menos atenção e como conseqüência, nunca alcança o patamar que deveria.</p>
<p style="text-align: justify;">Porque isso tudo acontece? Entre outras coisas, por falta de estratégia!</p>
<p style="text-align: justify;">Eu sei que o cenário é difícil para uma empresa que está começando, existe a necessidade de faturamento, pressão de todos envolvidos no processo, que querem os primeiros resultados e por ai vai, mas na minha opinião, isso tudo não é motivo para deixar a estratégia de lado!</p>
<p style="text-align: justify;">A estratégia contempla vários aspectos que vão te ajudar a planejar suas ações para atingir seus objetivos no futuro. Se pensarmos que somos startups, então podemos partir da premissa que hoje não temos nada, e amanhã queremos conquistar o mundo!</p>
<p style="text-align: justify;">Para conquistar o mundo temos que pensar estratégicamente, analisando os riscos, oportunidades, forças, fraquezas, cenários entre outras coisas. Precisamos pensar quais serão nossos próximos passos para atingirmos nossos objetivos. Isso é estratégia!</p>
<h2 style="text-align: justify;">A estratégia é um plano<a href="http://www.joaodosoftware.com/wp-content/uploads/2011/08/pdca01.gif"><img class="alignleft size-full wp-image-208" title="pdca01" src="http://www.joaodosoftware.com/wp-content/uploads/2011/08/pdca01.gif" alt="" width="183" height="198" /></a></h2>
<p style="text-align: justify;">É um plano para o futuro, uma direção que vai ser a base para a tomada de decisão quanto a suas ações. Suas ações devem convergir para a direção escolhida. É um caminho para levar a sua empresa de onde ela está hoje, até onde você quer que ela esteja no futuro.</p>
<p style="text-align: justify;">Nem sempre os planos estabelecidos são cumpridos, mas precisamos estar em constante vigilância, analisando resultados  e fazendo adaptações necessárias para que nossos planos sigam o seu curso correto, ou até para detectarmos a necessidade de mudar o curso das coisas antecipadamente.</p>
<h2 style="text-align: justify;"></h2>
<h2 style="text-align: justify;">A estratégia é um padrão</h2>
<p style="text-align: justify;"> Nesse caso, veja padrão como um plano de coerência de suas ações ao longo do tempo. Se a sua startup é focada em produtos de alto valor agregado e se mantem assim ao longo do tempo, isso é um padrão que a sua empresa segue.</p>
<p style="text-align: justify;">Mantenha consistência e coerência entre seu discurso e suas  ações e aos poucos vá criando seu padrão de atuação. Nesse ponto a angustia por resultados e a tentativa de atender diferentes clientes pode atrapalhar a sua empresa. Acho que as pessoas ainda tem grandes problemas com segmentar seus produtos.</p>
<h2 style="text-align: justify;">A estratégia é uma posição</h2>
<p style="text-align: justify;">Estabelecer uma <a href="http://www.joaodosoftware.com/2011/07/posicionamento-de-mercado-do-comeco/">posição no mercado</a> é o fator fundamental para sua estratégia. Mas não é só isso, a posição em si é a estratégia, pois define a empresa ou produto, fazendo com que as pessoas reconheçam a marca e possam diferencia-la das outras. A posição define o significado da sua empresa, então preste muita atenção nisso.</p>
<h2 style="text-align: justify;">A estratégia é uma perspectiva</h2>
<p style="text-align: justify;">Se você segue um padrão e tem uma posição, provavelmente não terá problemas de ter uma perspectiva sobre as coisas. Crie uma perspectiva, uma maneira de olhar as coisas e use essa lente especial sempre. Olhe sempre os seus consumidores através dessa mesma lente quando for tomar decisões. Veja por essa lente também quando precisar tomar visões de negócio, para garantir que está indo sempre pela mesma direção, pois foi guiado sempre pela mesma forma de ver as coisas.</p>
<h2 style="text-align: justify;">O estratagema</h2>
<p style="text-align: justify;">Essa é a manobra que você utilizará para botar em pratica a sua estratégia. As ações que vão derivar de todas as outras questões e que vão fazer você alcançar seu objetivo traçado anteriormente. Avaliar as ações são importantes para medir sua efetividade muda-las caso seja necessário.</p>
<p style="text-align: justify;">Quando pensar em um produto ou serviço, pense estratégicamente, isso lhe dará vantagem frente aos competidores. Analise o cenário, olhe para todas essas questões e monte um plano para atingir seu objetivo no futuro.</p>
<p style="text-align: justify;">Lembre-se, se você não sabe onde quer chegar, não chegará a lugar nenhum!</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2011/09/estrategia-se-voce-nao-sabe-onde-quer-chegar-nao-chegara-a-lugar-nenhum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guia de Referência para Sintaxe Razor</title>
		<link>http://www.joaodosoftware.com/2011/09/245/</link>
		<comments>http://www.joaodosoftware.com/2011/09/245/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 00:48:18 +0000</pubDate>
		<dc:creator>João Seixas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[mvc 3]]></category>
		<category><![CDATA[razor]]></category>

		<guid isPermaLink="false">http://www.joaodosoftware.com/?p=245</guid>
		<description><![CDATA[Pessoal, essa é uma dica rápida que pode ajudar muita gente que está aprendendo MVC 3 com Razor. Vi esse quadro comparativo e achei bastante interessante, por isso estou replicando aqui. Exemplo Razor Sintaxe antiga Code Block @{ int x = 123; string y = "because."; } &#60;% int x = 123; string y = [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal, essa é uma dica rápida que pode ajudar muita gente que está aprendendo MVC 3 com Razor. Vi esse quadro comparativo e achei bastante interessante, por isso estou replicando aqui.</p>
<table>
<tbody>
<tr>
<th valign="top" width="183">Exemplo</th>
<th valign="top" width="149">Razor</th>
<th valign="top" width="217">Sintaxe antiga</th>
</tr>
<tr>
<td valign="top" width="183">Code Block</td>
<td valign="top" width="149">
<pre>@{
  int x = 123;
  string y = "because.";
}</pre>
</td>
<td valign="top" width="217">
<pre>&lt;%
  int x = 123;
  string y = "because.";
%&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Expression (Html Encoded)</td>
<td valign="top" width="149">
<pre>&lt;span&gt;@model.Message&lt;/span&gt;</pre>
</td>
<td valign="top" width="217">
<pre>&lt;span&gt;&lt;%: model.Message %&gt;&lt;/span&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Expression (Unencoded)</td>
<td valign="top" width="149">
<pre>&lt;span&gt;
@Html.Raw(model.Message)
&lt;/span&gt;</pre>
</td>
<td valign="top" width="217">
<pre>&lt;span&gt;&lt;%= model.Message %&gt;&lt;/span&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Combining Text and markup</td>
<td valign="top" width="149">
<pre>@foreach(var item in items) {
  &lt;span&gt;@item.Prop&lt;/span&gt;
}</pre>
</td>
<td valign="top" width="217">
<pre>&lt;% foreach(var item in items) { %&gt;
  &lt;span&gt;&lt;%: item.Prop %&gt;&lt;/span&gt;
&lt;% } %&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Mixing code and Plain text</td>
<td valign="top" width="149">
<pre>@if (foo) {
  &lt;text&gt;Plain Text&lt;/text&gt;
}</pre>
</td>
<td valign="top" width="217">
<pre>&lt;% if (foo) { %&gt;
  Plain Text
&lt;% } %&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Mixing code and plain text (alternate)</td>
<td valign="top" width="149">
<pre>@if (foo) {
  @:Plain Text is @bar
}</pre>
</td>
<td valign="top" width="217">Same as above</td>
</tr>
<tr>
<td valign="top" width="183">Email Addresses</td>
<td valign="top" width="149">
<pre>Hi philha@example.com</pre>
</td>
<td valign="top" width="217">Razor recognizes basic email format and is smart enough not to treat the @ as a code delimiter</td>
</tr>
<tr>
<td valign="top" width="183">Explicit Expression</td>
<td valign="top" width="149">
<pre>&lt;span&gt;ISBN@(isbnNumber)&lt;/span&gt;</pre>
</td>
<td valign="top" width="217">In this case, we need to be explicit about the expression by using parentheses.</td>
</tr>
<tr>
<td valign="top" width="183">Escaping the @ sign</td>
<td valign="top" width="149">
<pre>&lt;span&gt;In Razor, you use the
@@foo to display the value
of foo&lt;/span&gt;</pre>
</td>
<td valign="top" width="217">@@ renders a single @ in the response.</td>
</tr>
<tr>
<td valign="top" width="183">Server side Comment</td>
<td valign="top" width="149">
<pre>@*
This is a server side
multiline comment
*@</pre>
</td>
<td valign="top" width="217">
<pre>&lt;%--
This is a server side
multiline comment
--%&gt;</pre>
</td>
</tr>
<tr>
<td valign="top" width="183">Calling generic method</td>
<td valign="top" width="149">
<pre>@(MyClass.MyMethod&lt;AType&gt;())</pre>
</td>
<td valign="top" width="217">Use parentheses to be explicit about what the expression is.</td>
</tr>
<tr>
<td valign="top" width="183">Creating a Razor Delegate</td>
<td valign="top" width="149">
<pre>@{
  Func&lt;dynamic, object&gt; b =
   @&lt;strong&gt;@item&lt;/strong&gt;;
}
@b("Bold this")</pre>
</td>
<td valign="top" width="217">Generates a Func&lt;T, HelperResult&gt; that you can call from within Razor. See <a title="Templated Razor Delegates" href="http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx">this blog post</a> for more details.</td>
</tr>
<tr>
<td valign="top" width="183">Mixing expressions and text</td>
<td valign="top" width="149">
<pre>Hello @title. @name.</pre>
</td>
<td valign="top" width="217">
<pre>Hello &lt;%: title %&gt;. &lt;%: name %&gt;.</pre>
</td>
</tr>
</tbody>
</table>
<p>Peço desculpas pela falta de coloração de sintaxe, mas para que está querendo um guia de referência rápida para a <strong>Sintaxe Razor</strong>, já é de grande ajuda.</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://www.joaodosoftware.com/2011/09/245/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
