Conheça quais são os 12 fatores no desenvolvimento

Publicado em:

Os 12 fatores são um conjunto de boas práticas para desenvolvimento de software que pode ser implementado com qualquer combinação de tecnologias (linguagem, banco de dados, cache, etc…). Os 12 fatores tem como objetivo melhorar a agilidade das entregas, possibilitando entrega continua, permitindo máxima portabilidade entre ambientes em nuvem além de reduzir tempo e custo para os novos desenvolvedores se integrarem no projeto. São boas práticas agnósticas de linguagem e ambiente.

Os 12 fatores:

I – Código fonte

Ter um repositório de código-fonte como: Git ou SVN para garantir a rastreabilidade das mudanças e possibilitar que vários desenvolvedores trabalhem no mesmo projeto contribuindo com o desenvolvimento.

II – Dependências

Qualquer projeto pode ter dependências de bibliotecas feitas por terceiros, essas dependências precisam ser explicitamente declaradas e isoladas. Cada linguagem possui seu gerenciador de dependências exemplos: Nuget para .NET, NPM Javascript, Composer PHP, etc.

III – Config

As informações de configuração variam entre ambientes (desenvolvimento, homologação, produção, etc). As informações podem ser: credenciais de acesso, senhas, valores por deploy como hostnames por ambiente, etc. Algumas vezes esses dados são armazenados em constantes no código-fonte, isso é uma violação dos 12 fatores que tem como requisito a separação do conf do código. Outra abordagem é ter arquivos de configurações (já é melhor do que usar constantes), mas se por algum motivo esse arquivo for incluso no repositório de código, o arquivo pode acabar em vários lugares com diferentes informações se tornando difícil de ser gerenciado.
O cenário ideal sugerido é utilizar variáveis de ambiente, que dificilmente serão adicionadoa no repositório, são fáceis de alterar e são agnóstico de ambiente e linguagem.

IV – Serviços de apoio

São serviços externos utilizados pela aplicação, exemplos: banco de dados, serviços de cache, gerenciadores de fila, armazenamentos, etc.
Esses serviços devem ser tratados como anexos e devem ser anexados ou desanexados sem necessidade alterar código.

V – Build, release, run

Esse fator tem como objetivo estabelecer de forma clara os processos: Compilar: (gerenciar as dependências – fator 2 e gerar o executável); Release: combinar o build com o config (fator III); Run: disponibilizar a aplicação no ambiente de execução.

VI – Processos

Executar a aplicação como um ou mais processos sem compartilhar nada (também conhecido como stateless). Qualquer informação precisa ser salva com um serviço de apoio (fator IV).

VII – Portas

A aplicação deve ser independente e expor seus serviços no ambiente que é executada através de uma porta que pode variar de acordo com o ambiente.

VIII – Concorrência

O oitavo fator afirma que a aplicação deve ser capaz de escalar através de processos concorrentes.

IX – Descartabilidade

Todos os processos de uma aplicação que segue os 12 fatores podem ser iniciados ou parados a qualquer momento. Iniciando ou encerrando os processos rapidamente e de forma confiável, liberando os recursos corretamente.

X – Paridade entre os ambientes

Os ambientes de desenvolvimento, homologação e produção e outros que podem existir, devem ser o mais semelhante possível. Ferramentas como Docker e Vagrant permitem que os desenvolvedores tenham ambientes idênticos ao de produção de forma fácil.

XI – Logs

A aplicação deve ser capaz de gerar logs em um formato adequado para monitoramento.

XII – Processos administrativos

O último fator é referente àquelas atividades que não dizem respeito a aplicação em si e são pontuais, exemplo: uma migração de banco de dados, um código especifico que será executado apenas uma vez, etc. Esses processos devem ser executados de forma isolada da aplicação e estão sujeitos a todos os fatores.

Conclusão

Facilmente podemos perceber como seguir essa metodologia traz benefícios durante o ciclo de desenvolvimento, esses 12 fatores são apenas um ponto de partida, ainda existem outros pontos que devemos levar em consideração como segurança ou tolerância a falhas.