Desafio 14: RFC — Documentação de Decisões de Arquitetura
🇧🇷 Request for Comments
🇬🇧 Architecture Decision Records
RFCs são o registro vivo de decisões de arquitetura. Em fintechs, decisões ruins podem gerar perdas financeiras, violações regulatórias e discrepancies. Um RFC documenta: o problema, as opções consideradas, a solução escolhida e o raciocínio.
Switch: RFC Standard vs ADR (Architecture Decision Record)
O que é um RFC?
Um RFC é uma proposta que convida discussão. O objetivo não é dictar — é convergir. Um bom RFC passa por: draft → review → approval → implementation → retrospective.
| Elemento | Descrição |
|---|---|
| Status | Draft → Review → Approved → Deprecated |
| Context | O problema que motivou a decisão |
| Decision | O que foi decidido |
| Alternatives | Opções consideradas |
| Consequences | Impactos positivos e negativos |
| Security | Implicações de segurança |
Estrutura de um RFC
RFC-001: Título
├── Status: [Draft | Review | Approved | Deprecated]
├── Authors: [nomes]
├── Date: [data]
├── Context
│ ├── Problema
│ ├── Restrições
│ └── Drivers
├── Decision
│ ├── Solução escolhida
│ └── Justificativa
├── Alternatives Considered
│ ├── Opção A (descartada)
│ ├── Opção B (descartada)
│ └── Opção C (escolhida) ✅
├── Consequences
│ ├── Positivas
│ └── Negativas
├── Security Considerations
├── Testing Strategy
└── ReferencesRFC-001: Crédito sobre Pix
Status: Approved
Context: O Pix movimenta R$ 3 tri/mês, mas não oferece crédito. Empresas precisam de capital de giro entre a venda e o recebimento do Pix. Um serviço de crédito sobre Pix permite antecipação de fluxo de caixa com taxa inferior ao cartão de crédito.
Decision: Criar um serviço de crédito orquestrado por workflow que:
- Valida identidade do cliente (KYC via Open Finance)
- Consulta score de crédito (Serasa/Boa Vista)
- Calcula taxa baseada em risco + CDI
- Gera contrato digital
- Libera crédito via Pix
Alternatives Considered:
| Opção | Prós | Contras | Decisão |
|---|---|---|---|
| Antecipação de recebíveis | Simples | Limita a merchants | ❌ Muito restritivo |
| Empréstimo P2P | Flexível | Complexidade regulatória | ❌ Regulação pesada |
| Crédito sobre Pix (escolhido) | Novo, escalável | Requer Open Finance | ✅ Futuro-proof |
Consequences:
- ✅ Novo revenue stream (spread de 2-8% a.a.)
- ✅ Diferencial competitivo
- ❌ Complexidade de integração com Open Finance
- ❌ Necessita licenciamento BCB
RFC-002: Data Lake para Fintech
Status: Approved
Context: Bilhões de transações precisam ser transformadas em insights. Relatórios regulatórios (BACEN, SCR) exigem dados históricos de 5+ anos. Data warehouse tradicional não escala para streaming em tempo real.
Decision: Arquitetura Lambda com:
- Hot path: PostgreSQL + Redis para transações em tempo real
- Cold path: ClickHouse + S3 para analytics e relatórios
- Streaming: Kafka para ingestão de eventos
Alternatives Considered:
| Opção | Prós | Contras | Decisão |
|---|---|---|---|
| Só PostgreSQL | Simples | Não escala para analytics | ❌ Performance |
| Só ClickHouse | Analytics rápido | Não serve OLTP | ❌ Não substitui PG |
| Lambda (escolhido) | Hot + Cold | Complexidade | ✅ Melhor dos dois |
| Lakehouse (Databricks) | Moderno | Vendor lock-in | ❌ Custo |
Security:
- Dados PII criptografados em repouso (AES-256)
- Row-level security por tenant
- Audit log imutável em S3
RFC-003: Monitoramento Financeiro
Status: Approved
Context: Transações financeiras precisam ser monitoradas em tempo real para detectar fraudes, conformidade regulatória e SLAs. Um sistema de monitoramento deve processar milhões de eventos/minuto com latência < 100ms.
Decision: Pipeline Kafka + Flink + Elasticsearch:
- Ingestão: Kafka (1M+ eventos/s)
- Processamento: Apache Flink (CEP rules)
- Armazenamento: Elasticsearch + PostgreSQL
- Alertas: PagerDuty + Slack
Alternatives Considered:
| Opção | Prós | Contras | Decisão |
|---|---|---|---|
| Só Elasticsearch | Simples | Não processa em tempo real | ❌ Latência |
| Prometheus + Grafana | Métricas boas | Não faz CEP | ❌ Só métricas |
| Flink + Kafka (escolhido) | Real-time + escalável | Complexo | ✅ Poderoso |
| Datadog | Managed | Vendor lock-in, custo | ❌ Caro |
Template de RFC
# RFC-XXX: [Título]
**Status:** Draft | Review | Approved | Deprecated
**Authors:** [nomes]
**Date:** [data]
**Reviewers:** [nomes]
## Context
[Qual problema motivou esta decisão? Quais restrições existem?]
## Decision
[O que foi decidido? Por quê?]
## Alternatives Considered
| Opção | Prós | Contras | Decisão |
|-------|------|---------|---------|
| A | ... | ... | ❌ |
| B | ... | ... | ❌ |
| C (escolhida) | ... | ... | ✅ |
## Consequences
### Positivas
- [impactos positivos]
### Negativas
- [impactos negativos]
## Security Considerations
- [implicações de segurança]
## Testing Strategy
- [como testar]
## References
- [links relevantes]Casos de Uso
- Migração de banco: PostgreSQL → Aurora
- Novo serviço: Implementar PISP
- Mudança de stack: Express → Fastify
- Segurança: Adicionar mTLS
- Compliance: Novo relatório BACEN
Lições aprendidas
- RFC ≠ ADR — RFC é para projetos inteiros, ADR para decisões específicas
- Sempre documentar alternativas — Mostra que você considerou opções
- Status é vivo — Draft → Review → Approved → Deprecated
- Security sempre — Toda decisão tem implicações de segurança
- Consequences honestas — Liste prós E contras
- Referências — Links para specs, docs, artigos
- Onboarding — Novos engenheiros entendem o "por quê"
- Compliance — Auditores precisam de justificativas documentadas
- Evolução — RFCs documentam a história do sistema
- Ferramenta — Use Notion, Confluence ou markdown no Git