Conceitos em desenvolvimento que me ajudam a criar soluções melhores
Published: 2020-12-14 00:01:26

Desde que passei a trabalhar com desenvolvimento de fato, eu tenho sentido cada vez mais necessidade de tornar as minhas soluções mais simples, escaláveis, claras, descritivas e na busca por esses atributos eu acabei por encontrar alguns conceitos que sempre uso como base para criticar meu código e também para auxiliar outros desenvolvedores a criar as suas próprias soluções, sendo assim acredito que será extremamente benéfico para outras pessoas encontrar pelo menos as que acredito ser as mais importantes e é sobre isso que vamos falar neste artigo.

# Keep It Simple, Stupid (KISS Principle)
![kiss-principle](https://dev-to-uploads.s3.amazonaws.com/i/l9v28isvm96vlxyss062.jpg)
 
Como o próprio nome já diz devemos sempre manter o nosso código o mais simples quanto possível, pois sempre que injetamos complexidade desnecessária por não pensar no quanto esta mudança irá beneficiar o projeto e a equipe geramos custos e diminuímos a produtividade no projeto.

# YAGNI (You Aren't Gonna Need It)
![0*J1XMYJxyrvjGskm5](https://dev-to-uploads.s3.amazonaws.com/i/d9h0cjd1ixuclqvdgru6.jpg)

Sempre que eu desejava criar uma solução eu já pensava em botar em prática tudo o que vinha aprendendo quanto a arquitetura, pensava em criar uma API's com bancos de dados não relacionais e aplicar o design pattern mais maneiro que eu sabia no momento e às vezes tudo não se tratava de um simples script que já resolveria todo o problema. Porém, com o tempo eu fui entendendo que não precisamos de uma bazuca para matar um mosquito e que como já vimos no conceito anterior só iria gerar complexidade desnecessária e isso não é legal.

# BDD(Behavior Driven Development)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/hc21z32dqjcsps70abq6.png)

Ao criar uma solução eu entendia como funcionava e começava a trabalhar nela e com o tempo tinha que ir efetuando mudanças devido a um entendimento errado ou uma falha de comunicação, porém ao entender melhor este conceito vi que existia formas de ser mais assertivo ao entender uma demanda/solução e existia formas de ser mais claro dos contextos em que uma feature foi criada, sendo assim hoje em dia este é um conceito que uso para declarar melhor as histórias que participo, para tornar mais claro o contexto em que cada teste está inserido e tem sido muito maneiro trabalhar focado no comportamento daquilo que estou tentando criar.

# SOLID
![1*DOFGaQhleVE8B77txLhM8A](https://dev-to-uploads.s3.amazonaws.com/i/mo647y9crhrftzzwv970.jpeg)
 
Talvez este seja o que ando considerando o mais importante, dado que são 5 princípios para um melhor desenvolvimento em orientação de objetos, porém sempre esbarro em algo que pensa com base em um destes princípios ou que parece se inspirar neles, tenho vontade de fazer um artigo aqui para fixar melhor estes conceitos, porém o que eu mais gosto é o princípio da responsabilidade única, pois utilizo isso tanto para tornar meus códigos mais claros e descritivos quanto para identificar uma possível melhoria em como os serviços se comunicam e isto é realmente maneiro.

# Considerações

Existem outros conceitos que eu gosto também como o TDD mas preferi trazer estes pois acredito auxiliar demais quem está, assim como eu tentando se aprofundar em desenvolvimento de software, porém eu posso ter entendido incorretamente estes conceitos ou talvez existem outros que você pode julgar melhor, sinta-se livre para me apresentar conceitos novos, me corrigir ou para comentar o que estiver afim, desde já obrigado por ler até aqui!
![11](https://dev-to-uploads.s3.amazonaws.com/i/5991methcmv4ojwolws2.gif)