DEV Community

Cover image for Separando o Deploy do Release - Como Entregar Valor com Segurança e Flexibilidade
Felipe Freitas
Felipe Freitas

Posted on

Separando o Deploy do Release - Como Entregar Valor com Segurança e Flexibilidade

Ainda é comum encontrar equipes de desenvolvimento que associam cada deploy em produção diretamente a uma nova release do produto. Embora esses dois conceitos estejam interligados, tratá-los como sinônimos pode limitar a flexibilidade e aumentar os riscos. Ao separar o deploy da release, as equipes ganham mais controle sobre o ciclo de vida do software, possibilitando uma entrega mais segura e previsível. Estratégias como Feature Flags, Canary Releases e Blue-Green Deployment permitem realizar deploys frequentes sem expor os usuários a mudanças imediatas, facilitando a experimentação, a mitigação de riscos e a entrega contínua de valor. Para as empresas, isso significa maior agilidade para responder ao mercado, melhor experiência do usuário e um caminho mais seguro para inovação.


Deploy vs. Release

Antes de mais nada, é importante definir o que entendemos por deploy e release:

  • Deploy: Refere-se ao processo de transferir código para um ambiente seja o de desenvolvimento, homologação ou produção. O código pode incluir novas funcionalidades, correções de bugs, ou até mesmo pequenos ajustes que não são perceptíveis para o usuário final.
  • Release: É o momento em que uma nova versão de uma aplicação é disponibilizada ao usuário final. Ela pode englobar um conjunto de novas funcionalidades ou uma mudança significativa no sistema.

Logo, um deploy em produção pode ocorrer sem que os usuários percebam uma nova "release", pois os mecanismos de ativação dessas funcionalidades podem ser controlados de diferentes formas.

Para empresas que adotam práticas de alta performance, o deploy frequente é uma realidade. De acordo com o State of DevOps Report 2023, equipes de elite realizam deploys sob demanda, o que pode significar vários deploys por dia, dependendo da necessidade. Essas equipes têm a capacidade de fazer mudanças em produção de forma frequente e segura.

Manter o código em produção antes de liberá-lo proporciona às equipes de desenvolvimento tempo para testes adicionais e ajustes sem impactar diretamente os usuários. Empresas que implementam essa prática reportam uma menor taxa de falhas por deploy, aumentando a previsibilidade dos lançamentos e a confiança no processo de entrega.


Estratégias para Manter Deploy e Release Separados

Existem várias estratégias que permitem separar o deploy do release, oferecendo benefícios tanto técnicos quanto de negócio. Vamos explorar as principais técnicas: Feature Flags, Blue-Green Deployment, Canary Releases, Rolling Deployment e A/B Testing.

Image description

1. Feature Flags

As Feature Flags permitem que novas funcionalidades sejam ativadas ou desativadas dinamicamente, sem a necessidade de novos deploys. Isso significa que o código está presente, mas desativado, aguardando o momento ideal para ser liberado. A prática de Feature Flags não apenas melhora a flexibilidade, como também aumenta a segurança.

Benefícios das Feature Flags:

  • Ativação dinâmica de funcionalidades.
  • Facilidade para testes A/B.
  • Desativação rápida em caso de problemas.

2. Blue-Green Deployment

No Blue-Green Deployment, dois ambientes de produção são mantidos: Blue (ativo) e Green (inativo). O código é implantado no ambiente inativo (Green) e, quando pronto, o tráfego de produção é redirecionado para ele. Isso garante um processo de transição suave entre versões e evita interrupções.

Benefícios:

  • Zero downtime durante o lançamento.
  • Rollback rápido e seguro.

3. Canary Releases

No Canary Releases, apenas uma pequena porcentagem de usuários recebe as novas funcionalidades inicialmente. Isso permite que a equipe monitore o desempenho e identifique potenciais problemas antes de realizar um rollout completo.

Benefícios:

  • Testes em produção com risco minimizado.
  • Identificação precoce de problemas.

4. A/B Testing

O A/B Testing permite que diferentes versões de uma funcionalidade sejam testadas simultaneamente com subconjuntos de usuários, possibilitando que as equipes avaliem a eficácia de mudanças e ajustem funcionalidades antes do lançamento para todos os usuários.

Benefícios:

  • Tomada de decisões baseada em dados reais.
  • Melhoria contínua de funcionalidades. ### 5. Rolling Deployment

O Rolling Deployment é uma estratégia na qual a nova versão do sistema é implantada gradualmente, substituindo aos poucos as instâncias da versão antiga, até que todas as instâncias estejam executando a versão mais recente. Isso minimiza o impacto em produção, uma vez que sempre há instâncias ativas da versão anterior enquanto a nova versão está sendo implantada.

Benefícios:

  • Evita downtime, mantendo instâncias ativas durante o processo.
  • Permite rollback parcial em caso de problemas durante a implantação.
  • Reduz o risco de falhas em massa.

Impacto no Negócio e Produto

1. Lançamentos Mais Previsíveis e Menos Arriscados

A separação entre deploy e release permite que o lançamento de novas funcionalidades seja mais previsível, reduzindo os riscos de interrupções inesperadas para o usuário final. Empresas que adotam essa separação têm menos falhas em produção, o que impacta diretamente a confiança do cliente e a percepção de qualidade do produto. Essa previsibilidade ao lançar funcionalidades de forma suave e sem interrupções também influencia positivamente a taxa de satisfação dos clientes.

2. Agilidade para Reagir a Oportunidades de Mercado

Manter o código em produção antes de liberá-lo para todos os usuários oferece às empresas uma vantagem significativa na resposta rápida a mudanças de mercado, como novas regulamentações ou feedbacks de clientes. Essa prática permite ajustes imediatos sem a necessidade de longos ciclos de desenvolvimento e grandes releases, garantindo que as empresas estejam preparadas para capturar oportunidades com agilidade. Empresas que implementam Continuous Delivery (CD) podem responder a mudanças em tempo real com maior precisão e eficiência, permitindo que novas funcionalidades ou ajustes sejam implementados de maneira segura e incremental.

3. Decisões Baseadas em Dados

Técnicas como Feature Flags e A/B Testing permitem que decisões de produto sejam baseadas em dados reais pois permite que as empresas coletem dados valiosos sobre o comportamento do usuário antes de liberar uma funcionalidade para todos, o que resulta em funcionalidades mais adequadas ao comportamento dos usuários. Decisões orientadas por dados levam a mais confiança, proatividade e otimização de custos. O uso de dados para monitorar e medir a eficácia de um deploy permite ajustes precisos no momento de uma release, melhorando a experiência do usuário e minimizando riscos

4. Redução de Custos com Suporte e Manutenção

Uma das maiores vantagens das práticas de deploy ágil e entrega contínua é a redução significativa de custos com suporte e manutenção. Ao implantar código em pequenos incrementos e com controle rigoroso sobre a liberação de funcionalidades, as empresas conseguem evitar grandes mudanças disruptivas, o que diminui a necessidade de intervenções de emergência no suporte. Como o código é testado em produção em pequenos lotes, os incidentes são detectados e resolvidos antes que atinjam uma parcela significativa de usuários. Isso diminui o volume de problemas de suporte que requerem solução imediata, resultando em economia de tempo e dinheiro.


Integração com Metodologias Ágeis

No contexto de metodologias ágeis, a separação entre deploy e release permite uma entrega contínua de valor ao longo das sprints. Em vez de aguardar até o fim de cada sprint para liberar todas as funcionalidades de uma vez, as equipes podem realizar deploys frequentes, mantendo novas funcionalidades em "standby" até que estejam maduras para serem ativadas. Essa abordagem garante maior flexibilidade na priorização de tarefas e no planejamento de lançamentos, possibilitando ajustes com base em feedbacks e minimizando o risco de grandes interrupções ou retrabalhos.

Essa prática não só facilita a validação incremental de funcionalidades ao longo do ciclo de desenvolvimento, como também protege a estabilidade do ambiente de produção. Ao implantar funcionalidades de maneira controlada, as equipes podem testar e verificar partes do código em produção sem afetar diretamente os usuários, mantendo a consistência da entrega de valor sem comprometer a qualidade ou a segurança do sistema.


Conclusão

A separação entre deploy e release não só otimiza a eficiência técnica, como também gera impactos positivos para o negócio. Técnicas como Feature Flags, Canary Releases, Blue-Green Deployment e A/B Testing são essenciais para garantir que o valor seja entregue aos clientes de forma segura e controlada, permitindo que as equipes alinhem suas entregas com objetivos estratégicos. Além de melhorar a experiência do usuário, essas práticas aumentam a flexibilidade e mitigam o risco de interrupções, contribuindo para um processo mais ágil e responsivo.


Referências

  1. State of DevOps Report 2023. Disponível em: https://services.google.com/fh/files/misc/2023_final_report_sodr.pdf
  2. How Being a Data-Driven Company Leads to Better Outcomes_. Harvard Business Review. Disponível em: https://hbr.org/2020/02/how-being-a-data-driven-company-leads-to-better-outcomes
  3. Feature Toggles (aka Feature Flags). Hodgson, Pete. Disponível em: https://martinfowler.com/articles/feature-toggles.html

Top comments (0)