10 Dicas Basicas de Arquitetura de Código : 4 - Overengineering
Tags: programming, architecture, overengineering, beginners
Published: 2023-07-20 18:40:58


![Bertuzzi no PC](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7q2imspdvshblj88z6cq.png)

Fala galera,

tudo beleza?

Dando continuidade a serie de artigos sobre arquitetura (se não viu a parte 3 [clique aqui](https://dev.to/tbertuzzi/10-dicas-basicas-de-arquitetura-de-codigo-3-cuidado-com-o-que-voce-armazena-290o)), é 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9444039smet67o8ksj5.png)

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!