2. Quem sou eu?
Brunno dos Santos
- Locaweb
- Dev a mais de 7 anos
Onde me encontrar
- @squiter
- github.com/squiter
3. "Feature Toggles are a powerful technique, allowing
teams to modify system behavior without changing code."
Martin Fowler
https://martinfowler.com/articles/feature-toggles.html
4. Categorias
- Tempo de duração
- Quão dinâmica é a decisão
- Release Toggles
- Experiment Toggles
- Ops Toggles
- Permissioning Toggles
5. Release Toggles
Release Toggles permitem códigos incompletos e não testados
serem entregues em produção como códigos que podem nunca ser
ligados.
- Separam o Release do Deploy;
- Não vivem por muito tempo em produção;
- A decisão de Toggle normalmente é estática.
6. Experiment Toggles
Toggles utilizados para testes A/B onde cada usuário do
sistema é separado em grupos e cada grupo é enviado para um
caminho diferente.
- Permanecem ligados até colhermos estatisticamente todo o
resultado dos testes.
7. Ops Toggles
Usados para controlar aspectos operacionais do sistema.
- Features que não temos certeza do impacto na performance;
- Podem ser usados para desligar funcionalidades não vitais
para o sistema em algum caso não usual de sobrecarga.
8. Permissioning Toggles
Permitem mudar as features ou a experiência do produto para
certos usuários.
- Similar a Canary Release;
- Acesso a conteúdo Premium;
- Acesso a algum alfa/beta release;
- Testes em produção com clientes internos.
13. Toggle Server
- Aplicação Ruby on Rails centralizada
- Postgres
- API HTTP com uma única rota: "feature/:name/available"
- Alteração auditadas
Parâmetros necessários para validar disponibilidade:
- Nome da Feature;
- Credencial;
16. Exemplos de filtros
Com login do cliente:
- ^[a-mA-M]
- teste1|testeqa|teste_locaweb
- (?!login|outro_login)
Com probabilidade de acesso:
- ^[0-2][0-5]$
18. Como funciona o fluxo de releases?
1. Deploy do roteamento;
2. Deploy da nova feature;
3. Testes com usuários internos;
4. Abertura para 10% dos clientes;
5. Abertura para 50% dos clientes;
6. Abertura total da feature;
7. (em caso de refatoração) Remove código legado;
8. Remoção do roteamento.
19. Benefícios
- Código integrado em prod sem impacto para o cliente;
- Release suave de forma parcial;
- Releases desacoplados de deploys;
- Correções de bugs sem rollback;
- Facilidade de teste em produção com cliente interno;
- Flexibilidade de escolha para o critério do toggle;
Dark Lauch - Faz o deploy e roda o código dos dois caminhos para capturar metricas
Diferença entre Permissioning Toggles e Canary Release
Permissioning Toggles expõe a feature a usuários específicos
Canary Release expõe a feature a um grupo randômico de usuários
E o foco do Canary Release é liberar a feature completamente.
"This tecnique is similar in many ways to a Canary Release. The
distinction between the two is that a Canary Released feature is
exposed to a randomly selected cohort of users while a Permissioning
Toggle feature is exposed to a specific set of users."
Quando temos várias aplicações independentes podemos usar um arquivo de configuração por app;
Mas e quando dependemos da mesma decisão em várias apps?