Implementando Feature Flags e Rollouts Graduais em Produção
Feature flags são uma poderosa técnica que permite controlar a disponibilidade de funcionalidades em tempo real. Vamos explorar como implementá-las de forma efetiva em seu ambiente de produção.
O que são Feature Flags?
Feature flags (ou feature toggles) são mecanismos que permitem:
- Ativar/desativar funcionalidades sem deploy
- Testar features com usuários específicos
- Fazer rollbacks rápidos em caso de problemas
- Implementar rollouts graduais
Tipos de Feature Flags
1. Por Ambiente
interface EnvironmentFlag {
name: string;
environments: {
development: boolean;
staging: boolean;
production: boolean;
};
default: boolean;
}
2. Por Usuário
interface UserFlag {
name: string;
type: 'percentage' | 'specific' | 'custom';
rules: {
percentage?: number;
userIds?: string[];
customRule?: (user: User) => boolean;
};
}
Implementação Prática
1. Estrutura Base
class FeatureFlagManager {
private flags: Map<string, FeatureFlag>;
constructor() {
this.flags = new Map();
}
isEnabled(flagName: string, context: FlagContext): boolean {
const flag = this.flags.get(flagName);
if (!flag) return false;
return flag.evaluate(context);
}
async updateFlag(flagName: string, config: FlagConfig): Promise<void> {
// Implementação da atualização
}
}
2. Integração com Backend
// Exemplo com Express
app.use(async (req, res, next) => {
const context = {
userId: req.user?.id,
environment: process.env.NODE_ENV,
timestamp: Date.now()
};
req.featureFlags = await featureFlagManager.getFlags(context);
next();
});
Rollouts Graduais
1. Estratégias de Rollout
graph TD
A[Feature Pronta] -->|5%| B[Usuários Beta]
B -->|25%| C[Usuários Ativos]
C -->|50%| D[Maioria dos Usuários]
D -->|100%| E[Todos os Usuários]
2. Monitoramento
interface RolloutMetrics {
flagName: string;
totalUsers: number;
enabledUsers: number;
errorRate: number;
performanceMetrics: {
responseTime: number;
errorCount: number;
};
}
Ferramentas e Serviços
1. Self-hosted
- 🏠 Unleash
- Open source
- Controle total
- API REST
- Dashboard
- 🏢 Flagsmith
- SDKs para várias linguagens
- A/B testing
- Analytics
2. Cloud-based
- ☁️ LaunchDarkly
- Gerenciamento centralizado
- Analytics avançados
- Integrações prontas
- 🌐 Split.io
- Experimentação
- Segmentação avançada
- Monitoramento em tempo real
Boas Práticas
1. Nomenclatura
// Exemplos de nomes claros
const FLAGS = {
NEW_CHECKOUT_FLOW: 'new-checkout-flow-v2',
DARK_MODE_BETA: 'dark-mode-beta-test',
PAYMENT_GATEWAY_MIGRATION: 'payment-gateway-migration'
};
2. Documentação
# Feature Flag: new-checkout-flow-v2
## Descrição
Implementação da nova versão do fluxo de checkout.
## Estados
- Development: ✅ Enabled
- Staging: ✅ Enabled
- Production: 🟡 Gradual (25%)
## Dependências
- Payment Gateway v2
- Address Validation Service
## Rollout Plan
1. 5% - Usuários beta
2. 25% - Usuários ativos
3. 50% - Maioria
4. 100% - Todos
Monitoramento e Alertas
1. Métricas Essenciais
interface FlagMetrics {
name: string;
enabledCount: number;
totalRequests: number;
errorRate: number;
performanceImpact: {
p50: number;
p95: number;
p99: number;
};
}
2. Alertas
alerts:
- name: high_error_rate
condition: error_rate > 1%
action: disable_flag
- name: performance_degradation
condition: p95 > 500ms
action: notify_team
Casos de Uso
1. Rollout Seguro
sequenceDiagram
participant Dev as Desenvolvedor
participant Flag as Feature Flag
participant Monitor as Monitoramento
participant Alert as Sistema de Alertas
Dev->>Flag: Ativa flag (5%)
Flag->>Monitor: Coleta métricas
Monitor->>Alert: Verifica thresholds
Alert->>Dev: Notifica se necessário
2. Rollback Rápido
async function handleError(flagName: string, error: Error) {
// Desativa flag imediatamente
await featureFlagManager.disable(flagName);
// Notifica equipe
await notifyTeam({
type: 'FLAG_ERROR',
flagName,
error: error.message,
timestamp: new Date()
});
// Registra métricas
await metrics.recordRollback(flagName);
}
Conclusão
Feature flags são essenciais para:
- Deploy seguro
- Testes em produção
- Rollbacks rápidos
- Experimentos controlados
- Monitoramento efetivo
Próximos Passos
- Escolha sua ferramenta
- Defina padrões de nomenclatura
- Implemente monitoramento
- Crie documentação
- Treine o time
Quer compartilhar sua experiência com feature flags? Deixe um comentário abaixo!
