Aula 17 - Gestão de Projetos com Metodologias Ágeis e Kanban 📋
Objetivo Pedagógico
Objetivo: Compreender a dinâmica de gestão de projetos de software utilizando métodos ágeis (Scrum, Kanban, Scrumban), limitadores de trabalho em progresso (WIP Limits), mapeamento do fluxo de valor (VSM) e Cumulative Flow Diagrams (CFD).
📑 1. Fundamentos Teóricos & Análise Técnica
A gestão moderna de engenharia de software superou modelos prescritivos rígidos em favor de abordagens empíricas e adaptativas fundamentadas na teoria das filas e nos princípios do Lean Software Development.
O método Kanban e a gestão de fluxo apoiam-se em quatro pilares matemáticos essenciais: 1. A Lei de Little (Little's Law): - Expressa formalmente a relação em sistemas de filas em estado estacionário: $\(WIP = Throughput \times Lead\ Time\)$ - Para reduzir o tempo de entrega (Lead Time) sem sobrecarregar a equipe, a intervenção mais eficaz não é tentar forçar o aumento do ritmo de trabalho, mas reduzir deliberadamente o Trabalho em Progresso (WIP - Work in Progress). 2. Work In Progress (WIP Limits): - Limites numéricos estritos aplicados a cada coluna do quadro Kanban. Quando uma coluna atinge seu teto de WIP, os engenheiros são impedidos de puxar novas tarefas (Stop Starting, Start Finishing), sendo incentivados a atuar como colaboradores para destravar tarefas represadas (Swarming). 3. Métricas de Fluxo Analíticas: - Lead Time: Tempo decorrido desde a criação da demanda pelo usuário até sua entrega em produção. - Cycle Time: Tempo decorrido desde o início ativo do desenvolvimento até a conclusão. - Cumulative Flow Diagram (CFD): Gráfico de áreas empilhadas que revela gargalos de processo, acúmulos de trabalho e taxa de chegada vs. conclusão ao longo do tempo.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph LR
Backlog["Backlog de Engenharia"] --> Ready["Pronto para Dev (WIP: 5)"]
Ready --> InDev["Em Desenvolvimento (WIP: 3)"]
InDev --> CodeReview["Revisão por Pares (WIP: 2)"]
CodeReview --> QA["Validação QA & CI (WIP: 2)"]
QA --> Done["Entregue em Produção (Throughput)"]
Note["Gargalo Detectado: Review atingiu WIP 2! Nenhuma nova tarefa entra em Dev."]
style Backlog fill:#e1f5fe,stroke:#01579b
style InDev fill:#fff3e0,stroke:#e65100
style CodeReview fill:#ffebee,stroke:#c62828
style Done fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Puxar vs. Empurrar (Pull System): Tarefas só avançam quando o estágio subsequente possui capacidade livre garantida pelos limites de WIP. - Mapeamento do Fluxo de Valor (VSM): Identificação e eliminação de desperdícios, esperas ociosas e retrabalho no ciclo de desenvolvimento. - Previsibilidade por Simulação de Monte Carlo: Projeções probabilísticas de datas de entrega baseadas no histórico real de Throughput em vez de estimativas intuitivas. - Feedback Loops e Cadências Ágeis: Reuniões diárias focadas no fluxo do quadro, revisões e retrospectivas para melhoria contínua.
🛠️ 2. Implementação Prática em Gestão Ágil, Kanban e Métricas de Fluxo
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// kanban_flow_metrics.py (Cálculo de Lead Time e Previsão com Monte Carlo)
import random
def calculate_cycle_time_stats(lead_times: list[float]):
"""Calcula percentis de entrega de histórias de usuário."""
sorted_times = sorted(lead_times)
p50 = sorted_times[int(len(sorted_times) * 0.50)]
p85 = sorted_times[int(len(sorted_times) * 0.85)]
p95 = sorted_times[int(len(sorted_times) * 0.95)]
print(f"=== Métricas de Fluxo (Amostras: {len(lead_times)}) ===")
print(f"p50 (Mediana) : {p50:.1f} dias")
print(f"p85 (Compromisso): {p85:.1f} dias (85% de confiança)")
print(f"p95 (Conservador): {p95:.1f} dias")
def simulate_monte_carlo(historical_throughput: list[int], remaining_tasks: int, iterations: int = 1000):
"""Simulação de Monte Carlo para previsão probabilística de término."""
days_to_complete = []
for _ in range(iterations):
tasks = remaining_tasks
days = 0
while tasks > 0:
daily_rate = random.choice(historical_throughput)
tasks -= daily_rate
days += 1
days_to_complete.append(days)
days_to_complete.sort()
confidence_85 = days_to_complete[int(iterations * 0.85)]
print(f"Previsão Monte Carlo: 85% de chance de concluir em até {confidence_85} dias de trabalho.")
if __name__ == '__main__':
historical_lead = [3.2, 4.5, 2.1, 7.8, 4.0, 5.2, 9.1, 3.8, 4.1, 6.0]
calculate_cycle_time_stats(historical_lead)
simulate_monte_carlo(historical_throughput=[1, 2, 0, 3, 2, 1, 0, 4], remaining_tasks=15)
💡 Análise Passo a Passo do Código
- Uso de Percentis p85/p95: Elimina o erro clássico de planejar prazos utilizando médias matemáticas em distribuições assimétricas.
- Simulação de Monte Carlo: Gera milhares de cenários possíveis utilizando o Throughput real registrado pela equipe de engenharia.
- Decisões Baseadas em Dados: Substitui prazos fixos arbitrários por acordos de nível de serviço com intervalo de confiança probabilística.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto