DEV Community

Thiago Bertuzzi 👨🏻‍💻
Thiago Bertuzzi 👨🏻‍💻

Posted on

10 Dicas Basicas de Arquitetura de Código : 4 - Overengineering

Bertuzzi no PC

Fala galera,

tudo beleza?

Dando continuidade a serie de artigos sobre arquitetura (se não viu a parte 3 clique aqui), é muito comum encontramos patterns, arquiteturas complexas, soluções mirabolantes e pessoas vendendo cursos de "microservice First" quando estamos procurando a melhor solução para nossos projetos.

Porem pior do que não saber como fazer é fazer em excesso e encher a arquitetura/aplicação de complexidade desnecessaria e isso é conhecido como Overengineering/Superengenharia!

bertuzzi montado

Overengineering ou Superengenharia consiste em criar arquiteturas, sistemas ou soluções que ultrapassam os requisitos necessários, resultando em uma complexidade desnecessária, custos elevados e uma eficiência reduzida. Embora a inovação (e as vezes pró atividade) seja fundamental para avanços tecnológicos, o overengineering pode ter consequências graves que superam seus potenciais benefícios.

1. La se vai o Orçamento, custos elevados:

Um dos problemas mais evidentes do overengineering é o custo adicional que ele nos tras. Ao adicionar recursos e funcionalidades complexas além do necessário, os custos de desenvolvimento, produção e manutenção podem aumentar consideravelmente. Investir recursos financeiros em aspectos que não agregam valor real ao produto final pode ser prejudicial para a saúde financeira de uma empresa ou projeto.

Um bom exemplo é contratar serviços desnecessarios, componentes mirabolantes, diversos serviços de Cloud e etc. Outro cenario são diversas horas desnecessarias em um cronograma que gera custo x hora de profissionais.

2. Vamos usar aquele Framework/Modelo que é legal , complexidade Desnecessária:

À medida que um projeto é sobrecarregado com recursos excessivos, sua complexidade aumenta. Isso torna a compreensão do sistema mais difícil, tanto para os desenvolvedores que precisam mantê-lo quanto para os usuários que o utiliza. A complexidade desnecessária pode resultar em dificuldades de resolução de problemas, tornando a identificação de erros e falhas uma tarefa mais complicada e demorada.

Um exemplo classico, fazer um projeto microservices só porque ta no hype ou porque te disseram que é melhor sem considerar se você precisa de tamanha complexidade.

3. E agora quem fez isso ? Dificuldades de Manutenção:

Sistemas com complexidade desnecesaria podem se tornar verdadeiros problemas para os desenvolvedores que precisam fazer atualizações ou correções. A manutenção se torna uma tarefa dificil e geralmente com grandes chances de erros, especialmente quando há falta de documentação adequada e padrões claros de desenvolvimento. A longo prazo, a falta de facilidade na manutenção pode levar a sistemas obsoletos e incompatíveis com novas tecnologias .

4. Muito daora! Mas quando você me entrega? Atrasos no Tempo de Desenvolvimento:

Enquanto os Arquitetos/Desenvolvedores se esforçam para criar um sistema (com complexidade desnecessaria) sofisticado, pode haver um aumento significativo no tempo de desenvolvimento. O foco em detalhes não essenciais pode atrasar a entrega do projeto , o que pode ser prejudicial em setores onde a rapidez é fundamental para o sucesso e para seus clientes.

5. Precisamos realizar uma integração nova e agora? Dificuldades na Integração:

Com o aumento de complexidade desnecessaria, a integração com outros sistemas pode se tornar um verdadeiro desafio. A falta de interoperabilidade com soluções existentes pode resultar em incompatibilidades e dificuldades na troca de dados entre diferentes sistemas, o que, por sua vez, pode prejudicar a eficiência operacional de toda a organização.

6.Arquitetura complexa, mas o sistema faz o que? Falta de Foco no Usuário:

Você pode ter um sistema com uma complexidade gigante (que na cabeça de muitos é um sistema bom) , porem se ele não atende o que foi pedido el não serve para nada. Ao priorizar a adição de recursos avançados, pode-se negligenciar as necessidades básicas e a usabilidade do produto para os clientes. Isso pode resultar em uma experiência do usuário desfavorável e, em última instância, levar à rejeição do produto pelo cliente ou mercado.

Como dizem no Master Chefe : As vezes menos é mais!

O overengineering pode levar a uma série de problemas que afetam negativamente a viabilidade e a sustentabilidade de um projeto ou organização. É essencial encontrar um equilíbrio entre funcionalidade e simplicidade, garantindo que os recursos adicionados agreguem valor real ao produto final e atendam às necessidades reais dos usuários. Ao evitar esses problemas as empresas podem otimizar seus processos, economizar recursos e oferecer soluções mais eficientes e melhores.

Espero ter ajudado!

Aquele abraço!

Top comments (0)