{"id":21,"date":"2021-11-16T10:40:00","date_gmt":"2021-11-16T13:40:00","guid":{"rendered":"https:\/\/dcoder.io\/blog\/sistema-legado-reescrever-ou-refatorar\/"},"modified":"2026-07-21T22:25:04","modified_gmt":"2026-07-22T01:25:04","slug":"sistema-legado-reescrever-ou-refatorar","status":"publish","type":"post","link":"https:\/\/dcoder.io\/blog\/sistema-legado-reescrever-ou-refatorar\/","title":{"rendered":"Sistema legado: reescrever do zero ou refatorar por partes?"},"content":{"rendered":"<p><strong>Na maioria dos casos, substitua por partes.<\/strong> A reescrita do zero s\u00f3 se justifica quando a plataforma base est\u00e1 sem suporte de seguran\u00e7a ou quando o modelo de dados original impede o neg\u00f3cio de crescer. Fora isso, voc\u00ea vai gastar dois anos para reconstruir funcionalidades que j\u00e1 funcionavam.<\/p>\n<p>O pedido chega sempre com a mesma frase: &#8220;esse sistema \u00e9 uma bagun\u00e7a, \u00e9 melhor refazer do zero&#8221;. \u00c0s vezes \u00e9 verdade. Na maioria das vezes \u00e9 a rea\u00e7\u00e3o natural de quem est\u00e1 lidando com c\u00f3digo que n\u00e3o escreveu, e a reescrita completa \u00e9 a decis\u00e3o mais cara que se pode tomar sobre um sistema em produ\u00e7\u00e3o.<\/p>\n<h2>O que a reescrita realmente custa<\/h2>\n<p>O or\u00e7amento sempre considera reconstruir o que se v\u00ea. Nunca considera os cinco anos de corre\u00e7\u00f5es invis\u00edveis embutidas no sistema atual.<\/p>\n<p>Aquele <code>if<\/code> esquisito no c\u00e1lculo do frete n\u00e3o \u00e9 c\u00f3digo ruim. \u00c9 a exce\u00e7\u00e3o do contrato com aquele cliente grande, resolvida numa sexta-feira de 2019. O sistema novo, limpo e bem arquitetado, n\u00e3o vai ter esse <code>if<\/code>. Vai ter o mesmo problema que aquele cliente reclamou em 2019.<\/p>\n<p>E tem o detalhe que mata o cronograma: durante a reescrita, o sistema antigo n\u00e3o pode parar de evoluir. O neg\u00f3cio continua pedindo coisas. Ou voc\u00ea congela o produto por dois anos, o que nenhuma empresa aguenta, ou implementa tudo duas vezes.<\/p>\n<h2>Quando a reescrita realmente se justifica<\/h2>\n<p>Existem casos leg\u00edtimos, e eles s\u00e3o reconhec\u00edveis:<\/p>\n<ul>\n<li><strong>A plataforma perdeu suporte de seguran\u00e7a.<\/strong> Uma vers\u00e3o de linguagem ou framework sem corre\u00e7\u00f5es de vulnerabilidade n\u00e3o \u00e9 d\u00edvida t\u00e9cnica. \u00c9 risco jur\u00eddico e operacional.<\/li>\n<li><strong>O modelo de dados impede o neg\u00f3cio.<\/strong> O sistema foi feito para uma empresa e uma moeda, e agora s\u00e3o cinco filiais em tr\u00eas pa\u00edses. Se toda nova exig\u00eancia esbarra na mesma limita\u00e7\u00e3o estrutural, o problema \u00e9 a funda\u00e7\u00e3o.<\/li>\n<li><strong>Ningu\u00e9m consegue mais mexer.<\/strong> N\u00e3o porque \u00e9 feio, mas porque n\u00e3o existe quem conhe\u00e7a a tecnologia no mercado e n\u00e3o existe teste algum que d\u00ea seguran\u00e7a para alterar.<\/li>\n<\/ul>\n<p>Repare que &#8220;o c\u00f3digo \u00e9 feio&#8221; e &#8220;n\u00e3o gostamos dessa linguagem&#8221; n\u00e3o est\u00e3o na lista.<\/p>\n<h2>A alternativa: estrangular o legado aos poucos<\/h2>\n<p>A abordagem que funciona \u00e9 conhecida como strangler fig, em refer\u00eancia \u00e0 figueira que cresce em volta da \u00e1rvore hospedeira at\u00e9 substitu\u00ed-la por completo. Na pr\u00e1tica:<\/p>\n<ol>\n<li>Coloque um roteador na frente do sistema antigo. Tudo continua funcionando como antes.<\/li>\n<li>Escolha uma funcionalidade com fronteira clara e valor alto. Reconstrua s\u00f3 ela, no ambiente novo.<\/li>\n<li>Desvie no roteador as requisi\u00e7\u00f5es dessa funcionalidade para o sistema novo. Se der problema, desvie de volta em um minuto.<\/li>\n<li>Repita. A cada ciclo, o legado encolhe.<\/li>\n<\/ol>\n<p>A vantagem aqui nem \u00e9 t\u00e9cnica, \u00e9 pol\u00edtica. O projeto entrega valor vis\u00edvel todo m\u00eas em vez de pedir dois anos de f\u00e9. Isso muda como a diretoria enxerga o investimento e, na pr\u00e1tica, \u00e9 o que faz o projeto chegar ao fim.<\/p>\n<h2>Antes de escolher qualquer caminho, coloque o legado sob rede<\/h2>\n<p>Independentemente da decis\u00e3o, fa\u00e7a isto primeiro, porque serve para as duas estrat\u00e9gias:<\/p>\n<ul>\n<li><strong>Backup restaurado com sucesso.<\/strong> N\u00e3o &#8220;backup configurado&#8221;. Restaurado, em outro ambiente, com data documentada.<\/li>\n<li><strong>Testes nos fluxos que geram dinheiro.<\/strong> N\u00e3o busque cobertura ampla. Cubra os cinco caminhos que n\u00e3o podem quebrar.<\/li>\n<li><strong>Registro e monitoramento.<\/strong> Voc\u00ea precisa saber o que o sistema est\u00e1 fazendo antes de mud\u00e1-lo. Muita gente descobre nessa fase que metade das telas nunca \u00e9 usada, o que reduz o escopo da reescrita pela metade.<\/li>\n<li><strong>Ambiente de testes que seja c\u00f3pia fiel.<\/strong> Sem isso, toda altera\u00e7\u00e3o \u00e9 aposta.<\/li>\n<\/ul>\n<p>Esse trabalho leva de tr\u00eas a seis semanas e com frequ\u00eancia muda a conclus\u00e3o. J\u00e1 vi v\u00e1rios sistemas que &#8220;precisavam ser refeitos&#8221; virarem sistemas perfeitamente aceit\u00e1veis depois de ganharem monitoramento, \u00edndices e a remo\u00e7\u00e3o do que ningu\u00e9m usava.<\/p>\n<h2>A pergunta que decide<\/h2>\n<p>\u00c9 uma s\u00f3: o sistema atual impede a empresa de fazer algo que ela precisa fazer para crescer?<\/p>\n<p>Se a resposta \u00e9 n\u00e3o, ele \u00e9 chato, \u00e9 lento, \u00e9 feio, mas o neg\u00f3cio funciona, ent\u00e3o o caminho \u00e9 melhorar por partes. Se a resposta \u00e9 sim e voc\u00ea consegue nomear exatamente o que est\u00e1 bloqueado, existe uma justificativa concreta. E mesmo assim, substituir por partes costuma chegar l\u00e1 antes.<\/p>\n<hr>\n<p>A DCODER faz auditoria de sistemas legados e moderniza\u00e7\u00e3o incremental, com o engenheiro respons\u00e1vel avaliando o c\u00f3digo antes de qualquer recomenda\u00e7\u00e3o. <a href=\"https:\/\/dcoder.io\/\" rel=\"noopener\">Fale com o est\u00fadio em dcoder.io<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A reescrita completa \u00e9 a decis\u00e3o mais cara que uma empresa toma sobre software e quase sempre \u00e9 tomada por motivo emocional. Como avaliar friamente e qual \u00e9 a alternativa que costuma funcionar.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[23,25,24],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-software-sob-medida","tag-legado","tag-modernizacao","tag-refatoracao"],"_links":{"self":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":1,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":39,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/39"}],"wp:attachment":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}