Over Engineering

Luiz Schons
4 min readAug 3, 2023

--

https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.pullrequest.com%2Fblog%2Fsigns-what-youre-building-is-over-engineered%2F&psig=AOvVaw2qk1D8vwuEaFaR5x_hYbLi&ust=1691106877141000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCJiexpuWv4ADFQAAAAAdAAAAABAJ

O que é Over Engineering?

Over Engineering é um termo utilizado para descrever um projeto que é mais complexo do que o necessário para resolver o problema que ele se propõe a resolver. O termo é considerado pejorativo, implicando que o projeto em questão é o resultado de pensamento excessivo e desnecessário aplicado a um problema simples.

Podemos dizer que o Over Engineering é o oposto do KISS (Keep It Simple, Stupid), que é um princípio de design que defende que a maioria dos sistemas funcionam melhor se forem mantidos simples do que se forem tornados complexos; portanto, a simplicidade deve ser um objetivo chave e complexidade desnecessária deve ser evitada.

Por que evitar o Over Engineering?

A questão é que o Over Engineering é algo que pode acontecer com qualquer um, e é algo que pode ser muito prejudicial para o projeto. O Over Engineering pode ser um problema para o projeto por vários motivos, como por exemplo:

  • Custo: O desenvolvedor pode acabar gastando mais do que o necessário para desenvolver o projeto, e isso pode acabar aumentando o custo do projeto.
  • Tempo: Aumenta o tempo de desenvolvimento do projeto, pois o desenvolvedor pode acabar gastando mais tempo do que o necessário para desenvolver o projeto.
  • Complexidade: O Over Engineering pode aumentar a complexidade do projeto
  • Manutenção: O Over Engineering pode fazer a equipe de manutenção do projeto gastar mais tempo do que o necessário para manter o projeto.
  • Escalabilidade: O Over Engineering muitas vezes faz com que o projeto não seja escalável ou que seja difícil de escalar.

Como evitar o Over Engineering?

Para evitar o Over Engineering, é importante que o desenvolvedor tenha em mente que o projeto deve ser simples e que o desenvolvedor deve evitar adicionar funcionalidades desnecessárias ao projeto. O desenvolvedor deve sempre se perguntar se a funcionalidade que ele está adicionando ao projeto é realmente necessária ou se ela é apenas uma funcionalidade que ele gostaria de ter no projeto.

As vezes nem sempre é sobre funcionalidades, mas sim sobre a forma como o desenvolvedor está desenvolvendo o projeto. Por exemplo, o desenvolvedor pode estar utilizando um design pattern que não é necessário para o projeto, ou o desenvolvedor pode estar utilizando uma arquitetura que não é necessária para o projeto.

Exemplos de Over Engineering

Exemplo 1

Foi solicitado um sistema para gerenciar os usuários de uma empresa. O sistema deve permitir que o usuário faça login, cadastre novos usuários, edite usuários existentes e exclua usuários existentes, um CRUD básico.

O desenvolvedor que está desenvolvendo o sistema decide utilizar o framework hype para desenvolver o sistema, pois ele acha que o sistema precisa de um framework para ser desenvolvido.

Porém, o desenvolvedor não sabe utilizar o framework hype, e ele acaba gastando muito tempo tentando aprender a utilizar esse framework.

Nesse meio tempo, o desenvolvedor poderia ter desenvolvido o sistema utilizando uma linguagem de programação que ele sabe utilizar, e o sistema já estaria pronto.

Exemplo 2

Um novo projeto foi iniciado, e o desenvolvedor que está desenvolvendo o projeto decide utilizar a arquitetura hexagonal para desenvolver o projeto, pois ele acha a arquitetura hexagonal muito interessante.

Mas o problema é que somente ele sabe utilizar a arquitetura hexagonal, e ele não tem tempo para ensinar a equipe como utilizar a arquitetura hexagonal.

Nesse meio tempo, a equipe poderia ter desenvolvido o projeto utilizando uma arquitetura que todos sabem utilizar, e o projeto já estaria pronto.

Conclusão

Existem vários motivos para evitar o Over Engineering, e é importante que o desenvolvedor tenha em mente que o projeto deve ser simples e que o desenvolvedor deve evitar adicionar funcionalidades desnecessárias ao projeto.

Claro, o desenvolvedor pode adicionar funcionalidades extras ao projeto, mas é importante que o desenvolvedor se pergunte se a funcionalidade que ele está adicionando ao projeto é realmente necessária ou se ela é apenas uma funcionalidade que ele gostaria de ter no projeto.

Todos esses exemplos são baseados em casos de produção, é muito importante saber que para fins de estudo, é importante que o desenvolva projetos utilizando várias ferramentas e recursos, pois isso ajuda o desenvolvedor a aprender novas tecnologias e arquiteturas.

E é importante que o desenvolvedor saiba que o Over Engineering é algo que pode acontecer com qualquer um, não é algo que acontece apenas com desenvolvedores iniciantes ou com desenvolvedores que não sabem o que estão fazendo. Todos nós podemos acabar fazendo isso em algum momento, e é importante que o desenvolvedor saiba como evitar e como lidar com o Over Engineering.

--

--