mozak.tech Engenharia de IA Corporativa 74%

Parte IV — Gestão de Projetos e Produto com Suporte de IA

4.5 — Identificação e Mitigação Automatizada de Riscos de Projeto (Risk Management)

Objetivo da Aula

Ao concluir esta aula, você será capaz de:

Identificar riscos automaticamente a partir de histórico de projetos similares

Implementar gerarPlanoMitigacao(risco, client) com LLM

Implementar configurarMonitoramentoRisco(riscos) com alertas automáticos

Calcular exposição ao risco: probabilidade × impacto

Completar os 2 TODOs do starter

Por que isso importa

Registrar riscos numa planilha sem mitigação é teatro de governança. O valor real está no plano de mitigação e no monitoramento ativo. Um LLM que conhece o tipo de projeto (integração com sistema legado, time distribuído, requisito regulatório) gera planos de mitigação específicos em segundos.

Conceitos Fundamentais

Matriz de Riscos

// Exposição = Probabilidade (0-1) × Impacto (1-5)

const exposicao = risco.probabilidade * risco.impacto

// Crítico: > 3.0

// Alto: 2.0-3.0

// Médio: 1.0-2.0

// Baixo: < 1.0

TODO 1: gerarPlanoMitigacao(risco, client)

async function gerarPlanoMitigacao(risco, client) {

  const response = await client.messages.create({

    model: 'claude-haiku-4-5-20251001',

    max_tokens: 400,

    system: 'Você é um PM experiente em gestão de riscos. Gere planos de mitigação concretos e acionáveis.',

    messages: [{

      role: 'user',

      content: `Risco identificado:

Título: ${risco.titulo}

Descrição: ${risco.descricao || ''}

Probabilidade: ${(risco.probabilidade * 100).toFixed(0)}%

Impacto: ${risco.impacto}/5



Gere um plano de mitigação com:

1. Ação preventiva (o que fazer AGORA para reduzir probabilidade)

2. Plano de contingência (o que fazer SE o risco se materializar)

3. Dono do risco (quem deve monitorar)

4. Métrica de alerta precoce (sinal de que o risco está se concretizando)`,

    }],

  })

  

  return {

    risco: risco.titulo,

    exposicao: risco.probabilidade * risco.impacto,

    plano: response.content[0].text,

    gerado_em: new Date().toISOString(),

  }

}

TODO 2: configurarMonitoramentoRisco(riscos)

function configurarMonitoramentoRisco(riscos) {

  const alertas = []

  

  for (const risco of riscos) {

    const exposicao = risco.probabilidade * risco.impacto

    

    // Definir frequência de check baseada na exposição

    const frequencia = exposicao > 3.0 ? 'diário'

      : exposicao > 2.0 ? 'semanal'

      : 'quinzenal'

    

    // Definir threshold de alerta baseado no tipo de risco

    const threshold_alerta = risco.tipo === 'cronograma' ? 'Atraso > 2 dias na task crítica'

      : risco.tipo === 'tecnico' ? 'Build/teste falhando por > 4h'

      : risco.tipo === 'equipe' ? 'Ausência não planejada de dev'

      : 'Revisão manual necessária'

    

    alertas.push({

      risco: risco.titulo,

      exposicao: Math.round(exposicao * 10) / 10,

      frequencia_revisao: frequencia,

      threshold_alerta,

      proximo_check: calcularProximoCheck(frequencia),

    })

  }

  

  // Ordenar por exposição (riscos mais críticos primeiro)

  return alertas.sort((a, b) => b.exposicao - a.exposicao)

}



function calcularProximoCheck(frequencia) {

  const dias = frequencia === 'diário' ? 1 : frequencia === 'semanal' ? 7 : 14

  const proximo = new Date()

  proximo.setDate(proximo.getDate() + dias)

  return proximo.toISOString().split('T')[0]

}

Aprofundamento Técnico

Identificação Automática de Riscos com LLM

async function identificarRiscos(descricaoProjeto, client) {

  const response = await client.messages.create({

    model: 'claude-haiku-4-5-20251001',

    max_tokens: 600,

    messages: [{

      role: 'user',

      content: `Dado este projeto, identifique os 5 principais riscos:



${descricaoProjeto}



Para cada risco, retorne JSON:

{

  "riscos": [

    {"titulo": "...", "tipo": "cronograma|tecnico|equipe|externo", 

     "probabilidade": 0-1, "impacto": 1-5, "descricao": "..."}

  ]

}`,

    }],

  })

  

  const texto = response.content[0].text

  const i = texto.indexOf('{'), f = texto.lastIndexOf('}') + 1

  return JSON.parse(texto.slice(i, f)).riscos

}

O LLM identifica riscos que humanos esquecem: “Integração com API externa de terceiros sem SLA documentado” é um risco real que um PM focado nas features pode não registrar.

Exemplos Anotados

Exemplo 1: Pipeline Completo

const projeto = 'E-commerce com integração de pagamento via Stripe, time de 4 devs, prazo de 3 meses'



// 1. Identificar riscos

const riscos = await identificarRiscos(projeto, client)

// → [

//   { titulo: 'API Stripe muda breaking change', prob: 0.2, impacto: 4 },

//   { titulo: 'Desenvolvedor sênior sai no meio', prob: 0.3, impacto: 5 },

//   ...

// ]



// 2. Gerar planos de mitigação para exposição > 1.5

const altos = riscos.filter(r => r.probabilidade * r.impacto > 1.5)

const planos = await Promise.all(altos.map(r => gerarPlanoMitigacao(r, client)))



// 3. Configurar monitoramento

const monitoramento = configurarMonitoramentoRisco(riscos)

// → [

//   { risco: 'Dev sênior sai', exposicao: 1.5, frequencia: 'semanal', threshold: 'Ausência não planejada' },

//   ...

// ]

Padrões e Armadilhas

Padrões

Padrão 1: Dono do risco por tipo

const donos = { cronograma: 'scrum_master', tecnico: 'tech_lead', equipe: 'manager', externo: 'pm' }

Padrão 2: Risco com plano de contingência é risco gerenciado

Preventivo: "Adicionar buffer de 20% no cronograma de integração Stripe"

Contingência: "Se Stripe muda API: 3 dias de adaptação, comunicar PM imediatamente"

Armadilhas

⚠️ Armadilha 1: Probabilidade × Impacto sem calibração “Probabilidade: 0.8, Impacto: 5” para todo risco novo = lista de riscos inutilizável. Calibre: “Qual risco com que isso acontece em 1 de cada 10 projetos?” = 0.1.

⚠️ Armadilha 2: Plano de mitigação genérico do LLM

"Ação: Comunicar stakeholders regularmente" → genérico demais

"Ação: Criar canal #stripe-updates no Slack, assinar changelog Stripe, verificar semanalmente" → acionável

Adicione contexto de stack e time no prompt para respostas mais específicas.

⚗ Laboratório prático — mozak.tech
Se não for realizar o laboratório, pule para o próximo capítulo.

Ponte para o Lab

TODO 1 — gerarPlanoMitigacao(risco, client): passe título, probabilidade, impacto para o LLM e peça preventivo + contingência + dono + métrica de alerta.

TODO 2 — configurarMonitoramentoRisco(riscos): calcule exposição por risco, defina frequência (diário/semanal/quinzenal) e threshold de alerta por tipo.

Agora você está pronto para o lab.