Princípios da Entrega de Software - Escola da Programação
Conheça quais são os princípios que nos ajudam a direcionar os esforços em busca de um processo de entrega contínua mais eficiente e eficaz.
Quando falamos em entrega de contínua (em inglês, Continuous Delivery), para cada um de nós pode representar um processo diferente. Entretanto, há alguns princípios da entrega de software que deveriam formar a base de qualquer processo de entrega.
Leitura Recomendada: Entrega Contínua: Como Entregar Software de Forma Rápida e Confiável – Jez Humble, David Farley
"Entrega Contínua é uma disciplina de desenvolvimento na qual software é construído de tal maneira que o mesmo pode ser colocado em produção a qualquer momento."
Seja buscando a eficiência ou a qualidade, construir um ambiente de entrega automatizado se traduz em redução de custos. Portanto, deve ser uma diretriz da equipe envolvida no desenvolvimento da aplicação a sua realização.
1º Princípio: Crie confiabilidade e repetitividade da entrega
Se a cada nova versão as pessoas ficam apreensivas se a aplicação irá retornar funcional ou não, algo está errado. Sendo assim, times de desenvolvimento precisam gerar confiabilidade nas entregas de versões.
Se a cada nova versão há um esforço enorme para que o software seja implantado em produção, algo está errado. Logo, é preciso automatizar tudo o que for possível do processo.
Agora, vamos pensar um modelo de produção de software bem simples: idealizar, desenvolver, testar, entregar/instalar. Desse, derivam-se outros tantos mais complexos que, igualmente, ainda são processos repetitivos.
Portanto, não há motivos para que não se tenha um processo automatizado e confiável.
2º Princípio: Automatize quase tudo
Muitos times de desenvolvedores deixam a automatização de lado até que ela se torne realmente imprescindível.
Inicialmente, parece mais fácil e melhor fazer de forma manual. Um erro enorme, talvez causado porque automatizar é uma operação na maioria das vez bastante trabalhosa.
Entretanto, usando um processo de melhoria contínua desde o início do ciclo de vida de um projeto, pode ser uma revolução. Pois gargalos são mais visíveis e, portanto, conseguimos atuar neles facilmente.
Nosso pipeline de implantação deve ser automatizado, isso é um pré-requisito. Visto que, quanto menos ações humanas no processo, mais rápido e menos suscetível a erros ele será.
3º Princípio: Utilize um sistema de versionamento
Esse, para mim, não é apenas um dos princípios da entrega de software, mas do desenvolvimento como um todo.
É assustador se deparar com times que não possuem controle de versão no seu dia a dia de trabalho (acredite, infelizmente, isso existe).
O processo de entrega contínua envolve diversas ferramentas, configurações, documentações, scripts, bibliotecas e assim por diante. Para nos ajudar a manter tudo sob controle, devemos utilizar de mecanismos de versionamento.
Imagine o caso onde o ambiente que a aplicação estava, "morreu". E, que precisamos refazer todo o processo de preparação, configuração e instalação do zero.
Qual versão do banco é adequada a versão da aplicação? Qual configuração é do ambiente de homologação e qual o de produção? Quais sistemas externos devem ser preparados? Qual hardware/infra necessário?
Percebe o problema? Sem um sistema de apoio, em alguns casos, se torna impossível retomar sua aplicação em tempo hábil.
4º Princípio: Faça menos e com mais frequência
Se uma tarefa é desafiadora, seja por ser complexa demais, seja por ser grande demais, divida-a em tarefas menores. O mesmo vale para a integração e entrega do software.
Acumular vários commits e/ou funcionalidades gerando uma versão maior é pior do que realizar várias entregas menores, mesmo quando o processo de entrega não é automatizado.
Isso porque, se algo der errado, provavelmente o impacto para descobrir o que houve e também o trabalho para voltar a versão serão maiores.
"Release toggle é uma técnica útil e muitas equipes usam. No entanto, deve ser sua última escolha quando você está lidando com a publicação de funcionalidades em produção. Sua primeira escolha deve ser quebrar a funcionalidade para que possa introduzir com segurança partes da funcionalidade no produto."
Pequenas mudanças são mais gerenciáveis. É claro que existem casos e casos, mas no geral é mais uma questão do time elaborar estratégias que permitam entregas menores (feature toggle e afins são uma opção).
Assim como as aplicações que desenvolvemos evoluem ao longo do tempo, nossos processos também devem evoluir.
Cerimônias como retrospectivas e feedbacks são bem vindas e muitas vezes necessárias para a progressão.
E, seguindo esses princípios de entrega de software, espero que consiga vislumbrar oportunidades de melhorias para o seu trabalho bem como do seu time e/ou empresa.