Pular para conteúdo

Processo de RFC

📢 Atualização: Foram criadas 16 RFCs em Draft cobrindo todos os aspectos do SDLC (Software Development Life Cycle). Todas aguardam discussão e aprovação nas reuniões quinzenais. Ver todas as RFCs →

Quando criar uma RFC

Uma RFC (Request for Comments) deve ser criada para:

  • ✅ Mudanças arquiteturais significativas
  • ✅ Adoção de novos serviços ou tecnologias
  • ✅ Mudanças em processos do time
  • ✅ Decisões que impactam múltiplos componentes ou times
  • ✅ Padrões de código ou convenções importantes
  • ✅ Mudanças em infraestrutura (novos serviços AWS, etc.)
  • ✅ Alterações no modelo de dados / schema do banco

Não precisa de RFC:

  • ❌ Bug fixes simples
  • ❌ Refatorações locais que não afetam API
  • ❌ Melhorias de performance pontuais
  • ❌ Atualizações de dependências

Fluxo Completo de RFC

1. Criar RFC (Status: Draft)

# Copiar template
cp docs/rfc/template.md docs/rfc/decisions/XXX-titulo-da-proposta.md

# Editar e preencher
# - Contexto e problema
# - Proposta de solução
# - Alternativas consideradas
# - Análise de impacto

Dicas ao escrever:

  • Seja claro e objetivo
  • Explique o porquê, não apenas o como
  • Documente todas as alternativas consideradas
  • Seja honesto sobre trade-offs e riscos
  • Use diagramas quando ajudar a explicar

2. Abrir Pull Request

git checkout -b rfc/XXX-titulo
git add docs/rfc/decisions/XXX-titulo-da-proposta.md
git commit -m "RFC-XXX: [Título da Proposta]"
git push origin rfc/XXX-titulo

No Pull Request:

  • Adicionar label rfc
  • Mencionar em qual reunião será apresentada
  • Marcar revisores relevantes
  • Adicionar link para a RFC na descrição

3. Status: Em Revisão

Antes da reunião:

  • Time pode revisar o conteudo e anotar as dúvidas para que no momento da reunião sejam sanadas.

Objetivo: Chegar na reunião com a RFC já revisada e comentários principais já endereçados.

4. Reunião RFC (Quinzenal)

Calendário

  • 🗓️ Reuniões toda 1ª e 3ª sexta-feira do mês
  • ⏰ Horário: [Definir horário fixo, ex: 14h-16h]
  • 📍 Local: Online
  • ⏱️ Tempo por RFC: 20-30 minutos

Agenda da Reunião

1. Apresentação (10 min)

O autor apresenta:

  • Contexto e problema a resolver
  • Solução proposta
  • Alternativas consideradas e por que foram descartadas
  • Trade-offs da decisão
  • Plano de implementação

2. Discussão Aberta (15 min)

Time participa:

  • Perguntas e esclarecimentos
  • Feedback técnico
  • Preocupações e riscos não considerados
  • Sugestões de melhorias
  • Compartilhamento de experiências relevantes

3. Decisão (5 min)

Time decide:

  • Aprovar: RFC está pronta para implementação
  • Rejeitar: Decisão não será seguida (com justificativa)
  • 🔄 Solicitar revisão: Precisa de ajustes antes de aprovar (volta para próxima reunião)

5. Pós-Reunião

Se Aprovada (✅)

  1. Atualizar RFC:
  2. Status → "Aprovada"
  3. Preencher seção "Decisão da Reunião"
  4. Adicionar feedback e ações próximos passos

  5. Merge do PR

  6. Criar issues/tasks para implementação

  7. Referenciar a RFC nas issues
  8. Atribuir responsáveis
  9. Definir prazos

  10. Comunicar decisão ao time

  11. Enviar email se necessário
  12. Atualizar documentação relacionada

Se Rejeitada (❌)

  1. Atualizar RFC:
  2. Status → "Rejeitada"
  3. Documentar justificativa da rejeição
  4. Explicar aprendizados

  5. Fechar PR (sem merge)

  6. Documentar aprendizados:

  7. O que não funcionaria?
  8. Que alternativas foram preferidas?
  9. Em que contexto esta decisão poderia ser revisitada?

Se Precisa Revisão (🔄)

  1. Atualizar RFC com feedback recebido

  2. Iterar na proposta:

  3. Endereçar preocupações levantadas
  4. Adicionar informações faltantes
  5. Revisar alternativas

  6. Agendar para próxima reunião

  7. Avisar no PR que foi atualizado
  8. Marcar para a próxima reunião quinzenal

6. Implementação (Para RFCs Aprovadas)

  • Seguir plano de implementação da RFC
  • Atualizar RFC se houver desvios significativos
  • Referenciar RFC nos PRs de implementação (Implements RFC-XXX)
  • Manter time informado sobre progresso

7. Revisão Pós-Implementação

Após 1-3 meses da implementação:

  • Avaliar se funcionou conforme esperado
  • Atualizar métricas de sucesso da RFC
  • Coletar feedback do time
  • Se não funcionou: marcar como "Deprecada" e criar nova RFC propondo alternativa

Níveis de RFC

Alto Impacto

Características:

  • Mudanças arquiteturais
  • Novas tecnologias/serviços
  • Impacto em múltiplos times
  • Alto custo de reversão

Requisitos:

  • Apresentação completa: 30 minutos
  • Aprovação de todo o time necessária
  • Revisão detalhada antes da reunião
  • Documentação extensiva de alternativas

Padrão

Características:

  • Padrões de código
  • Processos do time
  • Ferramentas e bibliotecas
  • Impacto localizado

Requisitos:

  • Apresentação resumida: 20 minutos
  • Aprovação de 2+ pessoas
  • Revisão padrão

Informativa

Características:

  • Documentação de decisões já tomadas
  • Comunicação de mudanças emergenciais
  • Compartilhamento de aprendizados

Requisitos:

  • Apresentação: 10 minutos
  • Não requer aprovação formal
  • Para conhecimento do time

Preparação para Reunião RFC

Checklist para Autores (antes da reunião)

  • RFC preenchida completamente
  • Todas as seções do template respondidas
  • Alternativas documentadas com prós/contras
  • Análise de impacto realizada
  • Diagramas criados se necessário
  • Slides/material de apoio preparado (opcional)
  • Todos os comentários do PR respondidos
  • Link da RFC compartilhado

Checklist para Revisores (antes da reunião)

  • RFC lida completamente
  • Entendimento do problema claro
  • Alternativas analisadas
  • Comentários/perguntas adicionados no PR
  • Riscos e preocupações identificados
  • Feedback construtivo preparado
  • Experiências relevantes para compartilhar

Ferramentas e Templates

Template de Agenda de Reunião

# Reunião RFC - [Data]

## RFCs para Discussão

### RFC-001: [Título]

- **Autor**: [Nome]
- **Nível**: Major
- **Tempo**: 30 min
- **Link PR**: [Link]
- **Status**: Em Revisão

### RFC-002: [Título]

- **Autor**: [Nome]
- **Nível**: Minor
- **Tempo**: 20 min
- **Link PR**: [Link]
- **Status**: Em Revisão

## Participantes

- [Nome 1] - [Papel]
- [Nome 2] - [Papel]
- [Nome 3] - [Papel]

## Notas da Reunião

[Preencher durante a reunião]

### RFC-001: [Título]

**Discussão:**
- 

**Decisão:**
- 

**Ações:**
- [ ] 

### RFC-002: [Título]

**Discussão:**
- 

**Decisão:**
- 

**Ações:**
- [ ] 

Mensagem para Avisar

🔔 **Reunião RFC - [Data] às [Horário]**

RFCs para discussão:

📋 **RFC-XXX: [Título]** - @autor (30 min - Major)
Link: https://github.com/.../pull/XXX
Contexto: [Breve descrição de 1 linha]

📋 **RFC-YYY: [Título]** - @autor (20 min - Minor)
Link: https://github.com/.../pull/YYY
Contexto: [Breve descrição de 1 linha]

📍 Local: [Link da reunião]
📎 Agenda completa: [Link]

Por favor, revisem as RFCs antes da reunião! 🙏

Dúvidas? Comentem nos PRs ou no thread.

Casos Especiais

RFC Urgente

Quando usar:

  • Decisões críticas que não podem esperar a reunião quinzenal
  • Incidentes que requerem mudança arquitetural
  • Oportunidades com prazo apertado

Processo:

  1. Marcar RFC como "Urgente" no PR
  2. Agendar reunião extraordinária
  3. Notificar time com 24h de antecedência (mínimo)
  4. Explicar por que é urgente
  5. Seguir processo normal acelerado

RFC Simples (Fast Track)

Quando usar:

  • Decisões pequenas mas que precisam de registro
  • Mudanças com baixo risco e impacto limitado
  • Consenso já existe informalmente

Processo:

  1. Criar RFC normalmente
  2. Marcar como "Fast Track" no PR
  3. Pode ser aprovada via comentários no PR sem reunião
  4. Requer aprovação de 3+ pessoas
  5. Aguardar 48h para objeções
  6. Se ninguém objetar, pode fazer merge

RFC Experimental

Quando usar:

  • Testes de novas tecnologias
  • Proof of Concepts
  • Experimentos de curta duração

Processo:

  1. Marcar RFC como "Experimental"
  2. Definir critérios de sucesso claros
  3. Estabelecer prazo para avaliação (ex: 1 mês)
  4. Documentar aprendizados
  5. Criar RFC definitiva baseada nos resultados

Melhores Práticas

Para Autores

Faça:

  • Seja transparente sobre trade-offs
  • Peça feedback cedo (antes da reunião)
  • Use linguagem clara e objetiva
  • Forneça contexto suficiente
  • Considere múltiplas alternativas
  • Documente riscos honestamente

Evite:

  • Ocultar problemas conhecidos
  • Apresentar apenas uma opção
  • Ser vago sobre impactos
  • Ignorar feedback recebido
  • Pressionar por aprovação rápida
  • Ficar na defensiva

Para Revisores

Faça:

  • Leia a RFC completamente antes da reunião
  • Faça perguntas construtivas
  • Compartilhe experiências relevantes
  • Sugira melhorias específicas
  • Considere diferentes perspectivas

Evite:

  • Criticar sem sugerir alternativas
  • Rejeitar sem justificativa
  • Fazer perguntas que já estão respondidas na RFC
  • Desviar do tópico principal
  • Debates prolongados sobre detalhes de implementação

Para o Time

  • Participe ativamente das discussões
  • Respeite o tempo alocado
  • Mantenha foco no problema e solução
  • Construa em cima das ideias dos outros
  • Documente decisões claramente
  • Revise RFCs antigas periodicamente

FAQ

P: E se ninguém revisar minha RFC?

R: Mencione pessoas específicas no PR e peça revisão direta. Se necessário, leve o assunto para o daily/stand-up.

P: Posso mudar uma RFC depois de aprovada?

R: Sim, mas mudanças significativas requerem uma nova RFC ou amendment (emenda). Mudanças pequenas podem ser feitas via PR normal.

P: E se eu discordar da decisão?

R: Documente sua discordância no PR. Se é um ponto crítico, peça para revisitar na próxima reunião com mais dados.

P: Quanto detalhe é necessário?

R: O suficiente para que alguém novo no projeto entenda o problema e a solução. Varia com a complexidade da decisão.

P: Posso implementar antes da aprovação?

R: Você pode fazer POC/experimentos, mas não faça merge em dev ou main antes da aprovação formal.


Recursos Adicionais

RFCs por Categoria

Processo e Workflow (2 RFCs): RFC-001, RFC-002

Fundamentos de Qualidade (4 RFCs): RFC-003, RFC-004, RFC-005, RFC-006

Operações e Deployment (2 RFCs): RFC-007, RFC-008

Segurança e Gestão de Incidentes (3 RFCs): RFC-009, RFC-010, RFC-011

Arquitetura e API (4 RFCs): RFC-012, RFC-013, RFC-014, RFC-015

Performance (1 RFC): RFC-016

Leitura Externa