Definir o que se procura aprender
Uma experiência de melhoria começa por uma incerteza que importa ao serviço. No exemplo fictício Lume, pretende-se reduzir esforço de reconciliação sem produzir saldos incorretos. “A equipa gostou da nova ferramenta” não responde às duas partes. Antes do ensaio, explicita o efeito esperado, os dados a observar, o período, a condição que contrariaria a hipótese e quem pode decidir o próximo passo. Uma regra de interrupção por saldo incorreto é uma condição local deste exercício, não uma regra universal de Scrum. Se ocorrer, conserva a evidência e segue o acordo; não alteres o limite apenas para manter uma conclusão favorável. DORA descreve equipas capazes de experimentar e adaptar soluções com contexto sobre resultados de negócio. Esse apoio organizacional não dispensa autorização para atuar num ambiente real. Um protótipo isolado pode permitir aprendizagem delimitada antes de uma decisão de produção.
Escolher a unidade e conservar os grupos
Uma ferramenta tem 200 utilizadores elegíveis, quarenta experimentam e vinte concluem. A adoção inicial observada é 40/200=20%; a conclusão entre quem experimentou é 20/40=50%; a conclusão entre todos os elegíveis é 20/200=10%. São perguntas diferentes. Se houver 200 eventos de abertura por 120 identificadores, não escrevas “200 utilizadores”. Investiga também quem não adotou: entrevistar apenas promotores deixa barreiras importantes fora da conversa. No caso Aurora, antes há 81 conclusões em 90 tarefas simples e duas em dez complexas; depois há dez em dez e 36 em 90. As taxas dentro dos grupos melhoram, mas o total desce de 83% para 46% porque a composição mudou. A média simples de 100% e 40% é 70%, mas não representa o conjunto com dez e noventa tarefas. Mantém numeradores, denominadores, definições e limites da amostra visíveis.
Distinguir observação, causa e retorno
Uma queda de seis devoluções em quarenta pedidos para nove em noventa significa 15% para 10%: menos cinco pontos percentuais e uma redução relativa de um terço. A contagem absoluta subiu. Nenhuma destas contas prova a causa. Se triagem, pessoal e dificuldade mudarem juntos, a comparação não isola o contributo da triagem. Um piloto acompanhado com quatro conclusões em cinco participantes descreve esse piloto; não prova sucesso autónomo de 80% de todos os utilizadores. Inclui também custos. Com 18 horas iniciais, quatro poupadas por semana e uma de manutenção, o saldo é três e o retorno hipotético ocorre em seis semanas. Se a manutenção exceder a poupança, não há retorno nesse modelo constante. Pode haver outros benefícios, mas precisam de ser identificados. Não termines observação após três dias fáceis se a conclusão proposta inclui um fecho de fundos ainda não observado.
Laboratório de interpretação reproduzível
Copia o código completo abaixo para um ficheiro chamado experiencia.py e executa python3 experiencia.py com Python 3.13. Não necessita de pacotes externos, rede, dados pessoais ou acesso à plataforma. O programa usa frações exatas para quinze verificações: taxas antes/depois, pontos percentuais, redução relativa, adoção, conclusão condicional e global, composição, médias e retorno. Rejeita denominador zero em vez de o apresentar como 0%. Antes de executar, calcula os resultados à mão e escreve uma frase sobre o que cada conta não demonstra. Depois compara com os resultados expected e actual. Num novo ficheiro de exercício, altera valores e previsões de forma coerente; uma asserção falhada indica divergência do resultado esperado, não fracasso de uma equipa. Entrega a interpretação do caso Aurora, as hipóteses de custo de Lume e um plano de observação. As quinze verificações foram executadas com CPython 3.13.1. Não houve experiência com equipas reais, prova causal, teste de significância estatística ou poupança observada em campo.
"""Original fictional-data arithmetic; no field experiment or causal inference."""
from fractions import Fraction
from pathlib import Path
import hashlib
import json
import platform
checks = []
def check(name, actual, expected):
assert actual == expected, (name, actual, expected)
checks.append(dict(name=name, actual=actual, expected=expected, passed=True))
def rate(successes, total):
if total <= 0 or not 0 <= successes <= total:
raise ValueError('Counts require 0 <= successes <= total and total > 0')
return Fraction(successes, total)
def payback(initial_hours, saved_weekly, maintenance_weekly):
assert initial_hours > 0 and saved_weekly >= 0 and maintenance_weekly >= 0
net = saved_weekly - maintenance_weekly
return None if net <= 0 else Fraction(initial_hours, net)
before, after = rate(6, 40), rate(9, 90)
check('before_return_rate', before, Fraction(3, 20))
check('after_return_rate', after, Fraction(1, 10))
check('percentage_point_drop', 100 * (before-after), Fraction(5))
check('relative_drop', (before-after)/before, Fraction(1, 3))
check('initial_adoption', rate(40, 200), Fraction(1, 5))
check('completion_among_triers', rate(20, 40), Fraction(1, 2))
check('completion_among_eligible', rate(20, 200), Fraction(1, 10))
check('pooled_before', rate(81+2, 90+10), Fraction(83, 100))
check('pooled_after', rate(10+36, 10+90), Fraction(46, 100))
check('both_groups_improved', rate(10, 10)>rate(81, 90) and rate(36, 90)>rate(2, 10), True)
check('unweighted_mean_is_not_pooled', (rate(10, 10)+rate(36, 90))/2, Fraction(7, 10))
check('six_week_payback', payback(18, 4, 1), Fraction(6))
check('no_payback_negative_net', payback(12, 2, 3), None)
check('no_payback_zero_net', payback(12, 3, 3), None)
try:
rate(0, 0)
except ValueError:
zero_rejected = True
else:
zero_rejected = False
check('zero_denominator_is_not_zero_percent', zero_rejected, True)
print(json.dumps(dict(groups=len(checks), checks=checks, python=platform.python_version(),
scope='Synthetic counts and constant effort assumptions. No statistical significance, causal proof, actual savings, personnel assessment or production change.',
scriptSha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest()), default=str, ensure_ascii=False, indent=2))
6/40=15% e 9/90=10%: a taxa caiu cinco pontos percentuais apesar da contagem maior. A causa exige outra evidência.
Armadilhas comuns
Eventos como pessoas; média não ponderada como total; piloto acompanhado como autonomia; manutenção omitida; cálculo correto como prova causal.
Tópicos relacionados: Hipóteses de melhoria · Feedback de utilizadores · Métricas e custos
Uma conta reproduzível ajuda a discutir a evidência; a conclusão precisa de respeitar a população, as condições e as hipóteses observadas.
Referência: Team experimentation · Scrum Guide November2020; Kanban Guide May2025; EBM May2024; primary guidance reviewed 2026-09-30