<?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>Comentários Críticos sobre Tecnologia da Informação</title>
	<atom:link href="http://marcomendes.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://marcomendes.com/blog</link>
	<description>Informações, opiniões, discussões e comentários críticos sobre tecnologia da informação, arquitetura corporativa e tecnologias.</description>
	<lastBuildDate>Sun, 05 May 2013 22:36:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Os sete pecados capitais do desenvolvimento de software</title>
		<link>http://marcomendes.com/blog/2013/05/os-sete-pecados-capitais-do-desenvolvimento-de-software/</link>
		<comments>http://marcomendes.com/blog/2013/05/os-sete-pecados-capitais-do-desenvolvimento-de-software/#comments</comments>
		<pubDate>Sun, 05 May 2013 19:46:38 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Pessoas]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=756</guid>
		<description><![CDATA[O quadro o Jardim das Delícias Terrenos é um dos mais impactantes quadros a avisar aos transgressores da fé católica o destino deles ao final de uma vida impura. Obra-prima de quase 2 metros de altura e largura, o quadro &#8230; <a href="http://marcomendes.com/blog/2013/05/os-sete-pecados-capitais-do-desenvolvimento-de-software/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O quadro o <strong>Jardim das Delícias Terrenos</strong> é um dos mais impactantes quadros a avisar aos transgressores da fé católica o destino deles ao final de uma vida impura. Obra-prima de quase 2 metros de altura e largura, o quadro retrata o inferno dos luxuriosos, gulosos, avarentos, invejosos, preguiçosos, iracundos e vaidosos.</p>
<div class="wp-caption aligncenter" style="width: 410px"><img title="O Jardim das Delícias Terrenas" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/The_Garden_of_Earthly_Delights_by_Bosch_High_Resolution.jpg/400px-The_Garden_of_Earthly_Delights_by_Bosch_High_Resolution.jpg" alt="O Jardim das Delícias Terrenas" width="400" height="228" /><p class="wp-caption-text">Obra prima de Hieronymus Bosch, pintor holandês contemporâneo de Leonardo da Vinci</p></div>
<p>Se a engenharia de software tivesse um inferno, poderíamos nos arriscar, como Dante Aligheri, a descrever os sete pecados capitais do desenvolvimento de software que os porquinhos de software cometem em base diária. Mary Poppendieck, uma das autoras do<a title="Post sobre Lean" href="http://adsystemsblog.audits.com.br/2009/06/11/em-tempos-de-crise-enxugue-a-gerencia-do-seu-projeto-lean-software-development/" target="_blank"> Lean Software Development</a>, descreva 7 formas de desperdício no desenvolvimento de software. Apresento e contextualizo estes pecados capitais abaixo no dia a dia do trabalho de software.</p>
<p><strong>1.</strong> <strong>Funcionalidades extras</strong>. Pesquisas de institutos como o Standish Group (XP Conference, 2002) mostram que metade das funcionalidades de um software são raramente ou nunca usadas. Ainda assim, é muito comum que desenvolvedores &#8220;criativos&#8221; introduzam funcionalidades não desejadas em seus software que não trazem valor agregado algum para os seus clientes. A redução do desperdício tem forte relação com escrever menos linhas de código.</p>
<p><strong>2.</strong> <strong>Transferência de responsabilidades, conhecimentos, ações e feedbacks</strong>. O uso de papéis muito especializados é um sintoma deste problema. &#8220;Arquitetos&#8221; e &#8220;projetistas&#8221; que não sabem codificar, &#8220;desenvolvedores&#8221; que não sabem testar ou implantar software e &#8220;gerentes de projeto&#8221; que se orgulham de não entrar em temas técnicos são exemplos de <em>handovers (</em>repasses<em>) </em>e fontes comuns de desperdício.</p>
<p><strong>3. Defeitos</strong>. Se orgulhar de ter um time de testes que encontra muitos defeitos é no mínimo contra-produtivo. Devemos nos lembrar que defeitos são desperdícios, ou dinheiro jogado fora. As ações de projetos devem impedir que defeitos sejam introduzidos em primeiro lugar, e não focar em pegar defeitos ao final.  Um exemplo simples é no ciclo tradicional de especificação, codificação e testes. Ao invés, o teste deve validar e corrigir a especificação antes que a primeira linha de código seja escrita, visto que a maior parte dos defeitos nasce ainda na especificação do software. Da mesma forma, é papel do desenvolvedor usar técnicas diversas (refatoração, teste de unidade e integração contínua) para reduzir a quantidade de defeitos introduzidas no software.</p>
<p><strong>4. Débito Técnico.</strong> Fazer código de má qualidade tende a gerar débito técnico no código, módulo e arquitetura de um produto. O débito técnico gera um efeito muito ruim a médio e longo prazo e gera efeitos colaterais no produto em pontos não imaginados. Livros como <em>&#8220;Clean Code&#8221;</em>, do Robert Martin, exploraram a criação de código de qualidade</p>
<p><strong>5. Trabalho em progresso. </strong>Manter uma longa lista de tarefas com o status em  &#8221;execução&#8221; esconde problemas e eventualmente gera desperdício. Cada pessoa de um time deve manter o mínimo número de tarefas abertas. Cada tarefa aberta deve ser rapidamente terminada para reduzir o seu tempo de ciclo, evitar retrabalhos e trabalho multitarefa. Um exemplo vem da metodologia japonesa chamada Kanban, que introduz o conceito chamado (WIP). O WIP (Work In Progress) tem um valor limite pequeno (tipicamente 3) e impede que uma pessoa tenha mais de 3 tarefas em execução. Um outro exemplo de combate a este desperdício é a prática de entregar software com frequência para os usuários chave, que limita o tamanho do backlog de tarefas em aberto para todo o time de desenvolvimento.</p>
<p><strong>6. Trabalho multitarefa. </strong>Há algum tempo este mito assola os times de software, atolados no trabalho de novas demandas e na resolução de defeitos e adaptações de diversos softwares em paralelo. Estudos diversos mostram que o fator multitarefa reduz a produtividade, gera desmotivação e trabalho de pior qualidade, o que introduz mais defeitos e gera mais trabalho em progresso.</p>
<p><strong>7. Esperas e atrasos. </strong>Provocar esperas e atrasos gera um efeito nocivo na produtividade do time e é também uma forma de desperdício. Por exemplo, enviar um email para uma equipe de desenvolvimento validar um documento de casos de uso gera espera, atraso e descontinuidade do trabalho. Apresentar este documento ao vivo melhora o entendimento para todos e também reduz ciclo de validação do documento gerado. Allistar Cockburn descreve a prática chamada de &#8220;Radiadores de Informação&#8221; em seu método ágil chamado <em>Crystal Clear</em>, que consiste em manter pessoas próximas e privilegiar a comunicação ao vivo com o uso de quadros brancos. Outros métodos ágeis como o Scrum ou o XP também advogam práticas similares.</p>
<p>Eliminar desperdícios é chave para gera software mais eficaz e em menos tempo para clientes. Um bom livro sobre este tema é o livro: <em>Implementing Lean Software Development: From Concept to Cash, </em>de Mary e Tom Poppendieck<em>.</em></p>
<p><em></em><img class="alignnone" title="Lean Software Development" src="http://ecx.images-amazon.com/images/I/51CrrTeaEzL._SY300_.jpg" alt="Lean Software Development" width="227" height="300" /></p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2013/05/os-sete-pecados-capitais-do-desenvolvimento-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvedor, dê banho no seu código&#8230; diariamente</title>
		<link>http://marcomendes.com/blog/2013/04/desenvolvedor-de-banho-no-seu-codigo-diariamente/</link>
		<comments>http://marcomendes.com/blog/2013/04/desenvolvedor-de-banho-no-seu-codigo-diariamente/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 00:49:57 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=750</guid>
		<description><![CDATA[Na idade média, a noção do banho diário era considerada uma blasfêmia e foi até mesmo reprimida pela igreja. Nos dias atuais, felizmente,  a maior parte das pessoas toma pelo menos um banho por dia. No Brasil, vemos até cachorros tomando &#8230; <a href="http://marcomendes.com/blog/2013/04/desenvolvedor-de-banho-no-seu-codigo-diariamente/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Na idade média, a noção do banho diário era considerada uma blasfêmia e foi até mesmo reprimida pela igreja. Nos dias atuais, felizmente,  a maior parte das pessoas toma pelo menos um banho por dia. No Brasil, vemos até cachorros tomando banho frequentemente, o que é muito bom pois cães que não se banham tem um cheiro péssimo. (humanos também, aliás).</p>
<p>Quando olhamos códigos Java, C# ou PHP nas empresas, entretanto, parece que voltamos à idade média. Vemos funções com 500 linhas de código, o uso indiscriminado de colar e copiar ou o uso abusivo de <em>switch-cases</em> . Imundíceis de toda sorte, documentadas na literatura especializada como  <em>bad smells</em>. Livros clássicos como <em>Code Complete &#8211; Steve McConnell; Refactoring &#8211; Martin Fowler ou Clean Code &#8211; Robert Martin</em> apresentam e documentam práticas para banhar e deixar o seu código limpinho e sexy.</p>
<p>Apesar disso, ainda parece difícil adotar uma boa prática como a refatoração de código e internalizá-la no seu dia a dia de programação.</p>
<p><strong>Como criar o hábito da refatoração no seu código?</strong></p>
<p>A prática de refatoração já é documentada há muito tempo na literatura, mas muitos desenvolvedores ainda não aderiram ao hábito por motivos diversos. Se você é um deles, recomendo quatro práticas simples para formar o hábito da refatoração diária.</p>
<ol>
<li><strong>Comece muito leve.<br />
</strong>Que tal se você se dedicar a refatorar o seu código 1 minuto por dia? Você consegue fazer isso amanhã? Não parece muito, certo?Em verdade o ponto mais importante para o desenvolvimento de um hábito é a repetição de uma prática. Em um minuto, talvez você somente consiga aplicar o padrão <em>Extract Method</em> com o Eclipse ou o Visual Studio, mas isso já é ótimo. É um pequeno banho. Repetir o processo todo o dia irá gerar formar um senso de repetição, que é para mais importante para formar um hábito.</li>
<li><strong>Vigie as suas conversas internas.</strong><br />
A nossa mente, inconscientemente, pode criar conversas internas sobre o quão difícil a refatoração pode ser. Vigie seus pensamentos e os interrompa o mais rápido possível. Se você deixar as conversas internas ganharem corpo, elas irão racionalizar o mal hábito de não refatorar o seu código em base diária.</li>
<li><strong>Em caso de falha, implemente um plano de ataque</strong><br />
Talvez você se esqueça de refatorar o seu código em algum dia. Neste caso, você deve ter um plano de ataque para refatorá-lo no dia seguinte custe o que custar. Se você ficar três dias sem dar banho no seu código, o hábito pode ir embora e o seu código voltará à idade das trevas.</li>
<li><strong>Se orgulhe do seu código limpinho</strong><br />
Um código refatorado tem métricas de qualidade superiores, tem melhor legibilidade e irá gerar menos defeitos que um código porquinho. Se orgulhe disso e saboreie o momento da refatoração. Afinal, o código é a sua criação e você não quer que o seu filhinho seja porquinho, quer?</li>
</ol>
<p>Para os mais curiosos, recomendo a leitura do livro <strong>The Clean Coder, </strong>do Robert Martin, que apresenta e discute a atitude do desenvolvedor moderno, que considera o banho diário uma prática bacana (para si mesmo e para o seu código).</p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2013/04/desenvolvedor-de-banho-no-seu-codigo-diariamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplificando a integração de aplicações</title>
		<link>http://marcomendes.com/blog/2013/04/simplificando-a-integracao-de-aplicacoes/</link>
		<comments>http://marcomendes.com/blog/2013/04/simplificando-a-integracao-de-aplicacoes/#comments</comments>
		<pubDate>Sat, 06 Apr 2013 01:39:40 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=742</guid>
		<description><![CDATA[Integrar aplicações em diferentes tecnologias, plataformas ou sistemas operacionais pode ser um formidável desafio a desenvolvedores e arquitetos. Observo nas empresas códigos muito desorganizados e muita confusão quando o assunto é integrar aplicações. Compilo neste post um pequeno padrão arquitetural &#8230; <a href="http://marcomendes.com/blog/2013/04/simplificando-a-integracao-de-aplicacoes/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Integrar aplicações em diferentes tecnologias, plataformas ou sistemas operacionais pode ser um formidável desafio a desenvolvedores e arquitetos. Observo nas empresas códigos muito desorganizados e muita confusão quando o assunto é integrar aplicações. Compilo neste post um pequeno padrão arquitetural para ajudar a resolver problemas de integração.</p>
<h1>Conheça o padrão <strong>VETRO</strong></h1>
<p>Vamos aprender a usar este padrão em um exemplo fictício onde precisamos buscar os dados de um determinado cidadão do sistema da receita federal e gravar estes dados em um banco de dados local em formato SQL.</p>
<p><strong>1. VALIDAR. </strong></p>
<p><span style="font-size: medium; line-height: 24px;">O primeiro passo recomendado de toda integracão é realizar a validação dos dados recebidos. A validação pode verificar se o objeto de dados (um esquema XML ou texto JSON) está bem formado.  </span></p>
<p>Como os dados são gerados por aplicações externas, é sempre boa prática &#8220;desconfiar&#8221; dos dados que estão sendo recebidos, pois eles podem ter sido modificados na estrutura de negócio ou no formato técnico sem aviso prévio.</p>
<p>No exemplo dado, poderíamos checar se a mensagem XML com os dados de um cidadão estão em conformidade com o esquema XSD esperado.</p>
<p><strong>2. ENRIQUECER</strong></p>
<p>O termo enriquecer tem por objetivo adicionar dados adicionais ao pacote de dados recebido. Muitas vezes isso é necessário para que o pacote de dados esteja compatível com o formato esperado pelo destinatário.</p>
<p>No exemplo dado, poderíamos enriquecer a mensagem XML com os dados do cidadão com a informação do login do usuário que esteja usando a aplicação. Estamos considerando que esta informação nova poderia ser usada para auditoria</p>
<p><strong>3. TRANSFORMAR</strong></p>
<p>O próximo passo é realizar a transformação dos dados (seja no formato dos dados ou protocolo técnico). No nosso caso, queremos extrair da estrutura XSD e colocar em um formato universal da plataforma que estamos usando.</p>
<p>Por exemplo, se estivéssemos escrevendo estes códigos em Java ou C#, poderíamos criar um objeto POJO ou POCO com os dados do cidadão enriquecidos com o login do usuário.</p>
<p><strong>4. ROTEAR</strong></p>
<p>Agora estamos próximo do fim e neste passo estamos fazendo o roteamento da informação para o seu destino. No nosso caso, iremos abrir a conexão (IP e porto) com o banco de dados onde iremos salvar o nosso POJO ou POCO com os dados do cidadão.</p>
<p>Em cenários mais elaborados, o roteamento pode envolver rotas complexas.</p>
<p><strong>5. OPERAR</strong></p>
<p>Finalmente, iremos gravar os dados no banco de dados. O passo operar implica em entregar a informação para o destinatário final e terminar a rotina de integração.</p>
<p>O padrão <strong>VETRO</strong> pode ser implementado através do padrão de desenho <em>cadeia de responsabilidades</em> em Java ou C# e curiosamente forma a base de vários produtos de ESB do mercado. Em projetos SOA, chamamos estas lógicas de serviços de mediação, que também possuem a mesma estrutura básica.</p>
<p>Independente da tecnologia ou plataforma, entretanto, organizar um código desta forma nos fornece limpeza semântica e boa organização em lógicas de integração.</p>
<p>Boas integrações!</p>
<blockquote>
<pre>Pensamento do dia:
"Manifest plainness,
Embrace simplicity,
Reduce selfishness,
Have few desires.",
Lao-tzu</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2013/04/simplificando-a-integracao-de-aplicacoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soluções técnicas robustas no início de projetos ágeis</title>
		<link>http://marcomendes.com/blog/2012/11/solucoes-tecnicas-robustas-no-inicio-de-projetos-ageis/</link>
		<comments>http://marcomendes.com/blog/2012/11/solucoes-tecnicas-robustas-no-inicio-de-projetos-ageis/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 21:29:21 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Arquitetura de Software]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=733</guid>
		<description><![CDATA[Scott Ambler apresenta em seu livro Entrega Ágil Disciplinada quatro abordagens observadas na comunidade para o desenho de soluções técnicas na iniciação de projetos de software. Cada abordagem traz vantagens e desvantagens e tem um determinado contexto de uso que &#8230; <a href="http://marcomendes.com/blog/2012/11/solucoes-tecnicas-robustas-no-inicio-de-projetos-ageis/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Scott Ambler apresenta em seu livro <a title="Entrega Ágil Disciplinada" href="http://www.amazon.com/Disciplined-Agile-Delivery-Practitioners-Enterprise/dp/0132810131/ref=sr_1_1?ie=UTF8&amp;qid=1353009633&amp;sr=8-1&amp;keywords=Disciplined+Agile+Delivery" target="_blank">Entrega Ágil Disciplinada</a> quatro abordagens observadas na comunidade para o desenho de soluções técnicas na iniciação de projetos de software. Cada abordagem traz vantagens e desvantagens e tem um determinado contexto de uso que pode ser apropriado ao seu projeto.</p>
<ol>
<li><strong> Nenhuma abordagem arquitetural. </strong>Nenhuma abordagem arquitetural é utilizada pelos times.</li>
<ul>
<li><strong>Vantagens:</strong> Ciclo de iniciação é encurtado e todas as decisões técnicas são adiadas para a fase de construção. Tende a funcionar bem para projetos muito simples como por exemplo cadastros Web em Intranets.</li>
<li><strong>Desvantagens: </strong>Adiamento do risco e possível retrabalho na fase de construção. Ausência de uma visão técnica compartilhada sobre estilos, <a title="A decisão tecnológica mais importante do arquiteto de soluções" href="http://marcomendes.com/blog/2012/05/a-decisao-tecnologica-mais-importante-do-arquiteto-de-solucoes/" target="_blank">plataformas</a> e<a title="A agenda moderna do arquiteto de software" href="http://marcomendes.com/blog/2012/03/a-agenda-moderna-do-arquiteto-de-software/" target="_blank"> técnicas arquiteturais</a> diversas.</li>
<li><strong>Análise: </strong>Possível sintoma de times pseudo-ágeis que afirmam não precisar realizar nenhum tipo de modelagem ou documentação.</li>
</ul>
<li><strong>Abordagem leve de alto nível. </strong>Esta técnica é chamada de envisionamento em algumas escolas ágeis e normalmente envolve que times discutam as principais questões técncias em tornos de quadro brancos por algumas horas ou alguns dias, se necessário.
<ul>
<li><strong>Vantagens:</strong> Reduz o risco de projeto por trabalhar nas questões técnicas mais críticas do projeto. Também permite que o time compartilhe uma visão técnica compartilhada. Também gera um certo grau de flexibilidade ao adiar algumas opções tecnológicas para fases seguintes do projeto.</li>
<li><strong>Desvantagens: </strong>Requer alta colaboração entre o time e pessoas com grande conhecimento técnico e experiência arquitetural.</li>
<li><strong>Análise: </strong>O adiamento de algumas decisões pode levar a aumento do risco em projetos. Algumas vezes, a iniciação é o melhor momento para a tomada de decisões técnicas.</li>
</ul>
</li>
<li><strong>Interfaces detalhadas. </strong>Nesta abordagem, os principais componentes e sub-sistemas da arquitetura são identificados e detalhados em nível de API. A técnica é chamada de <a title="Técnica API First" href="http://www.eclipse.org/eclipse/development/apis/API-First.pdf" target="_blank">API First</a> na comunidade Eclipse.
<ul>
<li><strong>Vantagens:</strong> Permite que vários times trabalhem em paralelo nas APIs dos diversos componentes arquiteturais.</li>
<li><strong>Desvantagens: </strong>Um maior gasto de tempo na iniciação e um risco de excesso de engenharia no começo do projeto o que pode aumentar o seu custo e tempo para entrega.</li>
<li><strong>Análise: </strong>Excesso de desenho das APIs pode levar a um desenho dos elementos internos dos componentes. A falta de desenho das APIs pode levar a problemas não vistos na implementação com efeitos colaterais diversos.</li>
</ul>
</li>
<li><strong>Especificação detalhada de ponta a ponta. </strong>Nesta abordagem, todos os mecanismos arquiteturais são detalhados em todos as camadas arquiteturais do produtos sendo construído
<ul>
<li><span><strong>Vantagens:</strong> O contrato técnico da solução é bem delimitado já no começo do projeto. Esta técnica também habilita que vários times trabalhem em paralelo e pode ser muito apropriado para projetos de preço fechado.</span></li>
<li><span><strong>Desvantagens:</strong> Um investimento muito pesado em arquitetura no começo do projeto pode levar a gerência a crer que a arquitetura irá realmente funcionar, o que ainda não foi provado através de código. Além disso, todas as decisões técnicas foram baseadas em requisitos que podem ainda evoluir e aumentar o risco de retrabalho destas decisões. </span></li>
<li><strong><span>Análise: </span></strong><span>A análise técnica detalhada não remove questões críticas como times potencialmente fracos para trabalhar em arquiteturas sofisticadas. </span></li>
</ul>
<p>.</li>
</ol>
<p>Já tivemos a oportunidade de trabalhar com as abordagens (2), (3) e (4) e percebo que o contexto é rei para guiar a nossa escolha.</p>
<p>Quando tive a oportunidade de trabalhar em uma empresa de produtos, a abordagem centrada em APIs era bastante natural e permitia estabelecer acordos claros de resultados técnicos entre os diversos times que estravam construindo os produtos. Foi sem dúvida uma experiência muito saudável.</p>
<p>Em outros momentos onde pude trabalhar com a abordagem (2) em empresas de menor porte com um pequeno time de bom nível técnico, os resultados também foram muito bons e aderentes a pressões críticas de tempo. Curiosamente, quando tentei usar a abordagem (2) em ambientes com pessoas mais imaturas tecnologicamente, os resultados foram péssimos.</p>
<p>Nos projetos que trabalhei com a abordagem (4), realmente o principal desafio é gerir as expectativas gerenciais e evitar preciosismos técnicos que não poderão ser acomodados por times não-seniores.</p>
<blockquote><p>Frase do dia: “Always design a thing by considering it in its next larger context &#8211; a chair in a room, a room in a house, a house in an environment, an environment in a city plan.”,  Eliel Saarinen.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/11/solucoes-tecnicas-robustas-no-inicio-de-projetos-ageis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvedores FrÁGEIS &#8211; Você é um deles?</title>
		<link>http://marcomendes.com/blog/2012/10/desenvolvedores-frageis-voce-e-um-deles/</link>
		<comments>http://marcomendes.com/blog/2012/10/desenvolvedores-frageis-voce-e-um-deles/#comments</comments>
		<pubDate>Sat, 27 Oct 2012 18:01:12 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Pessoas]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=725</guid>
		<description><![CDATA[O discurso de métodos ágeis nunca esteve tão popular no Brasil. Isto é muito bom e demonstra que estamos questionando os clássicos métodos da engenharia de software estabelecidos ainda no fim dos anos 60 nas famosas conferências de engenharia de &#8230; <a href="http://marcomendes.com/blog/2012/10/desenvolvedores-frageis-voce-e-um-deles/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O discurso de métodos ágeis nunca esteve tão popular no Brasil. Isto é muito bom e demonstra que estamos questionando os clássicos métodos da engenharia de software estabelecidos ainda no fim dos anos 60 nas <a title="OTAN Software Engineering Conferences" href="http://homepages.cs.ncl.ac.uk/brian.randell/NATO/" target="_blank">famosas conferências de engenharia de software da OTAN</a>.</p>
<p>É lamentável, entretanto, que pessoas sem as mínimas noções de engenharia de software e muito menos de métodos ágeis levantem bandeiras como se fossem do seu time de futebol ou partido político preferido por simplesmente desconhecer e não aplicar técnicas ágeis.</p>
<p>Baseado nas essências de técnicas ágeis sólidas de métodos como o XP e a Entrega Ágil Disciplinada, coloquei aqui um teste de fragilidade técnica. Notas baixas indicam um desenvolvedor pseudo-agilista que carrega uma bíblia mas sem saber nem o pai-nosso e a ave-maria de cada dia.</p>
<p><strong>Teste de Fragilidade &#8211; Proibido para Mocinhos e Mocinhas Chorões.</strong></p>
<p>Para cada resposta A, some 3 pontos.<br />
Para cada resposta B, some 2 pontos.<br />
Para cada resposta C, some 1 ponto.<br />
Para cada resposta D, não some pontos.</p>
<ol>
<li><strong>O código fonte é o ativo mais importante resultante do trabalho do seu dia a dia. Você cuida dele apropriadamente? Se sim, quantas vezes por semana você aplica técnicas de <a title="Refatoração" href="http://www.refactoring.com" target="_blank">refatoração</a> sobre ele?</strong></li>
<ol>
<li>5 vezes. [Dou banho todo dia no meu código e observo métricas de qualidade de código como complexidade ciclomática com rigor]</li>
<li>3 ou 4 vezes [Ok. Às vezes me esqueço de dar banho no meu código.]</li>
<li>1 ou 2 vezes [Então. Sou meio porquinho e não gosto muito de tomar banho e não me importo com o mau cheiro dos meus códigos também.]</li>
<li>0 vezes [Refatoração? O que é isso?]</li>
</ol>
<li><strong>Defeitos são indesejados e podem ser comparados a resíduos industriais de empresas ou baratas em esgotos. Você tem disciplina de testes de desenvolvimento? Se sim, quantas vezes por semana você cria testes de unidade e executa testes de regressão sobre o seu código?</strong></li>
<ol>
<li>5 vezes. [Piso em toda barata que vejo na rua! Portanto só saio do escritório com o teste de regressão executado com sucesso.]</li>
<li>3 ou 4 vezes [Sou atento e gosto de fazer testes de unidade mas às vezes falho para executar smoke testes e testes de regressão no fim do dia]</li>
<li>1 ou 2 vezes [Então. Sou meio preguiçoso para criar testes de unidade. Gosto de inventar desculpas e acho que isso é problema dos analistas de testes chatos que só fazem pegar no meu pé]</li>
<li>0 vezes [Regressão? Tem a ver com vidas passadas, certo?]</li>
</ol>
<li><strong>Desenvolvedores normalmente trabalham em times e criam projetos através de repositórios como SVN, Microsoft TFS ou GIT. Quantas vezes por semana você tem contato com o seu repositório SCM?</strong></li>
<ol>
<li>5 vezes. [Desço e subo código todo dia, conheço e uso <a href="http://www.scmpatterns.com" target="_blank">padrões SCM</a> com excelência.]</li>
<li>3 u 4 vezes [Ok. Ás vezes deixo o meu código na minha máquina antes de ir embora para casa. Gosto de viver emoções fortes]</li>
<li>1 ou 2 vezes ["I'm a cave man. I'm a jungle man. A young <em>man</em>. A young <em>man</em>. I fight with my hands....", Homem Primata, Titãs, Cabeça de Dinossauro.]</li>
<li>0 vezes. [SVN? Isso é marca do novo isotônico, certo?]</li>
</ol>
<li><strong>Desenvolvedores normalmente trabalham em linguagens OO como Java, C# ou mesmo em linguagens híbridas OO-Procedural como C++ ou PHP. Quantas vezes por semana realizo modelagem ágil e organizo apropriadamente o meu modelo de classes executável?</strong></li>
<ol>
<li>5 vezes [Conheço<a title="Padões de Análise" href="http://www.amazon.com/Analysis-Patterns-Reusable-Object-Models/dp/0201895420"> padrões de análise</a>, <a title="Padrões de Desenho" href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1351358770&amp;sr=1-1&amp;keywords=design+patterns+elements+of+reusable+object-oriented+software">padrões de desenho</a> e padrões GRASP e os uso com parcimônia sobre os meus códigos. Além disso, faço junto do meu time diversas sessões de modelagem com o uso de quadro branco]</li>
<li>3 ou 4 vezes [Gosto e aplico sessões de modelagem ágil, mas ainda não conheço plenamente técnicas de padrões e modelagem]</li>
<li>1 ou 2 vezes [Veja bem, a minha empresa não tem quadro brancos, nem cartolinas, nem papel, nem caneta? O que posso fazer?]</li>
<li>0 vezes [Comunicar com outros seres humanos em sessões de modelagem? Não, obrigado. Programar para mim é uma atividade individual. A propósito, o que é parcimônia mesmo?]</li>
</ol>
<li><strong>Times ágeis entregam software funcionando em pequenos incrementos para os seus usuários com o uso de técnicas como integração contínua ou <a title="Entrega Contínua" href="http://continuousdelivery.com">entrega contínua</a>. Quantas vezes por semana você gera produtos potencialmente demonstráveis (Alfas ou Betas) para o seu Product Owner, Analista de Negócio ou cliente.</strong></li>
<ol>
<li>5 vezes. [Me espelho em projetos como a IDE Eclipse, que tem quase 50 milhões de linhas de código, é construído de forma distribuída no mundo inteiro e ainda assim gera produtos em base diária]</li>
<li>3 ou 4 vezes [Gosto de liberar produtos com frequência para demonstração para o PO, mas tenho dificuldades em fazer isso e às vezes falho]</li>
<li>1 ou 2 vezes [Estou começando a aplicar esta técnica, mas ainda tenho um longo caminho para trilhar neste aspecto.]</li>
<li>0 vezes [Veja bem. Na minha empresa tudo é impossível fazer isso e além disso você já sabe que gosto de inventar desculpas para enrolar no meu trabalho, não é]</li>
</ol>
<li><strong>A priorização de requisitos e o cumprimento de acordos das metas dos sprints e metas diárias é parte indissociável de todo desenvolvedor ágil? Quantas vezes por semana você conversa com o seu time para reportar as metas diárias, impedimentos e o progresso em relação às metas semanais.</strong></li>
<ol>
<li>5 vezes [Faço <a title="XP Stand-UP Meetings" href="http://www.extremeprogramming.org/rules/standupmeeting.html">stand-up meetings</a> faça sol ou faça chuva. Cumpro religiosamente as minhas metas diárias e reporto impedimentos imediamente quando os mesmos surgem]</li>
<li>4 vezes [Ainda não tenho tanta disciplina e às vezes falho em cumprir minhas metas diárias e em me comunicar com o meu time.]</li>
<li>1 ou 2 vezes [Então. Tenho dores de barriga com frequência, estudo à noite e minha namorada fica me ligando toda hora. Não tenho tranquilidade para produzir código e portanto falho as minhas metas com frequência]</li>
<li>0 vezes [Já não te disse que não gosto de conversar com outros seres humanos!! *$*##&amp;@)# ]</li>
</ol>
</ol>
<div><span style="font-size: small;"><span style="line-height: 24px;"><strong>Se você fez 15 ou mais pontos</strong>, parabéns, você é realmente ágil. Continue assim.</span></span></div>
<div><span style="font-size: small;"><span style="line-height: 24px;"><strong>Se você fez entre 10 e 14 pontos</strong>, você já compreendeu os princípios ágeis, mas ainda precisa se disciplinar e disciplinar o seu time. </span></span></div>
<div><span style="font-size: small;"><span style="line-height: 24px;"><strong>Se você fez entre 5 e 9 pontos</strong>, sinto lhe informar que você é tão ágil quanto uma sucuri que acabou de comer uma paca de 40 kilos. É hora de acabar com a nhem-nhem-nhem e aplicar técnicas ágeis para valer.</span></span></div>
<div><span style="font-size: small;"><span style="line-height: 24px;"><strong>Se você fez até 4 pontos</strong>, você é definitivamente frágil e precisa estudar seriamente os princípios e técnicas ágeis antes de sair por aí fazendo propaganda de métodos ágeis. </span></span></div>
<div><span style="font-size: small;"><span style="line-height: 24px;"><br />
</span></span></div>
<p><span style="font-size: small;"><br />
</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/10/desenvolvedores-frageis-voce-e-um-deles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arquiteturas Evolutivas e o Débito Técnico Arquitetural</title>
		<link>http://marcomendes.com/blog/2012/09/arquiteturas-evolutivas-e-o-debito-tecnico-arquitetural/</link>
		<comments>http://marcomendes.com/blog/2012/09/arquiteturas-evolutivas-e-o-debito-tecnico-arquitetural/#comments</comments>
		<pubDate>Sat, 29 Sep 2012 17:15:14 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Engenharia de Software]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=718</guid>
		<description><![CDATA[Uma arquitetura de software executável é o conjunto de códigos executáveis que suportam os requisitos (casos de uso, estórias do usuário ou telas) mais importantes para o negócio e que afetam os elementos técnicos de um sistema em amplitude. Idealmente, &#8230; <a href="http://marcomendes.com/blog/2012/09/arquiteturas-evolutivas-e-o-debito-tecnico-arquitetural/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Uma arquitetura de software executável é o conjunto de códigos executáveis que suportam os requisitos (casos de uso, estórias do usuário ou telas) mais importantes para o negócio e que afetam os elementos técnicos de um sistema em amplitude. Idealmente, a construção de uma arquitetura executável deve possuir códigos para todos os mecanismos arquiteturais identificados em uma arquitetura candidata (documento de arquitetura de software ou caderno arquitetural). Um mecanismo arquitetural é uma tática técnica importante para o desenvolvimento de uma solução de software, como por exemplo a autenticação em sistemas de home banking, a usabilidade facilitada em redes sociais ou a eficiência operacional na entrada de dados em <em>call-centers</em>.</p>
<p>O mundo real e a pressão por entregas em produção, entretanto, é implacável. Gerentes e clientes pressionam os times técnicos por prazos cada vez mais arrojados. Como mágicas e unicórnios não existem, uma técnica chamada de gestão do débito técnico arquitetural pode ajudar nesta questão.</p>
<p><strong>Débito Técnico Arquitetural</strong></p>
<p>Uma arquitetura de software ideal implementa <strong><em>n </em></strong>táticas arquiteturais. Uma arquitetura evolutiva, ao invés, implementa <strong><em>m|m &lt; n</em></strong> táticas arquiteturais. Uma tática arquitetural deliberadamente ausente será adiada na primeira entrega em produção. Esta ação irá gerar dois efeitos (um positivo e um negativo).</p>
<ul>
<li>O atendimento a prazos de negócio como por exemplo regulações ou pressões da área de marketing de uma empresa para lançar um novo produto;</li>
<li>Um produto que deve um atributo de qualidade não realizada por alguma tática. Por exemplo, um código com manutenibilidade reduzida ou uma aplicação Web com ausência de portabilidade entre navegadores.</li>
</ul>
<p><strong>Os Juros do Banco Arquitetural</strong></p>
<p>O banco arquitetural cobra juros altos, proporcionais ao tamanho do sistema em termos de seus requisitos e o custo da refatoração de cada caso de uso.</p>
<p><strong><em>Débito Arquitetural = ƒ (Número de Requisitos, Custo Médio de Refatoração Arquitetural por Requisito)</em></strong></p>
<p>Como exemplo, se um sistema tem 70 telas e o custo de refatoração e testes para portabilidade ao navegador Chrome é de 8 horas por caso de uso, temos um débito arquitetural de 560 horas. Se o custo médio de um profissional de uma fábrica de software é de 60 reais, então podemos até quantificar o débito técnico da arquitetural em R$ 33.600 reais.</p>
<p>É importante lembrar que que sistemas crescem em termos de suas funcionalidades ao longo do tempo e portanto o débito aumenta à medida que o tempo aumenta. Este aumento não é linear pois quanto mais tempo decorre menor se torna o conhecimento sobre os atributos de qualidade originalmente implementados, i.e., o custo de unidade da refatoração também tende a aumentar.</p>
<p><strong>Ir ou não ao Banco Arquitetural?</strong></p>
<p>Se o benefício de negócio é maior que o débito técnico gerado, então o uso de uma arquitetura evolutiva pode se tornar um bom negócio para a empresa. Embora isso incomode os engenheiros de software e arquitetos mais puristas, é importante entender que um projeto de software é apenas uma engrenagem no contexto de uma empresa e que muitas vezes o débito pode ser tornar uma questão de sobrevivência empresarial.</p>
<p>Por exemplo, se no exemplo anterior a área de marketing estimou que um produto lançado 2 meses antes devido a ausência de suporte ao Chrome poderá gerar R$ 100.000 reais de benefícios de negócio, então a portabilidade multi-navegador poderia ser hipoteticamente adiada para uma v2.0 do produto. O lucro com a decisão poderia gerar quase R$ 70.000 reais para a empresa, descontados já o pagamento do débito.</p>
<p>A análise no mundo real, naturalmente, deve ser mais criteriosa e pode considerar uma análise quantitativa de riscos para incluir ao valor do débito arquitetural. A mensagem final, entretanto, é que arquiteturas evolutivas podem ser excelentes mecanismos para responder a pressões de mercado e atendimento a elementos regulatórios.</p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/09/arquiteturas-evolutivas-e-o-debito-tecnico-arquitetural/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entre duas soluções técnicas igualmente boas, escolha a mais simples</title>
		<link>http://marcomendes.com/blog/2012/08/entre-duas-solucoes-tecnicas-igualmente-boas-escolha-a-mais-simples/</link>
		<comments>http://marcomendes.com/blog/2012/08/entre-duas-solucoes-tecnicas-igualmente-boas-escolha-a-mais-simples/#comments</comments>
		<pubDate>Sat, 04 Aug 2012 18:24:47 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Arquitetura de Software]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=709</guid>
		<description><![CDATA[Consideremos um problema de integração ad-hoc entre duas empresas sobre um canal seguro. A empresa B precisa disponibilizar informações sobre estoques de seus produtos criados em uma aplicação ASP.NET MVC. A empresa A precisa consumir estas informações sincronamente (RPC) em &#8230; <a href="http://marcomendes.com/blog/2012/08/entre-duas-solucoes-tecnicas-igualmente-boas-escolha-a-mais-simples/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Consideremos um problema de integração <em>ad-hoc</em> entre duas empresas sobre um canal seguro. A empresa B precisa disponibilizar informações sobre estoques de seus produtos criados em uma aplicação ASP.NET MVC. A empresa A precisa consumir estas informações sincronamente (RPC) em uma aplicação Java EE. Os desenvolvedores nas empresas A e B conhecem suas tecnologias de desenvolvimento e o protocolo HTTP.</p>
<p>Um arquiteto de integração é exposto a três soluções possíveis de RPC:</p>
<p>1. Criar uma API sobre SOAP/HTTPS, expor os serviços da empresa em WSDL e criar objetos de dados complexos em XSD.</p>
<p>2.Expor a API  sobre protocolo HTTPS através dos métodos GET/POST em um mecanismo REST.</p>
<p>3. Criar uma comunicação CORBA sobre GIOP/IIOP a partir do uso de COM+ ou WCF em .NET e consumir o objeto remoto através de um EJB (RMI/IIOP).</p>
<p>A lei da parcimônia nos diz para escolher a solução 2 neste contexto, dada que é a mais simples e irá resolver o problema sem a adição de mais complexidade à solução.</p>
<p>Se houver algum outra variável no problema, a solução é reavaliada naturalmente. Assumi no exemplo que nenhum outra questão se faz presente para tornar a explicação mais didática.</p>
<p>A lei da parcimônia é antiga e foi formulada por Willian of Ockham ainda no século 14. Ele descreveu o princípio que é conhecido como lâmina de Occam, que diz  que a explicação para qualquer problema deve assumir apenas as premissas estritamente necessárias à explicação do fenômeno e eliminar todas as que não causariam qualquer diferença aparente nas predições da hipótese ou teoria. Em outras palavras, este princípio recomenda assim que se escolha a teoria explicativa que implique o menor número de premissas assumidas e o menor número de entidades na solução.</p>
<p>Na arquitetura e desenho de software, este princípio nos diz que a solução mais simples para resolver um problema deve ser escolhida, quando temos diversas soluções para resolver uma determinada questão.</p>
<p>São contra-exemplos deste princípio:</p>
<ul>
<li>As famigeradas arquiteturas lasanhas do J2EE 1.3 e 1.4 com quase 10 camadas entre a tela  o banco de dados.</li>
<li>Objetos de transferência TO/VO iguais aos objetos de domínio (POJO/POCO).</li>
<li>Bancos de dados normalizados além da necessidade do problema.</li>
<li>Padrões de desenho artificiais.</li>
<li>Métodos/Funções com centenas de linhas de código.</li>
</ul>
<p>Um bom exemplo da simplicidade aplicada é o método EssUP de Ivar Jacobson. Uma lâmina no contexto da essência arquitetural de um projeto é apresentada <a title="Architecture Essentials" href="http://www.ivarjacobson.com/uploadedFiles/Content/Resources/Practices/Architechural_Essentials.pdf" target="_blank">aqui</a> para os interessados.</p>
<blockquote><p>&#8220;We are to admit no more causes of natural things than such as are both true and sufficient to explain their appearances. Therefore, to the same natural effects we must, so far as possible, assign the same causes.&#8221;, Isaac Newton</p></blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/08/entre-duas-solucoes-tecnicas-igualmente-boas-escolha-a-mais-simples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Os desenvolvedores do planeta Weakland</title>
		<link>http://marcomendes.com/blog/2012/06/os-desenvolvedores-do-planeta-weakland/</link>
		<comments>http://marcomendes.com/blog/2012/06/os-desenvolvedores-do-planeta-weakland/#comments</comments>
		<pubDate>Sat, 02 Jun 2012 18:57:59 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Pessoas]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=682</guid>
		<description><![CDATA[Não. O título não é de um filme B do Ed. Wood, mas de uma espécie de desenvolvedores infiltrados entre os terráqueos e cuja missão é levar os projetos de software ao fracasso através da sabotagem branca, apatia, preguiça e &#8230; <a href="http://marcomendes.com/blog/2012/06/os-desenvolvedores-do-planeta-weakland/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Não. O título não é de um filme B do Ed. Wood, mas de uma espécie de desenvolvedores infiltrados entre os terráqueos e cuja missão é levar os projetos de software ao fracasso através da sabotagem branca, apatia, preguiça e profunda falta de competências essenciais para qualquer analista desenvolvedor da nossa era.</p>
<p><img class="alignnone" title="Plan 9 From Outer Space" src="http://ia.media-imdb.com/images/M/MV5BMTg1MDM5OTU0Nl5BMl5BanBnXkFtZTcwMjk5NzEzMQ@@._V1._SY317_CR5,0,214,317_.jpg" alt="" width="214" height="317" /></p>
<p>Esta espécie está disfarçada entre nós em forma humana e por isso não é trivial reconhece-los em projetos. Mas algumas atitudes evidenciam a sua presença nefasta e danosa. Exemplos abaixo:</p>
<ul>
<li>&#8220;<strong>Testes de unidade automatizados</strong>!? Não. Eu sou apenas um desenvolvedor. O papel do teste é para o time de testes&#8221;.</li>
<li>&#8220;<strong>Padrões de projeto</strong>. Não, obrigado. O meu código não precisa disto&#8221;</li>
<li>&#8220;<strong>Refatoração</strong>? Para que? Eu já tenho experiência em escrever código.&#8221;</li>
<li>&#8220;<strong>Idioms</strong>? Sim! Eu estudo inglês faz 6 meses!&#8221;</li>
<li>&#8220;<strong>Métodos pequenos</strong>? Nossa. Que trabalho eu vou ter!&#8221;</li>
<li>&#8220;<strong>Documentação de código</strong>? O meu código é tão bom que dispensa comentários&#8221;</li>
<li>&#8220;<strong>Entregar código diariamente</strong> no repositório? Impossível! O nosso projeto é muito complexo para isso&#8221;</li>
<li>&#8220;<strong>Integração contínua</strong>? Conheço não.&#8221;</li>
<li>&#8220;<strong>Gerar</strong> <strong>builds</strong> para demonstração semanal com os usuários? Para que? Eu não gosto de usuários e prefiro ter um único contato no final do projeto com estes malditos!&#8221;</li>
</ul>
<p>Se ainda assim você não reconhecer esta espécie, fique atento às frases abaixo que também os denunciam:</p>
<ul>
<li>&#8220;Eu vou tentar!&#8221;</li>
<li>&#8220;Eu vou fazer o meu melhor, ok!&#8221;</li>
<li>&#8220;Sim. Está em 90%. So falta testar.&#8221;</li>
<li>&#8220;Estudar. Não preciso mais não. Eu já me formei em um curso SUPERIOR na Universidade Tabajara&#8221;</li>
</ul>
<p><span class="Apple-style-span" style="font-size: 16px; color: #444444; font-family: Georgia, 'Bitstream Charter', serif; line-height: 24px;">E você? Conhece algum desenvolvedor do planeta <em>Weakland </em>na sua empresa? </span></p>
<div><span style="font-size: x-small;"><span class="Apple-style-span" style="line-height: 24px;"><br />
</span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/06/os-desenvolvedores-do-planeta-weakland/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A decisão tecnológica mais importante do arquiteto de soluções</title>
		<link>http://marcomendes.com/blog/2012/05/a-decisao-tecnologica-mais-importante-do-arquiteto-de-solucoes/</link>
		<comments>http://marcomendes.com/blog/2012/05/a-decisao-tecnologica-mais-importante-do-arquiteto-de-solucoes/#comments</comments>
		<pubDate>Sat, 19 May 2012 16:14:49 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Plataformas]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=675</guid>
		<description><![CDATA[Phillipe Kruchten disse uma vez que a vida do arquiteto é uma longa sucessão de decisões sub-ótimas e parcialmente tomadas no escuro. Nada mais verdadeiro, em minha opinião. Mas qual seria a decisão mais importante que um arquiteto deve tomar. &#8230; <a href="http://marcomendes.com/blog/2012/05/a-decisao-tecnologica-mais-importante-do-arquiteto-de-solucoes/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Phillipe Kruchten disse uma vez que a vida do arquiteto é uma longa sucessão de decisões sub-ótimas e parcialmente tomadas no escuro. Nada mais verdadeiro, em minha opinião.</p>
<p>Mas qual seria a decisão mais importante que um arquiteto deve tomar. A decisão sobre o <strong>estilo da arquitetura</strong> é sem dúvida uma destas decisões. Alguns estilos arquiteturais incluem:</p>
<ul>
<li>Cliente-Servidor</li>
<li>P2P</li>
<li>Multicamadas (n-tier)</li>
<li>Centrado em serviços de negócio (SOA)</li>
<li>Centrado em processos de negócio (BPMS)</li>
<li>Centrado em computação paralela massiva (Grid)</li>
</ul>
<p>No que tange à tecnologia, entretanto, <strong>o conceito da plataforma é sem dúvida a decisão mais importante</strong>. A plataforma é o elemento técnico que dá vida ao estilo arquitetural.</p>
<p>Um plataforma é um arranjo de softwares e servidores organizados de forma coerente para resolver problemas comuns no desenvolvimento de software. Dois exemplos comuns de plataformas incluem o Java EE e o Microsoft .NET. Um outro exemplo de um plataforma é o LAMP, que é um arranjo composto de sistema operacional baseado em Linux, servidor Web Apache httpD, servidor de banco de dados MySql e linguagens dinâmicas como PHP, PERL ou Python.</p>
<p>O Java EE,  .NET ou LAMP são usados normalmente para sistemas de informação Web. Naturalmente existem cenários da realidade de mercado onde necessidades mais específicas surgem. Para estes cenários existem outros tipos de plataformas de mercado, muito além do Java EE e o .NET.</p>
<p>Exemplos incluem:</p>
<ul>
<li>Plataformas de ERP/MRP (<em>Enterprise Resource Planning/Material Resource Planning</em>), usadas para automatizar processos de suporte de organizações. Exemplos de produtos nesta linha são o SAP ECC, o Oracle PeopleSoft e Oracle JD Edwards.</li>
<li>Plataformas de portais usadas para a criação de sites que unifiquem informações de diversas fontes. Exemplos incluem o Microsoft SharePoint, o Oracle Portal ou o IBM WebSphere Portal.</li>
<li>Plataformas de serviços interoperáveis para estilos centrados em serviços SOA. Exemplos incluem o Microsoft WCF ou o Apache Tuscany (padrão SCA).</li>
<li>Plataformas de automação de processos de negócio (BPMS) para empresas que estejam e estágios avançados de implementações BPM. Exemplos incluem o IBM Business Process Manager ou o Oracle BPM.</li>
<li>Plataformas de serviços de decisão (BRMS) para empresas que busquem flexibilidade e responsividade extrema para as suas regras de negócio. Exemplos incluem o IBM ILOG Operational Decision Management ou o Redhat JBOSS Drools.</li>
<li>Plataformas de BI/ETL para o suporte a inteligência de negócios avançada. Exemplos incluem a suíte de produtos IBM Cognos, Microsoft SISS ou Oracle Hyperion.</li>
<li>Plataformas de integração de aplicações chamadas de ESB (Enterprise Service Bus). Exemplos incluem o SAP PI, IBM WebSphere ESB e o Microsft BizTalk.</li>
</ul>
<p>Se escolhemos uma plataforma arquitetural inadequada teremos graves problemas durante o projeto. Curiosamente, muitos &#8220;arquitetos&#8221; consideram a plataforma como dada e nem sequer pensam nisso. É a síndrome do arquiteto de uma plataforma só, que coloca a tecnologia na frente do problema.</p>
<p>Arquitetos de soluções racionais agem na direção inversa. Eles tem a mente aberta e fazem uma análise dos condutores arquiteturais. A partir destes condutores eles recomendam a plataforma mais apropriada que irá promover o melhor balanceamento dos condutores.</p>
<p>Em cenários mais sofisticados, uma solução pode exigir um conjunto de plataformas distintas. Em um caso SOA que estamos trabalhando atualmente, uma determinada empresa organizou a sua infraestrutura a partir de um conjunto de soluções integradas de BPMS, SOA e ESB.</p>
<p>Grandes fornecedores de mercado como a IBM, Oracle, TIBCO, SAP, Redhat, entre outros gigantes, possuem esquemas conceituais que nos permitem navegar neste mar de tecnologias. Deixo para os curiosos e aficionados pelo tema duas referências respectivamente da IBM e da Redhat.</p>
<p><a title="Arquitetura de Referência IBM" href="http://www.ibm.com/developerworks/br/websphere/techjournal/0904_badawi/0904_badawi.html" target="_blank">Arquitetura Referência IBM</a></p>
<p><img class="alignnone" title="Arquitetura de Referência da IBM" src="http://www.ibm.com/developerworks/br/websphere/techjournal/0904_badawi/images/image002.gif" alt="Arquitetura de Referência da IBM" width="572" height="286" /></p>
<p><a title="JBOSS Enterprise Middleware" href="http://br.redhat.com/products/jbossenterprisemiddleware/" target="_blank">Arquitetura Redhat JBOSS Enterprise Middleware</a></p>
<p><img class="alignnone" title="Arquitetura de Referência RedHat JBOSS" src="http://br.redhat.com/rhecm/rest-rhecm/jcr/repository/collaboration/sites%20content/live/redhat/web-cabinet/static-files/images/JBoss_architecture_550x599.png" alt="Arquitetura de Referência RedHat JBOSS" width="550" height="599" /></p>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/05/a-decisao-tecnologica-mais-importante-do-arquiteto-de-solucoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reduzindo a incerteza arquitetural</title>
		<link>http://marcomendes.com/blog/2012/05/reduzindo-a-incerteza-arquitetural/</link>
		<comments>http://marcomendes.com/blog/2012/05/reduzindo-a-incerteza-arquitetural/#comments</comments>
		<pubDate>Tue, 08 May 2012 16:06:14 +0000</pubDate>
		<dc:creator>Marco Mendes</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://marcomendes.com/blog/?p=660</guid>
		<description><![CDATA[Uma das grandes dificuldades no processo de criação de arquiteturas é capturar os requisitos que realmente importam para a arquitetura (Requisitos Arquiteturais). Uma técnica para auxílio neste processo é fornecida por uma ferramenta da psicologiachamada de Janela de Johari que também usada em &#8230; <a href="http://marcomendes.com/blog/2012/05/reduzindo-a-incerteza-arquitetural/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Uma das grandes dificuldades no processo de criação de arquiteturas é capturar os requisitos que realmente importam para a arquitetura (<em>Requisitos Arquiteturais</em>).</p>
<p>Uma técnica para auxílio neste processo é fornecida por uma ferramenta da psicologiachamada de <em>Janela de Johari</em> que também usada em alguns círculos de engenharia de requisitos.</p>
<p>Adapto este conceito para o contexto de arquitetura de software, exibido na figura abaixo.</p>
<p><a href="http://marcomendes.com/blog/wp-content/uploads/2012/05/JanelaRequisitos.png"><img class="aligncenter size-full wp-image-672" title="Janela de Johari" src="http://marcomendes.com/blog/wp-content/uploads/2012/05/JanelaRequisitos.png" alt="" width="656" height="489" /></a></p>
<p>A figura mostra nem todo requisito é conhecido pelo nosso time e pelos nossos usuários e este desconhecimento (nosso, dos usuários ou de ambos) é fonte de muitos problemas.</p>
<p>Vamos contextualizar o conceito em um exemplo didático de um sistema de Internet Banking. É natural (para qualquer arquiteto e para os usuários chave de um Banco de Crédito) que aspectos de segurança devem afetar a arquitetura executável do produto sendo criado. Portanto, aspectos de autenticação, autorização e transporte seguro estariam no quadrante Q1, que é o dos requisitos arquiteturais óbvios. Até agora não temos nenhum problema.</p>
<p>Vamos considerar agora alguns requisitos de qualidade interna como a manutenibilidade ou a testabilidade, que são normalmente conhecidos pelo nosso time. Normalmente aspectos de qualidade interna não são percebidos diretamente pelos usuários chave, o que os coloca no quadrante Q4. Portanto, arquitetos devem tomar cautela extrema com estes requisitos pois eles não são normalmente percebidos pelos usuários e portanto não valorizados. A consequência é que eles podem causar aos usuários a sensação de baixa produtividade na execução de código pelo time de desenvolvimento. Ainda pior, eles podem encarecer o seu projeto sem percepção de valor similar para os seus usuários.</p>
<p>Vamos agora considerar alguma norma obscura do Banco Central que lide com algum aspecto regulatório. Se a maturidade dos usuários envolvidos no projeto e da equipe de arquitetura for baixa, este requisito regulatório, que pode afetar a arquitetura, estaria colocado no quadrante Q3. A lição aqui é óbvia. Os usuários normalmente não conhecem todos os requisitos e portanto devemos buscar requisitos que podem afetar a arquitetura em outras fontes de informação.</p>
<p>Finalmente, vamos lidar os requisitos mais perigosos, que são elementos óbvios para os usuários mas não óbvios para o time. Por exemplo, o usuário pode assumir que a portabilidade entre navegadores para dispositivos móveis é dada. O time, por sua vez, pode nem ter considerado esta possibilidade. Tipicamente estes requisitos do quadrante Q2 são fontes de desgaste durante o projeto e envolvem retrabalho para o time pois afinal eles são <em>&#8220;óbvios&#8221; </em>para os usuários.</p>
<p>Em cenários ideais gostaríamos de mover todos os requisitos para o quadrante 01, mas o fato é que sempre haverá requisitos nos quadrantes Q2, Q3 e Q4 também. Naturalmente a aplicação de métodos arquiteturais de coleta de requisitos reduzirá a probabilidade que isto aconteça. Algumas dicas rápidas para isso incluem:</p>
<ul>
<li>Realizar reuniões e oficinas de trabalho para mover os requisitos do quadrante Q2 para o quadrante Q1. Técnicas de leitura ambiental também são úteis neste contexto.</li>
<li>Buscar outras fontes de informação além do ambiente e informações fornecidos pelos próprios usuários podem mover alguns requisitos do quadrante Q3 para o quadrante Q1.</li>
<li>Educar usuários sobre os requisitos que eles não conhecem pode ajudar a levar requisitos do quadrante Q4 para Q1. Em outras situações, talvez devamos remover alguns requisitos de Q4 do escopo do nosso projeto.</li>
</ul>
<blockquote>
<div><span style="font-size: small;"><span class="Apple-style-span" style="line-height: 24px;">Pensamento do dia: &#8220;O combinado não é caro&#8221;, Anônimo<br />
</span></span></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marcomendes.com/blog/2012/05/reduzindo-a-incerteza-arquitetural/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
