Depois de consolidar observabilidade (logging, métricas, alertas), o desafio do Day 13 do #30DiasJava foi entregar controle de features sem deploys. O resultado é uma Feature Flags & Experimentation Platform que permite rollouts progressivos, testes A/B e kill switches instantâneos para qualquer microserviço Spring Boot.
🚩 What went live
- Feature flag SDK (
feature-flags-starter) com suporte a LaunchDarkly e Unleash (modo client-side e server-side). - Canary rollouts graduais por percentual de tráfego (ex.: 10% → 50% → 100%) com rollback automático via health checks.
- A/B testing framework com segmentação por usuário (
userId), tenant, país e atributos customizados. - Kill switches operacionais: desliga features instantaneamente via dashboard sem tocar no código.
- Feature analytics: dashboard mostra adoção, impacto em métricas (revenue, error rate) e recomendações de rollout.
💡 Why it matters
- Produtos lançam features com confiança: rollback em segundos se algo quebrar.
- Experimentação viabiliza decisões baseadas em dados — não opiniões.
- Devs reduzem branches longas: features ficam mergidas com flags
disabledaté o momento certo.
📚 Deep dive (+ code)
- Artigo completo: https://enouveau.io/blog/2025/11/13/feature-flags-experimentation.html
- Repositório: https://github.com/adelmonsouza/30DiasJava-Day13-FeatureFlags
- Projeto pessoal: Este é um projeto do desafio #30DiasJava, mantido independentemente para fins educacionais.
🧩 Implementation Notes
- Client-side evaluation: flags resolvidas no pod, sem latência extra por chamada externa.
- Server-side SDK: Spring Boot
@FeatureFlag("new-checkout")com fallback para default quando o serviço de flags está offline. - Targeting rules: YAML/JSON define segmentos (
beta-users,eu-region,tier=premium) e porcentagens. - Event tracking: cada avaliação de flag envia evento para analytics (LaunchDarkly insights ou Prometheus metrics).
- Integrations: Webhooks para Slack/Teams quando flags mudam de estado, e APIs REST para gerenciar flags via GitOps.
✅ Daily checklist
- SDK conectado ao serviço de flags (LaunchDarkly/Unleash) e health check
feature-flags.connected=true. - Rollouts graduais monitorados via dashboards (adoption rate, error rate delta).
- Kill switches testados em staging antes de produção.
Next episode → Day 14/30 — API Gateway & Rate Limiting