Skip to content

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.

ElementoDescrição
StatusDraft → Review → Approved → Deprecated
ContextO problema que motivou a decisão
DecisionO que foi decidido
AlternativesOpções consideradas
ConsequencesImpactos positivos e negativos
SecurityImplicaçõ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
└── References

RFC-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:

  1. Valida identidade do cliente (KYC via Open Finance)
  2. Consulta score de crédito (Serasa/Boa Vista)
  3. Calcula taxa baseada em risco + CDI
  4. Gera contrato digital
  5. Libera crédito via Pix

Alternatives Considered:

OpçãoPrósContrasDecisão
Antecipação de recebíveisSimplesLimita a merchants❌ Muito restritivo
Empréstimo P2PFlexívelComplexidade regulatória❌ Regulação pesada
Crédito sobre Pix (escolhido)Novo, escalávelRequer 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çãoPrósContrasDecisão
Só PostgreSQLSimplesNão escala para analytics❌ Performance
Só ClickHouseAnalytics rápidoNão serve OLTP❌ Não substitui PG
Lambda (escolhido)Hot + ColdComplexidade✅ Melhor dos dois
Lakehouse (Databricks)ModernoVendor 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çãoPrósContrasDecisão
Só ElasticsearchSimplesNão processa em tempo real❌ Latência
Prometheus + GrafanaMétricas boasNão faz CEP❌ Só métricas
Flink + Kafka (escolhido)Real-time + escalávelComplexo✅ Poderoso
DatadogManagedVendor lock-in, custo❌ Caro

Template de RFC

markdown
# 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

  1. RFC ≠ ADR — RFC é para projetos inteiros, ADR para decisões específicas
  2. Sempre documentar alternativas — Mostra que você considerou opções
  3. Status é vivo — Draft → Review → Approved → Deprecated
  4. Security sempre — Toda decisão tem implicações de segurança
  5. Consequences honestas — Liste prós E contras
  6. Referências — Links para specs, docs, artigos
  7. Onboarding — Novos engenheiros entendem o "por quê"
  8. Compliance — Auditores precisam de justificativas documentadas
  9. Evolução — RFCs documentam a história do sistema
  10. Ferramenta — Use Notion, Confluence ou markdown no Git