Pular para conteúdo

Sprint 012 — Review

Período: 2026-08-12 · Feature: 013 Aceitação: aceitacao.md

Resumo

Planejado Entregue
User stories 3 3
Tarefas 10 10
Requisitos funcionais aceitos 10 10
Critérios de sucesso aceitos 9 9

A pior página do sistema caiu de 6,12 s para 0,031 s — 197 vezes. A variação entre pessoas saiu de setenta vezes para 1,4.

O que foi feito

Tarefa Entregável Aceito
T001 a contagem de empates — zero, e a descoberta de que inserted_at é de microssegundo sim
T002 cinco casos travando a resposta antes da reescrita sim
T003 seis retratos determinísticos sim
T004 resolução lateral por issue, com inner/left preservados e bindings nomeados sim
T005 índice (person_id, no_longer_observed_at), com ida e volta sim
T006 a segunda definição alinhada, e a duplicação declarada no código sim
T007 seis diff vazios sim
T008 a invariante coletadas == promovidas + lacunas, com e sem issue não promovida sim
T009 a medida das oito pessoas, /work e /people, cinco vezes cada sim
T010 histórico dobrado não dobra as linhas lidas sim

Nenhuma tarefa ficou aberta, e nenhuma dependeu da chave mestra — diferente dos dois sprints anteriores.

Evidências

mix gates → 10 gates verdes, código de saída 0
diff dos seis retratos → vazio
tadeuaugustovs: 6,12 s → 0,031 s   (5 medidas, variação < 8%)
/work: 322 ms → 120 ms

Dívida gerada

Dívida Por quê foi aceita
mapping/queries.ex mantém a segunda definição de promoção vigente reusar exigiria expor subconsulta pela fronteira, o que a ADR 0003 proíbe. As ordens foram alinhadas e a duplicação está escrita no código
DISTINCT ON permanece onde a pergunta é agregada lateral por linha só ganha quando há poucas linhas para decorar

O que a análise e o plano acharam antes do código

Sete achados, nenhum de rodar teste — todos de medir o banco, ler o código ou olhar o plano:

Fase Achado
medida paginar não resolve: LIMIT 5 custa 6 300 ms e LIMIT 100 custa 6 648
medida enxugar a projeção não resolve: 5 738 ms
análise oito das catorze chamadas são inner, e left faria a tela ganhar linhas
análise parent_as exige binding nomeado — a L39
análise o teste de EXPLAIN reprovaria com o código certo
análise o teste de tempo media relógio dentro da suíte — L22
análise o retrato em HTML cru nunca daria diff vazio

Oitava feature seguida em que a análise acha defeito de desenho antes da primeira linha.

Lições deste sprint

  • L49 — uma medida não descreve uma tela cujo custo depende do plano de execução;
  • L50 — teste que compara duas medidas precisa provar que mediu alguma coisa;
  • L51 — afirmar sobre o schema sem conferir contradiz a documentação que já está no código.