SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)inmetrics
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkGiuseppe Lopes
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDDIsmael
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programmingceife
 
Os desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-diaOs desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-diaLeonardo "Hackin" Freire
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Letticia Nicoli
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012Igor Abade
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedoresHenrique Fernandes Gonçalves
 

Mais procurados (18)

Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
SETIC Scrum & XP
SETIC Scrum & XPSETIC Scrum & XP
SETIC Scrum & XP
 
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)
Hackathon Inmetrics e Fiap: Construindo um MVP (Minimum Viable Product)
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDD
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Os desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-diaOs desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-dia
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
 
Engenharia Ágil
Engenharia ÁgilEngenharia Ágil
Engenharia Ágil
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 
BDD
BDDBDD
BDD
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
[Interagil 2019] recuperando a essencia da agilidade para desenvolvedores
 

Semelhante a Over engineering

Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLetticia Nicoli
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Softwareguest2f8cba
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLucas Teles
 
Implementing lean software development
Implementing lean software developmentImplementing lean software development
Implementing lean software developmentLuiz Faias Junior
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Cristiano Schwening
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGNeubio Ferreira
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Fábio Nogueira de Lucena
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code StandardToni Albuquerque
 
Palestra Scrum Gathering 2017
Palestra Scrum Gathering 2017Palestra Scrum Gathering 2017
Palestra Scrum Gathering 2017Caroline Wirtti
 
Fisl 16 - Proteja sua aplicação de você mesmo
Fisl 16 - Proteja sua aplicação de você mesmoFisl 16 - Proteja sua aplicação de você mesmo
Fisl 16 - Proteja sua aplicação de você mesmoGustavo Neves
 
Domain Driven Design - Uma introdução
Domain Driven Design - Uma introduçãoDomain Driven Design - Uma introdução
Domain Driven Design - Uma introduçãoDaniel Baptista Dias
 

Semelhante a Over engineering (20)

Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Software
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
Implementing lean software development
Implementing lean software developmentImplementing lean software development
Implementing lean software development
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code Standard
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Palestra Scrum Gathering 2017
Palestra Scrum Gathering 2017Palestra Scrum Gathering 2017
Palestra Scrum Gathering 2017
 
Extreme programming (xp)
 Extreme programming   (xp) Extreme programming   (xp)
Extreme programming (xp)
 
Seu código fede e você nem sabia
Seu código fede e você nem sabiaSeu código fede e você nem sabia
Seu código fede e você nem sabia
 
Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Fisl 16 - Proteja sua aplicação de você mesmo
Fisl 16 - Proteja sua aplicação de você mesmoFisl 16 - Proteja sua aplicação de você mesmo
Fisl 16 - Proteja sua aplicação de você mesmo
 
Domain Driven Design - Uma introdução
Domain Driven Design - Uma introduçãoDomain Driven Design - Uma introdução
Domain Driven Design - Uma introdução
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 

Mais de Daniel Archer Marques Cramer (11)

Filas e mensageria com RabbitMQ
Filas e mensageria com RabbitMQFilas e mensageria com RabbitMQ
Filas e mensageria com RabbitMQ
 
Monitorando aplicações com Prometheus
Monitorando aplicações com PrometheusMonitorando aplicações com Prometheus
Monitorando aplicações com Prometheus
 
Frameworks e microframeworks php - conexão kinghost
Frameworks e microframeworks php - conexão kinghostFrameworks e microframeworks php - conexão kinghost
Frameworks e microframeworks php - conexão kinghost
 
Case Kinghost + Elasticsearch
Case Kinghost + ElasticsearchCase Kinghost + Elasticsearch
Case Kinghost + Elasticsearch
 
Aplicando SOLID com PHP7
Aplicando SOLID com PHP7Aplicando SOLID com PHP7
Aplicando SOLID com PHP7
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
Php on the cloud
Php on the cloudPhp on the cloud
Php on the cloud
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
PHP Além da universidade
PHP Além da universidadePHP Além da universidade
PHP Além da universidade
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 

Over engineering