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!

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more