Over Engineering
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.