1 of 20
2 of 20
3 of 20
4 of 20
5 of 20
6 of 20
7 of 20
8 of 20
9 of 20
10 of 20
11 of 20
12 of 20
13 of 20
14 of 20
15 of 20
16 of 20
17 of 20
18 of 20
19 of 20
20 of 20

site

doc

blog

success stories

Blog

Modernização de apps: recolocar, refatorar, rearquitetar, reconstruir e substituir

Modernização de apps: recolocar, refatorar, rearquitetar, reconstruir e substituir

Qualquer pessoa que já tenha adiado a instalação de um sistema operacional para sua versão mais recente pode falar dos problemas técnicos que surgem quando sistemas mais antigos não são atualizados. Continuar a usar tecnologia ultrapassada pode levar a um mundo de problemas, de questões de segurança a baixo desempenho.

Como resultado, a necessidade de modernizar é clara para muitas empresas. No entanto, o processo de modernização é menos direto, com estratégias amplas que vão desde reencaixar (tradução livre para “lifting and shifting”) uma aplicação para uma nova infraestrutura até substituir ou reescrever a aplicação antiga do zero.

Este post discute os desafios e benefícios da modernização, apresenta cinco estratégias de implementação e explica como elaborar um plano de modernização adequadamente para sua empresa.

O que é modernização?

Modernização de aplicações é o processo de atualizar ou reconstruir aplicações legadas para alcançar tecnologias e tendências modernas mais eficientemente. Isso pode incluir:

  • mover uma aplicação para o cloud ou para o edge;
  • decompôr uma aplicação monolítica em micro serviços;
  • usar novos métodos de implementação como containers e serverless;
  • automatizar tarefas operacionais; e
  • expor sistemas via APIs.

Desafios e benefícios da modernização

O Gartner define uma aplicação legada como “um sistema de informação que pode ser baseado em tecnologias ultrapassadas, mas é crítico para as operações do dia a dia”. Essa é uma das maiores razões de sistemas mais antigos continuarem na ativa: renovar um sistema essencial, por definição, é arriscado. Aplicações críticas têm pouca – ou nenhuma – flexibilidade de downtime (tempo de inatividade) e pode haver laços complexos com as funcionalidades de outras operações, de modo que sejam difíceis de mudar.

Os desafios da modernização incluem:

  • falta de flexibilidade de downtime;
  • interdependências com outros sistemas;
  • custos de novas ferramentas e talentos; e
  • dificuldade de aprendizado de novos sistemas.

No entanto, a natureza crítica de aplicações legadas é justamente o que torna tão importante modernizá-las. Uma análise recente de gastos federais estima que o governo dos EUA, por exemplo, dedica 80% do total de seu orçamento de TI a custos operacionais e manutenção, incluindo o aumento de custos de manutenção de sistemas legados, que trazem “problemas de eficiência, cibersegurança e risco de missão” que “podem dificultar a capacidade das agências de cumprir requisitos estatutários e políticos essenciais de cibersegurança”. Em outras palavras, quanto mais tempo um sistema desatualizado permanece em funcionamento, menos seguro e confiável ele se torna, inibindo a sua capacidade de realizar trabalhos de missão crítica.

Embora o custo de modernização seja potencialmente significativo, o custo de manutenção de sistemas legados só aumenta com o tempo, graças ao uso ineficiente de recursos, tecnologias proprietárias e dívidas técnicas. Um relatório da Stripe observou que cada desenvolvedor fica, em média, 30 horas por semana lidando com código sujo e dívidas técnicas, resultando em uma perda anual de R$465 bilhões ao redor do mundo.

Além disso, falhas na atualização podem prejudicar o crescimento da empresa devido a questões de desempenho, lentidão para lançar novas features e inabilidade de atrair programadores talentosos que preferem usar linguagens e frameworks mais novos. Por fim, investir em modernização pode proporcionar ganhos em longo prazo que reduzem custos de curto prazo por meio de:

  • redução de riscos de segurança;
  • implementação mais rápida;
  • aumento de desempenho e confiabilidade;
  • melhor aproveitamento de recursos; e
  • atração de novos talentos.

Estratégias para Modernização

Assim como qualquer outro processo importante, o melhor jeito de começar a modernização é fazer um plano. Estratégias de modernização podem ser categorizadas mais ou menos baseadas na extensão em que elementos legados são mantidos ou substituídos.

Apesar de grupos e definições variarem um pouco, este artigo vai usar as definições do Gartner e enfoca cinco estratégias diferentes: recolocar, refatorar, rearquitetar, reconstruir e substituir.

Recolocação (Rehost)

Referido, às vezes, como “lift and shift”, recolocar envolve mover um app “como está” de um ambiente legado, como servidores on-premises, para infraestruturas mais novas, como o cloud. Exigindo pouca ou nenhuma alteração no código-fonte, essa estratégia é minimamente disruptiva e pode ser feita rapidamente com custo mínimo de tempo de desenvolvimento. Além disso, pode oferecer alguns benefícios do cloud computing, como escalabilidade sem a necessidade de instalar servidores físicos ou consolidar infraestrutura on-premise.

No entanto, já que aplicações monolíticas não são otimizadas para cloud, os benefícios de rehosting podem ser limitados ou até negados em longo prazo. Algumas aplicações monolíticas podem ser complexas demais para recolocar, enquanto outras consomem tantos recursos que mudá-los para a infraestrutura cloud pode elevar os custos à medida que a empresa cresce.

Prós:

  • inatividade mínima;
  • transição rápida e acessível;
  • consolida infraestrutura in loco; e
  • mais fácil de escalar.

Contras:

  • mantém dívida técnica;
  • não é otimizado para o cloud; e
  • pode aumentar custos de longo prazo.

Refatoração (Refactor)

Refactoring é o processo de reestruturar o código, mantendo o comportamento externo da aplicação. De acordo com Martin Fowler, cujo livro Refatoração: Aperfeiçoando o Design de Códigos Existentes ajudou a definir o termo, essas pequenas mudanças no código facilitam a manutenção e podem prepará-lo para mudanças ainda maiores.

Fowler menciona que “Quando preciso adicionar uma feature a um código-base, olho para o que já existe e considero se está estruturado para simplificar mudanças. Caso não esteja, refatoro o código já existente para facilitar essa nova adição.”

Com refatoração, cada mudança individual, por si só, pode fazer pouca diferença, mas muitas mudanças podem ter um impacto cumulativo enorme, facilitando a leitura do código e reduzindo débito técnico que uma aplicação carrega ao receber novas funcionalidades.

No entanto, já que a refatoração não altera o comportamento de uma aplicação, esta não corrigirá desempenhos decorrentes do uso de uma estrutura monolítica ou uma infraestrutura mais antiga.

Prós:

  • reduz débito técnico;
  • facilita implementação de mudanças;
  • baixo risco; e
  • baixo custo.

Contras:

  • mantém infraestrutura e arquitetura ultrapassadas.

Rearquiteturação (Re-architect)

Diferentemente de recolocar e refatorar, rearquitetar envolve mudanças razoavelmente intensas em uma aplicação. O Gartner define essa estratégia como “alterar materialmente o código para mudá-la para uma nova arquitetura de aplicação e explorar recursos novos e melhores”. Essas mudanças maiores podem implicar desmembrar uma aplicação monolítica em microsserviços ou mudá-las de um banco de dados relacional para NoSQL. Em ambos os casos, essas mudanças não servem apenas para deixar a aplicação compatível com cloud, mas tem suas próprias vantagens, como escalabilidade e confiabilidade.

Como resultado, a rearquitetura pode atender melhor às necessidades de empresas em um ponto de inflexão – em que precisam escalar rapidamente e implementar novas funcionalidades – do que refatoração ou recolocação. No entanto, esses benefícios vêm a certo preço. Pode ser difícil de desenvolver a reestruturação do código envolvido no processo, resultando em bugs e questões de compliance durante as mudanças.

Prós:

  • otimiza para o cloud;
  • melhora escalabilidade e agilidade; e
  • adiciona novas funcionalidades.

Contras:

  • custos potencialmente altos;
  • desenvolvimento difícil e demorado; e
  • mudanças podem gerar erros.

Reconstrução (Rebuild)

Das cinco estratégias discutidas neste artigo, a reconstrução é de longe o mais demorado e difícil de implementar. Reconstruir envolve uma revisão completa da aplicação, preservando apenas o escopo e especificações, enquanto o resto do sistema é reescrito do zero. No entanto, partir de sistemas estáveis para um que não pode ser testado com o tempo é uma proposta arriscada.

Assim, o The New Stack recomenda rodar um novo sistema em paralelo ao código antigo para garantir tempo de checar seu trabalho enquanto as mudanças são feitas, dando aos usuários a opção de aceitá-las no novo sistema. Isso minimiza os riscos da reconstrução, mas adiciona complexidade e custos a uma estratégia de modernização que já é difícil e dispendiosa.

Apesar dos desafios da reescrita, o preço pode valer a pena em certas circunstâncias. Um artigo de 2020 da CMSWire discutiu a reescrita como uma ferramenta para implementar mudanças quando “o código-fonte da arquitetura deixa de se alinhar com os dirigentes da empresa ou os atributos de qualidade”. Nesses casos, os componentes da aplicação são incapazes de atender às necessidades atuais da empresa. Portanto, reorganizar o código ou refatorá-lo a fim de eliminar dívidas técnicas agregam pouco valor aos negócios.

Prós:

  • customizar aplicação para atender às demandas da empresa;
  • eliminar sistemas e ferramentas desatualizados.

Contras:

  • alto custo;
  • alto risco;
  • dificuldade e lentidão de desenvolvimento; e
  • usuários devem se ajustar ao novo UI.

Substituição (Replace)

É possível que algumas aplicações tenham de ser completamente reescritas para que cumpram as metas de modernização da empresa, mas os desafios desse processo podem ser inviáveis em alguns casos. Uma estratégia que permite revisar uma aplicação legada de maneira mais rápida e fácil é a substituição.

Também conhecida como “reaquisição”, a prática consiste em substituir uma aplicação antiga por um software comercial que serve melhor às necessidades da empresa. Isso pode promover escalabilidade e custos mais baixos enquanto oferece uma solução já testada e fácil de usar, com atualizações disponibilizadas pelo fornecedor.

No entanto, nem sempre haverá um SaaS para todas as suas necessidades, e empresas que adquirem SaaS podem limitar suas possibilidades de personalizar software e correm o risco de ficarem presas ao fornecedor.

Prós:

  • supervisão administrativa mínima;
  • atualizações são geridas pelo fornecedor; e
  • implementação fácil e rápida.

Contras:

  • aprisionamento tecnológico;
  • customização limitada; e
  • controle limitado.

Idealizando uma estratégia

A jornada pela modernização de cada empresa pode ser diferente, porém quase toda estratégia de modernização envolve pensar em dois fatores: as metas da empresa e a tecnologia necessária para atingi-las. Avaliar o que move o negócio pode ajudar a entender o que precisa mudar; avaliar a tecnologia dá uma visão clara do que pode (e deve) acontecer.

Considerações comerciais

Para algumas empresas, as necessidades comerciais da modernização já estão mais do que claras, da necessidade de cortar gastos infraestruturais aos déficits de desempenho que causam perdas de usuários. Outros podem conhecer os benefícios da modernização, mas ainda não sabem o que priorizar.

Nesse caso, a New Relic observa que “um jeito de começar é identificar as aplicações críticas mais prioritárias para sua empresa e explorar como elas poderiam se beneficiar de melhor desempenho, escalabilidade e confiabilidade”. Considerar os impactos de métricas técnicas, como latência, nas métricas comerciais, como conversão de anúncios e vendas, pode ajudar as empresas a estabelecer metas específicas e benchmark de modernização.

Considerações técnicas

De uma perspectiva técnica, empresas devem conduzir uma avaliação profunda em seu portfólio para entender os desafios de modernizar aplicações específicas. A Computerworld recomenda usar uma solução automatizada durante o processo de modernização para avaliar os seguintes pontos da aplicação:

  • viabilidade com arquitetura moderna;
  • estabilidade;
  • UI;
  • redundância de códigos;
  • bancos de dados;
  • interfaces externas;
  • fluxos lógicos; e
  • regras de negócio.

Conclusão

Com o advento do cloud computing, do 5G e de outras mudanças na tecnologia, a modernização é cada vez mais necessária para sua empresa se manter no atual cenário digital. No entanto, a miríade de considerações envolvidas é tanta que o processo de modernização é difícil para muitas empresas. Ter um parceiro para te ajudar com modernização pode ajudar a aliviar algumas dessas dificuldades.

Com a Azion, as empresas podem potencializar as vantagens que a modernização oferece, independentemente da estratégia que escolherem:

  • Recolocar: Execute aplicações no edge com uma plataforma que oferece o que há de melhor em velocidade e confiabilidade.
  • Refatorar: Utilize uma abordagem preparada para o futuro ao executar microsserviços e aplicações serverless no edge.
  • Rearquitetar e Reconstruir: Migre suavemente para uma nova arquitetura em tempo real, que possibilita a reescrita de recursos muito específicos do seu código e, consequentemente, reduz a necessidade de mudanças drásticas.
  • Substituir: Elimine o aprisionamento tecnológico com uma plataforma que suporta os padrões da internet e fornece total extensibilidade e controle.

Nós reunimos os benefícios do desempenho de Edge Computing com os benefícios de um modelo serverless – isso simplifica o processo de modernização ao gerenciarmos os recursos e a segurança de back-end. Como resultado, as empresas obtêm o melhor retorno possível assim que investem na modernização, pois gastam menos tempo na transição e, por sua vez, focam mais na oferta de novas e melhores experiências ao usuário.