REQUIREMENTS & STORIES · TEMPLATE 09

NFR Checklist — Non-Functional Requirements

Requisitos não-funcionais sistematizados: performance, disponibilidade, segurança, observabilidade, compliance. Onde sistemas falham silenciosamente — atendem o que foi pedido e mesmo assim caem em produção.

Quando usar Em PRD/RFC para garantir que aspectos transversais não passem batido
Quem lê Eng, ops, security, PM
Tamanho 1–2 páginas (checklist)
Origem ISO/IEC 25010, Simon Brown, SRE

Requisitos não-funcionais são onde sistemas falham silenciosamente — atendem perfeitamente o que foi pedido e mesmo assim caem em produção. Uma checklist sistemática evita o esquecimento. Inspirada no ISO/IEC 25010 (System Quality Model) e nos capítulos de NFR em Software Architecture for Developers (Simon Brown) e Building Evolutionary Architectures (Ford et al.). Times maduros revisitam essa lista em cada feature significativa, não apenas no início do projeto.

Template

# NFR Checklist — [Nome do projeto/feature]

## Performance
- [ ] **Latência target:** P50 < ___ ms, P95 < ___ ms, P99 < ___ ms
- [ ] **Throughput target:** ___ RPS sustentável a P99 < ___ ms
- [ ] **Tempo de inicialização:** cold start < ___ s
- [ ] **Memory footprint:** RSS por instância < ___ MB
- [ ] Plano de teste de carga / soak test definido

## Disponibilidade & Confiabilidade
- [ ] **SLA target:** ___ % (ex: 99.9 = ~9h downtime/ano)
- [ ] **SLO interno:** ___ % (mais agressivo que SLA externo)
- [ ] **RTO (Recovery Time Objective):** < ___ minutos
- [ ] **RPO (Recovery Point Objective):** < ___ minutos
- [ ] Multi-AZ / multi-region articulado
- [ ] Failover testado em staging
- [ ] Backup periódico + restore testado

## Escalabilidade
- [ ] **Horizontal:** stateless? auto-scaling configurado?
- [ ] **Banco:** capacity para Y× tráfego atual? plano de sharding?
- [ ] **Cache:** strategy definida (TTL, invalidação)?
- [ ] **Bottleneck conhecido:** qual recurso satura primeiro?

## Segurança
- [ ] Threat model conduzido (template separado)
- [ ] AuthN definido (OAuth/OIDC/JWT/sessão)
- [ ] AuthZ por recurso definido (RBAC/ABAC)
- [ ] Dados sensíveis identificados e classificados (PII, PCI, PHI)
- [ ] Criptografia em trânsito (TLS 1.2+)
- [ ] Criptografia em repouso (AES-256 ou equivalente)
- [ ] Secrets não hardcoded (Vault/KMS/Secret Manager)
- [ ] Dependency scan ativo (Snyk/Dependabot/etc.)
- [ ] WAF / rate limiting na borda
- [ ] Logs de auditoria para operações críticas
- [ ] Compliance checklist: GDPR/LGPD/PCI/SOC2/HIPAA conforme aplicável

## Observabilidade
- [ ] **Logs:** estruturados (JSON), com correlation_id
- [ ] **Métricas:** RED method (Rate, Errors, Duration) por endpoint
- [ ] **Traces:** OpenTelemetry instrumentado
- [ ] **Alertas:** definidos com base em SLO (não em CPU)
- [ ] **Dashboards:** SRE-grade (latência distribuída, error budget)
- [ ] **On-call playbook:** existe e foi testado

## Manutenibilidade
- [ ] **Cobertura de testes:** target ___ % (não < 70% típico)
- [ ] **Documentação:** README, ADRs, runbook
- [ ] **CI/CD:** build < ___ min, deploy automatizado
- [ ] **Code review:** todo PR revisado, aprovação obrigatória
- [ ] **Linter / static analysis:** rodando em CI
- [ ] **Versionamento:** SemVer; changelog mantido

## Acessibilidade (UI)
- [ ] **WCAG nível:** A / AA / AAA
- [ ] Teste com screen reader (NVDA, VoiceOver)
- [ ] Contraste mínimo 4.5:1 (texto normal)
- [ ] Navegação 100% por teclado
- [ ] Focus indicators visíveis

## Internacionalização
- [ ] Idiomas suportados: [...]
- [ ] Locales para data, número, moeda
- [ ] Strings extraídas (i18n keys, não hardcoded)
- [ ] RTL support se aplicável

## Custo
- [ ] **Orçamento de infra mensal estimado:** $ ___
- [ ] **Custo por unidade (req, user, transação):** ___
- [ ] **Alerta de cost overrun configurado**

## Compliance & legal
- [ ] LGPD/GDPR: bases legais, retenção, direito ao esquecimento
- [ ] Termos de uso atualizados
- [ ] Política de privacidade atualizada
- [ ] DPA com fornecedores se houver dados pessoais
heurística

NFRs com targets numéricos são contratos; NFRs vagos ("rápido", "seguro") são intenção. Sempre que possível, substitua adjetivo por número: "<200ms P99" em vez de "rápido"; "99.9% uptime" em vez de "alta disponibilidade". Sem número, ninguém sabe quando o requisito foi atendido.

Referências