KISS, YAGNI, DRY – três princípios que todo desenvolvedor deveria conhecer!
Tags: braziliandevs, programming, productivity, design
Published: 2022-10-06 13:05:00

KISS: Mantenha-o simples, estúpido.
(Keep it simple, stupid).

YAGNI:Você não vai precisar disso.
(you aren’t gonna need it)

DRY:Não se repita.
(don’t repeat yourself)

são alguns dos mais poderosos princípios de design de produtos digitais. Eles estabelecem as bases para as melhores práticas(nem todos acreditam nisso) que os desenvolv´edores usam para criar produtos melhores todos os dias. Explicaremos cada um desses princípios, incluindo a explicação de por que eles são elementos importantes de um processo de desenvolvimento confiável.

## O que é o princípio KISS?(pessoalmente prefiro minimalismo)

De acordo com o princípio KISS, a chave para construir um produto de sucesso é a simplicidade. O método KISS aplica-se ao design e desenvolvimento de produtos digitais, mas também é amplamente utilizado em outras áreas, como gestão ou engenharia.

Na verdade, foi observado pela primeira vez na Marinha dos EUA em 1960. E a ideia de que geralmente é mais eficaz manter as coisas simples do que complexas é muito mais antiga. Provavelmente é seguro dizer que o minimalismo não tem um pai ou mãe fundadores, então vamos usar esta citação de Leonardo da Vinci como exemplo: Simplicidade é a sofisticação máxima.

KISS é pop, é usado como fórmula útil em diversas áreas como o desenvolvimento de software, a animação, a engenharia no geral e no planejamento estratégico e táctico. Também é aplicado na Literatura, na Música e nas Artes em geral.

## Vantagens do princípio KISS

No contexto de desenvolvimento de produtos digitais, o princípio de manter a **simplicidade e a estupidez** tem um enorme impacto no sucesso geral do produto:

1. Os usuários não querem perder tempo. Eles esperam uma experiência sem atritos com fluxos de usuário diretos e intuitivos, nomenclatura sem jargões e resultados rápidos.

2. Uma estrutura de software mais simples torna os testes, incluindo também os automatizados, mais fáceis e eficazes.

3. A complexidade reduzida da base de código torna a manutenção e a integração de novos membros da equipe no meio do projeto mais fácil e rápida.

Toda a complexidade desnecessária seja descartada.

## Como vou me beneficiar do KISS

* Você será capaz de resolver mais problemas, mais rápido.
* Você será capaz de produzir código para resolver problemas complexos em menos linhas de código.
* Você será capaz de produzir código de maior qualidade.
* Você será capaz de construir sistemas maiores, mais fáceis de manter.
* Sua base de código será mais flexível, mais fácil de estender, modificar ou refatorar quando novos requisitos chegarem
* Você será capaz de alcançar mais do que jamais imaginou.
* Você poderá trabalhar em grandes grupos de desenvolvimento e grandes projetos, pois todo o código é estúpido e simples. 


## O que é YAGNI?

O princípio **você não vai precisar**(YAGNI) vem da Extreme Programming. Ela exige que os desenvolvedores de software trabalhem nas funcionalidades quando elas são realmente necessárias, não quando supõem ou preveem que algo pode ser útil no futuro. O princípio YAGNI também é importante na implementação do Agile, pois o framework afirma que a equipe de desenvolvimento deve se concentrar apenas na iteração atual para entregar o escopo acordado no prazo.

## Por que usar o princípio YAGNI no desenvolvimento de software?

O principal objetivo do princípio YAGNI é evitar gastar tempo e dinheiro com engenharia excessiva de coisas que você acha que precisará mais tarde. Porque no final, geralmente acontece que você não precisa disso, ou que o que você precisa é diferente do que você esperava. 
Isso pode parecer um princípio tolo e simplista mas ele ocorre com muita frequência.

O principal benefício de usar o YAGNI é um processo de desenvolvimento de produto com custo otimizado devido a:

1. Melhor desempenho do desenvolvedor: A equipe se concentra em entregar os requisitos atuais de forma eficaz. Eles não gastam tempo e esforço em suposições.

2. Base de código mais flexível: você não precisa encontrar maneiras de usar soluções abaixo do ideal que já havia desenvolvido antes de ter uma visão completa.

YAGNI não é código inflexivel! Você deve sim criar código flexivel. 


## O que é DRY?

DRY significa não se repita e recomenda reduzir a repetição de padrões de software. 

Ao eliminar redundâncias no processo e na lógica, os engenheiros reduzem a dívida técnica e melhoram a capacidade de manutenção do código - ambos fatores de custo importantes, especialmente a longo prazo. O que é importante, DRY deve ser aplicado em todo o sistema, incluindo não apenas na base de código, mas também em testes e documentação.

O princípio DRY afirma que cada pedaço de conhecimento deve ter uma representação única, inequívoca e autoritária dentro de um sistema (a citação vem do livro “The Pragmatic Programmer” escrito por Andrew Hunt e David Thomas). Requer que os programadores usem abstração para remover características, a fim de poder reutilizar um elemento em diferentes partes da aplicação.

## Como o princípio DRY beneficia os produtos?

O princípio DRY garante que qualquer modificação de um único elemento de um sistema não requeira uma mudança em outros elementos **logicamente não relacionados**. Portanto, é uma maneira eficaz de agilizar o processo de desenvolvimento. Além disso, os elementos logicamente relacionados mudam de maneira previsível e uniforme, o que os mantém sincronizados.

A duplicação de conhecimento é sempre uma violação do princípio DRY.
A duplicação de código não viola necessariamente o princípio DRY.

## Observações sobre DRY: 
https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction

https://daviddawson.me/philosophy/development-by-slogan-with-dry-part-2-the-tower-of-coupling/

https://haacked.com/archive/2005/09/19/avoid_premature_generalization.aspx/


## Como KISS, YAGNI e DRY ajudam você a criar produtos melhores

KISS, YAGNI e DRY são poderosos sozinhos, mas melhores juntos. Ao aplicá-los em seu processo de desenvolvimento de produtos:

* Obtem um produto com uma melhor experiência do usuário.
* Aumenta a eficiência da equipe de desenvolvimento a curto e longo prazo.

* Cria uma base de código simples, sustentável e flexível.

* Evita código legado sempre que possível.

* Otimiza o custo de desenvolvimento de novos recursos e manutenção do sistema.

* Permite que seus desenvolvedores melhorem suas formas de trabalho e comunicação, o que, no final das contas, aumentará a qualidade do produto e a satisfação dos funcionários.

Esses princípios de design de produto são conjuntos de diretrizes que se mostraram eficazes ao longo dos anos. Eles são amplamente conhecidos entre desenvolvedores experientes, arquitetos de soluções e designers de produtos, mas, por algum motivo, raramente chegam aos tomadores de decisões de negócios. E essa é uma oportunidade perdida.

Como você pode ver, no final, os benefícios do KISS, YAGNI e DRY estão fortemente ligados ao sucesso geral do produto não apenas no desenvolvimento dele. 





fontes: 
https://people.apache.org/~fhanik/kiss.html
https://www.macoratti.net/15/12/net_yagni1.htm
https://blog.matheuscastiglioni.com.br/yagni/
https://dev.to/suspir0n/yagni-voce-nao-vai-precisar-disso-1kcj
https://www.plutora.com/blog/understanding-the-dry-dont-repeat-yourself-principle
https://thevaluable.dev/dry-principle-cost-benefit-example/
https://henriquesd.medium.com/dry-kiss-yagni-principles-1ce09d9c601f