OverEngineering
a linha entre o sucesso e o fracasso
by Daniel Archer
Daniel Archer
Zend Certified PHP 5.5
Análise de Sistemas
Desenvolvedor há 7 anos
Participante PHPRS
#orgulhodeserking
English Speaker
Conférencier Français
Arqueiro nas horas vagas
(duh!)
“Poucas coisas são garantidas que crescerão
eternamente:
● Distância entre as estrelas
● Entropia no universo visível
● As malditas Regras de negócio
“ by Subhas Dandapni
O que é OverEngineering?
Algumas imagens falam mais do que palavras
“Unnecessarily complicated”
by Collins English Dictionary
Imagine um novo projeto...
Imaginou?...
Agora pense em poder usar:
● todas as técnicas que aprendeu
● configurar todos os eventos já no início
● prever os futuros gatilhos que o cliente
solicitou no meio do projeto passado
“Premature optimization is the root of all
evil.” by Donald Knuth
Foca no Problema!
Alguns erros comuns… que já passamos
ainda
● Lógicas de negócio, reusáveis
○ Ex: uma grande classe de CRUD BaseModel contendo
diversas lógicas e fluxos distintos.
○ Prefira isolar Actions do que agrupá-las em grandes
“BaseActions”
● Classes Genéricas
○ Ex: Tentar abstrair todo pedaço de código
○ Às vezes é melhor duplicar do que abstrair de forma errada
● Qualidade Excessiva
○ Ex: DesignPatterns e tipagem excessiva por todo o código
○ Procure olhar o software como um todo
● Not-Invented-Here
○ Ex: Códigos criados dentro de Casa, reescrever bibliotecas
como CMS, template, cache, config e etc...
○ Reuse, Contribua, Reconsidere
○ Proudly-found-elsewhere
● ...lidade
○ Ex: Escalabilidade, Configurabilidade, Mantenabilidade
○ Muitas vezes adicionamos uma camada extra de
complexidade, apenas para: talvez ser usada no futuro... 1x.
Escrever software não é fácil
mas não deve ser um tormento...
A dica de ouro é:
“Escreva código para ser deletado”.
Mas por quê?
Toda linha de código vem com um preço:
manutenção!
Não crie dependências desnecessárias.
“It's not a problem until it's a problem.”
4 Dicas para melhorar a simplicidade do seu
código
1. Não escreva código
Toda linha de código que não tem um motivo
para estar ali, é tempo gasto.
[Assim Não]
2. Copie e Cole
Não tem problema copiar algumas poucas
vezes, para não adicionar complexidade.
3. Escreva um monte de lixo
Às vezes, precisamos criar a ideia completa e
funcional para depois, sim, entender e
compreender o quê foi feito
4. Quebre seu código em pedaços
Uma vez feito, separe o quê realmente é
lógica de negócio e isole o necessário.
A dura realidade é que:
O cliente é mais importante que o
desenvolvedor
Saímos do modelo cascata, para o modelo
ágil, justamente para entregar softwares
funcionais em menos tempo de acordo com a
necessidade do cliente.
Funcionalidade é mais importante que
flexibilidade
O segredo está em balancear técnicas de
flexibilidade e entrega de código funcional
Continue programando… todos os dias
K.
I.
S.
S.
K.eep
I.
S.
S.
K.eep
I.t
S.
S.
K.eep
I.t
S.imple
S.
K.eep
I.t
S.imple
S.tudent
kingho.st/daniel-archer
Palestra sobre Frameworks e Microframeworks
Bibliografias
1. https://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-d
elete-not-easy-to
2. http://productdesignmanagement.com/over-engineering/
3. https://www.vinta.com.br/blog/2017/case-against-over-engineering/
4. https://medium.com/@rdsubhas/10-modern-software-engineering-mistakes-bc67fb
ef4fc8
5. http://www.codesimplicity.com/post/what-is-overengineering/
6. http://www2.lsd.ufcg.edu.br/~nazareno/ensino/si1/16.OverEngineering.pdf
7. https://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/
8. https://www.martinfowler.com/articles/designDead.html

Over engineering