<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Belchior Oliveira</title>
    <description>The latest articles on DEV Community by Belchior Oliveira (@belchior).</description>
    <link>https://dev.to/belchior</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F420949%2F19aed11d-f7ce-4564-885a-54e659aee969.png</url>
      <title>DEV Community: Belchior Oliveira</title>
      <link>https://dev.to/belchior</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/belchior"/>
    <language>en</language>
    <item>
      <title>Breaking Changes em Aplicações</title>
      <dc:creator>Belchior Oliveira</dc:creator>
      <pubDate>Thu, 28 Jan 2021 01:36:36 +0000</pubDate>
      <link>https://dev.to/belchior/breaking-changes-em-aplicacoes-32p4</link>
      <guid>https://dev.to/belchior/breaking-changes-em-aplicacoes-32p4</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oyZdU4Fg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pozlpagyko7d547x6ki1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oyZdU4Fg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pozlpagyko7d547x6ki1.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gostaria de tentar esclarecer o significado de um termo frequentemente usado no desenvolvimento de &lt;em&gt;software&lt;/em&gt; que é o &lt;strong&gt;Breaking Changes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Breaking Changes é uma comunicação entre criadores de &lt;em&gt;libraries/frameworks&lt;/em&gt; e seus usuários afim de informar que houve mudanças nas API públicas do &lt;em&gt;softwares&lt;/em&gt; e dependendo que como a tecnologia for usada pode causar comportamentos inesperados, não necessariamente erros.&lt;/p&gt;

&lt;p&gt;Do ponto de vista de uma aplicação os criadores são os times (&lt;em&gt;squads&lt;/em&gt;) que são compostos de pessoas de diferentes áreas não apenas desenvolvedores, já os usuários normalmente são os clientes da empresa e/ou pessoas internas de outras áreas. Dentro desse escopo uma breaking changes é uma mudança no uso da aplicação que pode gerar um resultado inesperado.&lt;/p&gt;

&lt;p&gt;No nosso dia a dia nós usamos o termo para se referir a: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inclusão de funcionalidades&lt;/li&gt;
&lt;li&gt;Correções de bugs &lt;/li&gt;
&lt;li&gt;Mudanças internas da qual os usuários não conhecem ou não usam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sendo que nenhum desses casos representam uma breaking change.&lt;/p&gt;

&lt;p&gt;Mudanças internas mesmo aquelas que podem quebrar algum código existente não representam uma breaking change, dado que é de responsabilidade dos criadores manter as API internas do &lt;em&gt;software&lt;/em&gt; funcionando com o passar do tempo.&lt;/p&gt;

&lt;p&gt;Um uso correto do termo seria: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Informar a remoção de uma funcionalidade pública. &lt;/li&gt;
&lt;li&gt;Informar que houve mudanças de regras de uma funcionalidade pública de tal forma que possa gerar um comportamento inesperado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em linhas gerais, deveria ser raros os casos onde uma aplicação gera uma breaking change.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Diferenças e semelhanças entre Bugs e Features</title>
      <dc:creator>Belchior Oliveira</dc:creator>
      <pubDate>Sat, 23 Jan 2021 20:51:24 +0000</pubDate>
      <link>https://dev.to/belchior/diferencas-e-semelhancas-entre-bugs-e-features-e99</link>
      <guid>https://dev.to/belchior/diferencas-e-semelhancas-entre-bugs-e-features-e99</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JbtNX1Ys--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3x672gfigp14btik9xae.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JbtNX1Ys--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3x672gfigp14btik9xae.jpg" alt="grafíte de abelhas voando em bicicletas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gostaria de tentar esclarecer dois conceitos próximos que geram algumas interpretações erradas no dia a dia que são as Diferenças e semelhanças entre Bugs e Features. Existe um senso comum sobre o que cada um desses termos significa, entretanto nós fazemos um uso tão frequente deles que acabamos caindo em armadilhas e nem percebemos. &lt;/p&gt;

&lt;h4&gt;
  
  
  Senso comum:
&lt;/h4&gt;

&lt;p&gt;Uma &lt;strong&gt;feature&lt;/strong&gt; é um recurso novo que está sendo adicionado ao &lt;em&gt;software&lt;/em&gt; com o objetivo de complementar ou expandir as funcionalidades existentes. &lt;/p&gt;

&lt;p&gt;Um &lt;strong&gt;bug&lt;/strong&gt; geralmente é uma divergência entre o que se espera e o que se tem em um &lt;em&gt;software&lt;/em&gt;, em outras palavras é quando o &lt;em&gt;software&lt;/em&gt; se comporta de forma diferente do que se espera. &lt;/p&gt;

&lt;p&gt;Baseado nessa premissa é bem difícil confundir um bug com uma feature dado que eles possuem significados diferentes e acontecem em momentos diferentes. É baseado nesse senso comum que surgem os problemas. &lt;/p&gt;

&lt;h4&gt;
  
  
  Vamos imaginar o cenário:
&lt;/h4&gt;

&lt;p&gt;Uma Loja Física de camiseta decide vender seus produtos na web e para isso contrata uma Agência para construir o &lt;em&gt;e-commerce&lt;/em&gt; de camisetas. &lt;/p&gt;

&lt;p&gt;Ao longo do processo é definido que a página do produto deveria ter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Foto da camiseta &lt;/li&gt;
&lt;li&gt;Descrição da camiseta &lt;/li&gt;
&lt;li&gt;Botão “comprar” &lt;/li&gt;
&lt;li&gt;Campo para cálculo de frete &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Agência desenvolve a página de produto e entrega para o cliente, com o passar do tempo várias camisetas são cadastradas e disponibilizadas no &lt;em&gt;e-commerce&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;No decorrer do tempo e com &lt;em&gt;feedbacks&lt;/em&gt; recebidos pelos usuários, a Loja Física decide que seria interessante adicionar uma foto da estampa da camiseta como alternativa para seus usuários terem mais clareza sobre o que eles estão comprando. A Agência desenvolve a feature e entrega para o cliente, novos produtos são cadastrados e a imagem alternativa está lá como esperado. &lt;/p&gt;

&lt;p&gt;Mais alguns dias se passam e a Loja Física percebe que a imagem alternativa só aparece nos produtos novos e não nos antigos e decide reportar a situação como um &lt;strong&gt;bug&lt;/strong&gt;. A Agência rebate dizendo que a &lt;strong&gt;feature&lt;/strong&gt; foi implementada corretamente e caso seja do interesse da Loja Física ter a imagem alternativa nos produtos antigos ela deve fazer um novo contrato. É aqui que começa as divergências. &lt;br&gt;
&lt;br&gt;&lt;br&gt;
Afinal, adicionar a imagem alternativa nos produtos antigos é corrigir um bug ou adicionar uma feature? &lt;br&gt;
&lt;br&gt;&lt;br&gt;
Esse problema possui pelo menos duas dimensões, a falta de Critérios de Aceite e a forma como que a feature foi implementada originalmente. Analisando com um pouco mais de profundidade, começando pela forma com que a feature foi implementada.  &lt;/p&gt;

&lt;p&gt;Frequentemente &lt;em&gt;e-commerces&lt;/em&gt; e portais de notícias adotam uma técnica de implementação chamada &lt;em&gt;static site generator&lt;/em&gt; que consiste em a partir de dados brutos gerar um site estático em HTML, caso essa abordagem tenha sido adotada a afirmação da Agência está correta, dado que cada página de produto é independente umas das outras e será necessário um &lt;em&gt;rebuild&lt;/em&gt; das páginas antigas para ter a feature nova, normalmente essa abordagem é motivada por performance. Caso o &lt;em&gt;e-commerce&lt;/em&gt; tenha sido implementado usando um padrão &lt;em&gt;REST&lt;/em&gt; que monta a página a cada &lt;em&gt;request&lt;/em&gt; a Loja Física está correta em afirmar que é um bug. &lt;/p&gt;

&lt;p&gt;Se analisarmos a partir dos Critérios de Aceite, se no momento em que a feature foi planejada e desenvolvida não foi especificado que ela deveria funcionar para páginas antigas e novas então a Agência está correta. Por sua vez a Loja Física poderia argumentar e com razão que, é óbvio que deveria funcionar para produtos antigos e novos e que esse critério de aceite já está subentendido. Entretanto o óbvio e o subentendido são a causa raiz de vários males, mas este é um assunto para outra conversa. &lt;br&gt;
&lt;br&gt;&lt;br&gt;
Outros aspectos que podemos identificar sobre bugs e features:  &lt;/p&gt;

&lt;p&gt;Bugs normalmente são impeditivos, em muitos casos demandam ações corretivas imediatas, bugs deveriam ter vida curta para identificá-los e corrigi-los. &lt;/p&gt;

&lt;p&gt;Features não são impeditivas, demandam planejamento e critérios de aceite, features possuem vida longa e se tornam frágeis com o passar do tempo quando desenvolvidas com pressa ou sem reavaliação. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusão
&lt;/h4&gt;

&lt;p&gt;Nem sempre é fácil diferenciar um bug de uma feature e identificar de forma errada pode causar desentendimento entre as partes.  &lt;/p&gt;

&lt;p&gt;Uma feature que é tratada como um bug normalmente é desenvolvida com pressa, testes são negligenciados e a qualidade fica abaixo do que se espera. Um bug que é tratado como uma feature demora para ser corrigido, degrada a qualidade do &lt;em&gt;software&lt;/em&gt; e gera impacto negativo nos usuários finais. &lt;/p&gt;

&lt;p&gt;Nesse artigo foi adotado um exemplo de apenas duas dimensões, mas no mundo real problemas como esse podem ter muito mais, o importante aqui não é tentar identificar todas elas, mas entender que esses enganos acontecem. Ter um conhecimento mais aprofundado sobre o assunto nos ajuda a se organizar melhor, definir prioridades de forma mais assertiva e por fim diminuir o ruído na comunicação entre o time.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;Photo credit: Matt Lively, 27 Beecycles. NEON District Mural. Commissioned by Virginia MOCA. Photograph by Glen McClure. October 2015&lt;/small&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
  </channel>
</rss>
