{"id":2874,"date":"2019-08-16T19:07:17","date_gmt":"2019-08-16T22:07:17","guid":{"rendered":"https:\/\/www.itexto.com.br\/devkico\/?p=2874"},"modified":"2019-08-16T19:15:25","modified_gmt":"2019-08-16T22:15:25","slug":"coisas-que-apodrecem-software-resistencia-ao-framework","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=2874","title":{"rendered":"Apodrecendo seu software com rebeldia"},"content":{"rendered":"\n<p>\u00c9 muito raro toparmos com sistemas que foram feitos para serem ef\u00eameros. Ent\u00e3o por que \u00e9 t\u00e3o comum vermos projetos que nascem para ser eternos e rapidamente apodrecem diante dos olhos de seus stakeholders? <\/p>\n\n\n\n<p>Iniciei uma pesquisa interna na itexto em que elencamos quais os fatores que levam um sistema a deteriorar. No topo est\u00e1 um comportamento que, neste post, chamarei carinhosamente de &#8220;rebeldia&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uma hist\u00f3ria em tr\u00eas atos<\/h2>\n\n\n\n<p>Todo software tem uma hist\u00f3ria e desconfio que h\u00e1 um n\u00famero bastante reduzido de varia\u00e7\u00f5es no que diz respeito a este assunto. Segue uma bem comum&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primeiro ato: a felicidade do ambiente familiar<\/h3>\n\n\n\n<p>Projeta-se o sistema de tal modo que se conhece todos os seus elementos. A arquitetura \u00e9 clara: sabe-se quais tecnologias e ferramentas dever\u00e3o ser adotadas e por que se encaixam bem neste cen\u00e1rio. Os artificies dominam suas ferramentas (ou ao menos gostam delas) e esculpem com primor seu sistema.<\/p>\n\n\n\n<p>N\u00e3o raro \u00e9 neste momento em que a maior parte dos testes s\u00e3o escritos, que a documenta\u00e7\u00e3o essencial \u00e9 gerada e mantida. O primeiro release talvez seja um pouco problem\u00e1tico, mas a partir do segundo (release) os problemas originais j\u00e1 est\u00e3o dominados (ou ao menos conhecidos) e observa-se sucessivas implanta\u00e7\u00f5es bem sucedidas. <\/p>\n\n\n\n<p>A fam\u00edlia \u00e9 unida no objetivo de <strong>desenvolver<\/strong> aquele sistema da melhor forma poss\u00edvel com as restri\u00e7\u00f5es adotadas em sua concep\u00e7\u00e3o. Restri\u00e7\u00f5es estas consistindo nas ferramentas de desenvolvimento adotadas, <strong>frameworks<\/strong>, padr\u00f5es arquiteturais e conven\u00e7\u00f5es que, mesmo n\u00e3o sendo bem documentadas (se documentadas), fazem parte do dia a dia daquele meio familiar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Segundo ato: a fam\u00edlia (e o mundo) muda<\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"220\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2019\/08\/2-goethe_werther.jpg\" alt=\"\" class=\"wp-image-2882\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/2-goethe_werther.jpg 400w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/2-goethe_werther-300x165.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<p>A estrutura familiar nunca \u00e9 eterna: membros saem e entram na equipe, os participantes originais se afastam com o tempo. E o at\u00e9 ent\u00e3o amado pr\u00edncipe, antes protegido em seu lar dom\u00e9stico acaba tendo seu primeiro contato com o mundo externo.<\/p>\n\n\n\n<p>Novos membros, novas ideias (o que \u00e9 sempre bom!). E as pessoas observam nosso pr\u00edncipe e questionam sua natureza. Ser\u00e1 que realmente deveria ser desta maneira? Por que \u00e9 assim? <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Terceiro ato: rebeldia e morte<\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2019\/08\/werther.jpg\" alt=\"\" class=\"wp-image-2879\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/werther.jpg 400w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/werther-300x225.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<p>Os novos amigos de nosso her\u00f3i come\u00e7am a questionar sua natureza. <em>&#8220;Ainn&#8230; voc\u00ea \u00e9 feito em Java??? Mas Python \u00e9 t\u00e3o mais legal&#8230; Coisas &#8216;data science&#8217; s\u00e3o feitas em Python&#8230;. Coisas fashion s\u00e3o feitas em Node&#8230; PHP??? Uck, que NOXIO!&#8221;<\/em>.<\/p>\n\n\n\n<p>Nosso her\u00f3i que antes era t\u00e3o belo de repente parece enfeiado, fora de moda, ultrapassado. Mas nem tudo est\u00e1 perdido: sua nova fam\u00edlia e amigos est\u00e3o aqui para lhe rejuvenescer. Basta que mude sua natureza, ou seja, sua arquitetura, frameworks, ferramentas de desenvolvimento&#8230; Resumindo: <strong>reescreve este neg\u00f3cio!<\/strong><\/p>\n\n\n\n<p><strong>Mas a reescrita \u00e9 invi\u00e1vel&#8230;<\/strong><\/p>\n\n\n\n<p>Resolve-se o problema: <em>&#8220;por que n\u00e3o usar o que temos, mas de outro modo?&#8221;<\/em><\/p>\n\n\n\n<p>Subverte-se o uso do que existe.<em> Tudo bem: foi feito no framework X, mas podemos escrever novas funcionalidades neste mesmo framework X como se fosse Y! N\u00e3o, melhor ainda: por que n\u00e3o usar um paradigma funcional nesta linguagem que n\u00e3o tem suporte para tal? Espera a\u00ed: por que apenas uma base de dados relacional??? Vamos colocar um NoSQL aqui no meio tamb\u00e9m para termos maior escalabilidade!<\/em><\/p>\n\n\n\n<p>Nem todos os amigos pensam assim: h\u00e1 tamb\u00e9m os depressivos. Estes desenvolvem novas funcionalidades com o que h\u00e1, mas apenas com os conhecimentos que j\u00e1 tem. <em>Pra que me aprofundar nestas tecnologias que n\u00e3o s\u00e3o usadas l\u00e1 fora? Eu mesmo to saindo daqui em breve&#8230; Que se foda esta merda, vou escrever como sei s\u00f3 pra entregar e que se danem estes miser\u00e1veis que criaram esta monstruosidade&#8230;.<\/em><\/p>\n\n\n\n<p>A deteriora\u00e7\u00e3o se mostra aos olhos de todos. Ela chega de mansinho e vai crescendo a cada dia&#8230; Alguns amigos deixam a cidade, outros entram para a turma, mais novas ideias, mais solu\u00e7\u00f5es&#8230; <\/p>\n\n\n\n<p>Nosso her\u00f3i deteriora-se ainda mais. A fam\u00edlia original n\u00e3o mais est\u00e1 presente, apenas novos amigos, que observam sua cada vez mais r\u00e1pida decad\u00eancia.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"351\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2019\/08\/sorrows4.jpg\" alt=\"\" class=\"wp-image-2880\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/sorrows4.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/sorrows4-256x300.jpg 256w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure><\/div>\n\n\n\n<p>E nosso her\u00f3i morre. O custo de mant\u00ea-lo \u00e9 maior que o de sua reescrita. E se os stakeholders tiverem sorte (dinheiro), poder\u00e3o ao menos tentar recome\u00e7ar novamente (e o ciclo se repete).<\/p>\n\n\n\n<p>J\u00e1 viu esta hist\u00f3ria? Eu sim: <strong>v\u00e1rias vezes<\/strong>. Agora vamos fechar o livro e ir pra pr\u00e1tica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sempre h\u00e1 um framework<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2018\/06\/moldura.jpg\" alt=\"\" class=\"wp-image-2767\" width=\"332\" height=\"332\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2018\/06\/moldura.jpg 600w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2018\/06\/moldura-150x150.jpg 150w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2018\/06\/moldura-300x300.jpg 300w\" sizes=\"(max-width: 332px) 100vw, 332px\" \/><figcaption>isto \u00e9 uma moldura<\/figcaption><\/figure><\/div>\n\n\n\n<p>Algum tempo atr\u00e1s neste blog expus minha defini\u00e7\u00e3o do que seria um framework sob um ponto de vista totalmente voltado para a <strong>constru\u00e7\u00e3o de software<\/strong> (clique <a href=\"https:\/\/www.itexto.com.br\/devkico\/?p=2760\">aqui<\/a>). Hoje vou ampliar este conceito. Como eu definiria um framework hoje? Neste primeiro momento, o definira como&#8230;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>O framework s\u00e3o as regras do jogo.<br><\/p><cite>Weissmann, Henrique Lobo<\/cite><\/blockquote>\n\n\n\n<p>Tudo o que disse naquele post se mant\u00e9m, s\u00f3 que agora me refiro a um contexto bem mais amplo. O framework define, por exemplo, qual a arquitetura daquele sistema. Imaginemos um sistema web simples, composto por duas unidades: seu front-end escrito em Angular e seu back-end, que fornece uma API consumida pelo primeiro. H\u00e1 um framework aqui no sentido de que h\u00e1 regras a serem seguidas que s\u00e3o essenciais:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>O protocolo de comunica\u00e7\u00e3o ser\u00e1 o HTTP(S) ou Websocket.<\/li><li>As p\u00e1ginas ser\u00e3o renderizadas como HTML.<\/li><li>Front-end n\u00e3o define as regras profundas de neg\u00f3cio.<\/li><li>Eu sei quais os endpoints disponibilizados pelo meu back-end.<\/li><li>Meu back-end pode ser implementado em qualquer coisa que propicie disponibilizar intera\u00e7\u00f5es usando HTTP ou Websocket.<\/li><\/ul>\n\n\n\n<p>\u00c9 claramente um framework aqui: as regras s\u00e3o claras, ent\u00e3o voc\u00ea sabe como interagir com o sistema. Todos sabem aonde as pe\u00e7as (e quais pe\u00e7as) devem se encaixar.<\/p>\n\n\n\n<p>O framework tamb\u00e9m define como a equipe interage. Sistema n\u00e3o \u00e9 s\u00f3 c\u00f3digo, \u00e9 tamb\u00e9m intera\u00e7\u00e3o entre os membros da equipe. Vamos a algumas regras?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Aplica\u00e7\u00e3o ou n\u00e3o de determinada metodologia ou pr\u00e1tica (TDD, XP, Scrum, etc).<\/li><li>Defini\u00e7\u00e3o de procedimentos de gest\u00e3o de configura\u00e7\u00e3o e mudan\u00e7a.<\/li><li>Procedimentos de valida\u00e7\u00e3o de entreg\u00e1veis.<\/li><li>Como \u00e9 gerido o projeto no que diz respeito \u00e0s atividades e pap\u00e9is dos membros da equipe.<\/li><\/ul>\n\n\n\n<p>Recentemente presenciamos um caso de rebeldia bastante interessante. Causou nos stakeholders uma excelente primeira impress\u00e3o que em pouco tempo se mostrou uma sensa\u00e7\u00e3o bastante amarga.<\/p>\n\n\n\n<p>Um desenvolvedor front-end queria gerar um relat\u00f3rio no formato PDF (algo fact\u00edvel de ser feito usando apenas recursos do navegador hoje em dia). Ele conhecia JavaScript, sabia que com Node seria poss\u00edvel fazer isto usando bibliotecas nativas. Mas n\u00e3o queria incluir estas bibliotecas no front-end. Qual a solu\u00e7\u00e3o? Simples: implementou uma API secreta em Node.js que gerava o arquivo. Brilhante solu\u00e7\u00e3o em um primeiro momento, certo? O primeiro momento foi de sucesso. O que pode dar errado?<\/p>\n\n\n\n<p>Muita coisa: com o tempo gerou-se um conjunto de APIs &#8220;secretas&#8221; no sistema. Endpoints sem qualquer documenta\u00e7\u00e3o que, posteriormente, descobriu-se inclusive implementar algumas regras de neg\u00f3cio profundas que precisaram ser depois transferidas para a API principal. Um pequeno ato de rebeldia que apresenta falsa beleza e acabou por <strong>ruir<\/strong> o sistema a m\u00e9dio prazo.<\/p>\n\n\n\n<p><strong>Frameworks s\u00e3o burocr\u00e1ticos<\/strong> no sentido que definem os padr\u00f5es a serem seguidos. A palavra <strong>burocracia<\/strong> soa mal para muitos, mas na pr\u00e1tica \u00e9 essencial para se ter ordem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando a rebeldia \u00e9 v\u00e1lida?<\/h2>\n\n\n\n<p>Lendo este post voc\u00ea deve estar me achando a pessoa mais inflex\u00edvel do mundo, n\u00e9? Garanto que n\u00e3o \u00e9 o caso. Acredito (e incentivo) atos de rebeldia na itexto o tempo inteiro, mas h\u00e1 uma diferen\u00e7a: <strong>pra ser rebelde, \u00e9 importante saber contra o que se rebeldia<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2019\/08\/James_Dean_in_Rebel_Without_a_Cause.jpg\" alt=\"\" class=\"wp-image-2884\" width=\"314\" height=\"387\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/James_Dean_in_Rebel_Without_a_Cause.jpg 600w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/James_Dean_in_Rebel_Without_a_Cause-244x300.jpg 244w\" sizes=\"(max-width: 314px) 100vw, 314px\" \/><figcaption>H\u00e1 muitos &#8220;James Deans&#8221; por a\u00ed&#8230;<br><\/figcaption><\/figure><\/div>\n\n\n\n<p>O grande problema \u00e9 que na esmagadora maioria dos atos de rebeldia que encontro n\u00e3o h\u00e1 uma an\u00e1lise profunda a respeito do framework corrente. As principais causas de &#8220;rebeldia&#8221; que encontro n\u00e3o tem nada a ver na realidade. Segue uma lista:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A pessoa gostaria de trabalhar com outra tecnologia.<\/li><li>A pessoa acha aquele conjunto de tecnologias antiquado.<\/li><li>A pessoa \u00e9 pregui\u00e7osa e n\u00e3o quis aprender o neg\u00f3cio por que pretende sair logo da equipe.<\/li><li>&#8220;Por que sim&#8221; (tem muita diva por a\u00ed).<\/li><li>Voc\u00ea se torna acidentalmente um rebelde: simplesmente n\u00e3o tem \u00e2nimo com seu trabalho atual. \u00c9 triste e inconsequente, mas acontece.<\/li><li>Por que voc\u00ea pode lucrar horrores sendo desonesto e dizendo que a reescrita \u00e9 o caminho mais interessante (rar\u00edssimas vezes vi o caso que fosse).<\/li><\/ul>\n\n\n\n<p>N\u00e3o, se \u00e9 pra se rebelar, que seja um motim <strong>bem fundamentado<\/strong>. Se \u00e9 pra trocar, por exemplo, o framework web, precisamos de excelentes raz\u00f5es para tal (por que isto requer normalmente a reescrita de boa parte do sistema). As seguintes perguntas precisam ser respondidas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Por que mudar? (repita esta pergunta ao menos umas tr\u00eas vezes pra pessoa)<\/li><li>O que ganhamos com isto?<\/li><li>O que o stakeholder ganha com isto?<\/li><li>Trocar pelo que?<\/li><li>Quais os riscos e o custo desta troca?<\/li><li>Os ganhos justificam os riscos? <\/li><li>Outra pessoa al\u00e9m de voc\u00ea vai conseguir dar manuten\u00e7\u00e3o nisto?<\/li><li>A alternativa \u00e9 ef\u00eamera?<\/li><li>E por a\u00ed vai&#8230;<\/li><\/ul>\n\n\n\n<p>Rebelde sem causa s\u00f3 \u00e9 muito legal no cinema. Se voc\u00ea \u00e9 desenvolvedor e um rebelde sem causa nestes aspectos, vou te contar: voc\u00ea \u00e9 irrespons\u00e1vel (um moleque), por que n\u00e3o sofrer\u00e1 consequ\u00eancias t\u00e3o significativas quanto os stakeholders do projeto.<\/p>\n\n\n\n<p>Rebeldia s\u00f3 se justifica quando os ganhos justificam os riscos. De nada adianta &#8220;inovar&#8221; se o destino \u00e9 o brejo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e1 solu\u00e7\u00e3o para sistemas &#8220;p\u00f3s rebeli\u00e3o&#8221;?<\/h2>\n\n\n\n<p>Sim, \u00e9 bem simples e temos diversos casos de sucesso na itexto nestes contextos. Qual a solu\u00e7\u00e3o? Vamos l\u00e1: entender o framework (as regras do jogo) que originou o sistema.<\/p>\n\n\n\n<p>Quando digo &#8220;entender&#8221;, digo <strong>entender mesmo<\/strong>, com boa vontade. Deixar o ego de lado e entender que provavelmente a pessoa que definiu as regras do jogo conhecia BEM o jogo, talvez mais que voc\u00ea. <\/p>\n\n\n\n<p>(Na itexto recentemente pegamos alguns projetos em JSF. Meu \u00faltimo contato com a tecnologia foi 10 anos atr\u00e1s (ou mais) e n\u00e3o me lembrava de quase nada. Pra piorar, os livros que compramos a respeito eram simplesmente um <strong>nojo<\/strong>. Qual a solu\u00e7\u00e3o? Escrevemos nosso pr\u00f3prio livro sobre a tecnologia que um dia ser\u00e1 disponibilizado ao grande p\u00fablico (de gra\u00e7a), e usamos isto como um dos grandes incentivos para dominarmos a tecnologia)<\/p>\n\n\n\n<p>E depois de entender bem este framework, verificar se pode ser aplicado na situa\u00e7\u00e3o atual do cliente (em 90% das vezes vemos que sim). A\u00ed \u00e9 s\u00f3 corrigir as distor\u00e7\u00f5es, ou seja, pegar tudo aquilo que foge do funcionamento esperado do framework e coloc\u00e1-lo <strong>nos trilhos<\/strong>.<\/p>\n\n\n\n<p>(<strong>dica<\/strong>: se voc\u00ea conhece o framework fica muito f\u00e1cil detectar os pontos nos quais o mesmo n\u00e3o foi respeitado. Eles destoam <strong>nitidamente<\/strong> do restante)<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/www.itexto.com.br\/devkico\/wp-content\/uploads\/2019\/08\/034221_Ampliada.jpg\" alt=\"\" class=\"wp-image-2885\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/034221_Ampliada.jpg 400w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/034221_Ampliada-150x150.jpg 150w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/034221_Ampliada-300x300.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><figcaption>j\u00e1 se questionou por que tantos frameworks curtem ter a palavra &#8220;trilhos&#8221; (rails) no nome?<\/figcaption><\/figure><\/div>\n\n\n\n<p>Muitas vezes na \u00e2nsia de entregar uma funcionalidade (ou manuten\u00e7\u00e3o) o desenvolvedor adota uma solu\u00e7\u00e3o que vai contra o funcionamento esperado do framework. E com isto, naturalmente, obt\u00e9m-se in\u00fameros problemas de desempenho, comportamentos inesperados, etc. \u00c9 incr\u00edvel como simplesmente aplicando os padr\u00f5es do &#8220;framework&#8221; conseguimos resolver uns 90% dos problemas a um custo <strong>muito baixo<\/strong>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concluindo?<\/h2>\n\n\n\n<p>Na lista que estamos compilando de problemas este sem sombra de d\u00favidas \u00e9 um dos que estaria no topo (talvez seja O maior causador de deteriora\u00e7\u00e3o). H\u00e1 outras causas, mas n\u00e3o s\u00e3o t\u00e3o agressivas quanto esta.<\/p>\n\n\n\n<p>Como eu poderia ent\u00e3o descrever este comportamento em poucas palavras&#8230; j\u00e1 sei:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Rebeldia sem causa: ato no qual a equipe desrespeita as regras do jogo no sistema sem justificativas razo\u00e1veis.<\/p><cite>Weissmann, Henrique Lobo<\/cite><\/blockquote>\n\n\n\n<p>O mais assustador \u00e9 que todos n\u00f3s podemos ser rebeldes sem causa e sequer nos darmos conta disto. Importante manter-se atento.<\/p>\n\n\n\n<p>PS: h\u00e1 outros comportamentos que vou descrever aqui neste blog, aguardem!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rebeldia \u00e9 algo muito lindo, mas em software pode ser uma desgra\u00e7a.<\/p>\n","protected":false},"author":1,"featured_media":2875,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[35,36],"tags":[],"class_list":["post-2874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-armadilhas","category-desenvolvimento-de-software"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Apodrecendo seu software com rebeldia - \/dev\/Kico<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=2874\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apodrecendo seu software com rebeldia - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Rebeldia \u00e9 algo muito lindo, mas em software pode ser uma desgra\u00e7a.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=2874\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-16T22:07:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-16T22:15:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"620\" \/>\n\t<meta property=\"og:image:height\" content=\"633\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=2874\",\"name\":\"Apodrecendo seu software com rebeldia - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg\",\"datePublished\":\"2019-08-16T22:07:17+00:00\",\"dateModified\":\"2019-08-16T22:15:25+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=2874\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg\",\"width\":620,\"height\":633},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=2874#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apodrecendo seu software com rebeldia\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Apodrecendo seu software com rebeldia - \/dev\/Kico","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=2874","og_locale":"pt_BR","og_type":"article","og_title":"Apodrecendo seu software com rebeldia - \/dev\/Kico","og_description":"Rebeldia \u00e9 algo muito lindo, mas em software pode ser uma desgra\u00e7a.","og_url":"https:\/\/devkico.itexto.com.br\/?p=2874","og_site_name":"\/dev\/Kico","article_published_time":"2019-08-16T22:07:17+00:00","article_modified_time":"2019-08-16T22:15:25+00:00","og_image":[{"width":620,"height":633,"url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg","type":"image\/jpeg"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=2874","url":"https:\/\/devkico.itexto.com.br\/?p=2874","name":"Apodrecendo seu software com rebeldia - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg","datePublished":"2019-08-16T22:07:17+00:00","dateModified":"2019-08-16T22:15:25+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=2874#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=2874"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=2874#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg","width":620,"height":633},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=2874#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Apodrecendo seu software com rebeldia"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2019\/08\/rebel_rebel.jpg","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2874"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2874"}],"version-history":[{"count":7,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2874\/revisions"}],"predecessor-version":[{"id":2889,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2874\/revisions\/2889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/media\/2875"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}