DevOps: Os benefícios da implementação

Introdução

Principais benefícios que uma companhia geralmente espera e encontra na adoção da cultura:

Releases mais rápidos e baratos

Como os releases serão frequentes, as entregas acabam sendo pequenas. Entregas pequenas trazem o benefício de aumentar a velocidade no ciclo de desenvolvimento (entregando sempre)

Suporte operacional melhorado com ajustes rápidos

Caso haja alguma falha durante a entrega, o impacto é menor pois a quantidade de modificações é pequena, assim como o rollback é rápido.

Melhor time to market (TTM)

O software será entregue muito mais cedo, quando ainda for um MVP. Os clientes serão integrados como parte do processo de desenvolvimento, trazendo insights e feedbacks para o time. Permitindo assim que haja uma velocidade maior de lançamento no mercado.

Produtos de qualidade superior

Como foi falado antes, falhar cedo impede que defeitos sejam entregues em produção

Assim como:

  • Menor volume de defeitos no produto como um todo;
  • Aumento na frequência de novas features e releases;
  • Processos de desenvolvimento apropriados nos times, incluindo automação.

Agora que entendemos o POR QUE, vamos ao COMO

Continuous releases (integration, delivery, deployment)

Geralmente segue uma abordagem de versionamento de código (por meio do Git) utilizando branches específicas para cada ambiente.

Continuous integration

Execução automática dos testes unitários, integrados e também de qualidade de código na branch, para garantir que não houve quebra de funcionamento do pedaço modificado do código.

Continuous delivery

Empacotamento do software que está testado e aprovado, para deixar ele em algum lugar que seja possível fazer um deploy posteriormente. Exemplos são libs entregues em repositórios para ser integradas no código durante o próximo update e deploy de código

Continuous deployment

Após conseguir completar todos os passos anteriores, é possível fazer deploy automatizado direto nos ambientes, quando o time estiver com mais confiança em relação às ferramentas que testam, assim como com a questão de assumir riscos e entender que existe a possibilidade de falhar em ambientes de teste, sem preocupações.

Configuration (e/ou Infrastructure) as code

Para que seja possível testar o software com assertividade, e entender que ele irá transitar entre os ambientes sem mudar de comportamento, é de extrema importância que as configurações sejam também código. Isso permite que as configurações sejam também versionadas, acompanhando o código. Garantindo também uma uniformidade entre os ambientes, que possibilita:

  • Redução nos custos de manutenção, tendo um ponto único para olhar e entender o funcionamento do sistema;
  • Facilidade para recriar a infraestrutura, caso seja necessário mover tudo para outro lugar, isso pode acontecer com poucas interações manuais;
  • Permite que haja code review da infraestrutura e das configurações, que por consequência traz uma cultura de colaboração no desenvolvimento, compartilhamento do conhecimento e aumenta a democratização da infra;
  • Documentação como código, ajudando novos membros do time a terem um warm up mais rápido.

Esses pontos foram bem estressados pelo time da Heroku, e deram origem ao famoso paper: The Twelve-Factor App. Uma leitura muito boa para a explicação dos benefícios sobre gerência de configuração.

Monitoramento e self-healing

Ao fim de todo o processo de entrega, o software deverá estar sendo monitorado, para que não seja necessário esperar um report externo de falhas, garantindo que as ações sejam pró-ativas e não reativas.

Garantir que o monitoramento esteja maduro, também nos permite automatizar a parte de reação aos alertas, criando um sistema de self-healing em que ações (scripts) são executados para corrigir possíveis falhas conhecidas na infraestrutura. Permitindo assim que todos possam dormir tranquilamente de noite, sem ter que ficar preocupado com o plantão tocar e ter que ler documentação de madrugada. (Se você já teve experiência com isso, sabe com certeza o quanto é ruim).

Escalando assim apenas os casos que forem extremas exceções (erros não conhecidos/esperados) no processo para o plantonista atuar, garantindo uma maior saúde na operação.

Automação de processos

Todo o processo que estiver causando Muda é alvo de automação, para que as pessoas possam trabalhar com mais agilidade. Bons exemplos de processos que costumam ser automatizados são:

  • Deployment;
  • Self-healing (resiliência do sistema em resposta às anomalias);
  • Renovação de Certificados;
  • Execução de testes (unitários, de integração, funcionais, etc);
  • Monitoramento (com auto-discovery);
  • Governança de usuários;

DevOps toolchain

Uma combinação de ferramentas para facilitar a manutenção e operação do sistema, seguindo o seguinte fluxo:

Ciclo de desenvolvimento utilizando DevOps

Obs.: Qualquer semelhança com o PDCA é mera certeza.

  • Plan: Fase de planejamento do projeto, em que são coletados os feedbacks para levantamento de requisitos, e criação do backlog;
  • Create: Criação de um entregável (para validar uma hipótese), como um MVP;
  • Verify: Passar o entregável para a fase de testes;
  • Package: Empacotar o entregável (build) para conseguir colocar ele em algum ambiente de testes;
  • Release: Fazer o deployment do entregável empacotado;
  • Configure: Realizar a configuração do entregável no ambiente de testes, tentando chegar o mais próximo possível do twelve-factor app.
  • Monitor: Após fazer o deployment no ambiente, acompanhar as métricas de negócio e infraestrutura, para garantir que está tudo funcionando conforme o esperado.

Conclusão

Durante a implementação dessas técnicas é possível observar melhoras no processo de desenvolvimento, os ganhos mais notáveis são:

  • Melhoria no engajamento do time;
  • Compartilhamento de conhecimento;
  • Redução de bottlenecks;
  • Mais tempo livre para realizar trabalho que realmente importa (agrega valor para a experiência do usuário ou gera impacto);
  • Maior confiança ao entregar software.
Matheus Cunha
Matheus Cunha
Engenheiro de Sistemas e Mágico

Apenas um amante de tecnologia empoderando empresas com computação “high-tech” para ajudar na inovação (:

comments powered by Disqus