🐍 Caso 12 — Python 3.12 con comparacion legacy vs conocimiento distribuido#
Implementacion operativa del caso 12 para contrastar dependencia de conocimiento tribal contra una postura mas resiliente.
⬅️ Caso 12 · ⚖️ Comparativa de los 7 stacks · 🐍 Perfil de Python · 🧬 Todos los perfiles
🎯 Que resuelve#
Modela incidentes donde importa quien sabe que:
incident-legacydepende demasiado de una persona o de un procedimiento no compartido;incident-distributedcombina runbooks, backups y drills para resolver sin el heroe;share-knowledgepermite subir la madurez del dominio y ver el cambio real enreadiness_score.
💼 Por que importa#
Este caso deja visible que la continuidad operacional tambien es una propiedad del conocimiento. Un sistema "estable" puede seguir siendo fragil si solo una persona sabe como operarlo bajo presion. El bus factor no es una metrica de equipo: es un riesgo operacional medible.
🔬 Analisis Tecnico de la Implementacion (Python)#
El conocimiento silencioso y la dependencia tribal tienen un impacto tangible en la resolucion de incidentes que se puede modelar con logica determinista.
- Sintaxis Tribal (
legacy): La funcionrun_legacy_incident()modela la dependencia del heroe con una variable booleanahero_available = random.random() > 0.35, que simula que el experto no siempre esta disponible. Cuandohero_availableesFalse, el codigo intenta acceder a estructuras de conocimiento implicitas que no existen (opaque_config.get("system_v2_override")retornaNone) y cae en un bloque de escalacion:escalation=True,mttr_minutesalto,resolution_path: "manual_intervention". No hay fallback, no hay runbook, no hay segunda persona. El incidente queda bloqueado hasta que el heroe responde. - Aseguramiento Distribuido (
distributed): Implementa unreadiness_scorecalculado conrunbook_score * 0.45 + (backup_people + 1) * 18 + drill_score * 0.25que refleja la madurez real del dominio. Cuando el score es suficientemente alto, la funcion puede resolver el incidente sin el heroe usandorunbook_stepsdocumentados y personas de backup registradas enstate["knowledge"]["backup_people"]. El acceso a cualquier propiedad de configuracion usa el operador de fusionconfig.get("key") or safe_defaultpara garantizar que el codigo se degrade a unsafe_fallbacken lugar de colapsar conKeyError. Cada llamada aPOST /share-knowledgeincrementarunbook_score,backup_peopleodrill_score, reduciendo elmttr_minutesesperado de forma determinista.
🧱 Servicio#
app→ API Python 3.12 con dominios operativos, puntajes de runbook, backups, drills y simulacion de incidentes.
🚀 Arranque#
docker compose -f compose.yml up -d --buildPuerto local: 842.
Como consumir (dos opciones)#
Hub Python (recomendado, 8200 en compose.python.yml): este caso queda servido en http://localhost:8200/12/... junto a los otros 11 casos.
Modo aislado (8312 en este compose.yml): levanta solo este caso, util cuando la medicion necesita procesar limpio (sin otros casos compartiendo runtime).
🔎 Endpoints#
curl http://localhost:8200/12/
curl http://localhost:8200/12/health
curl "http://localhost:8200/12/incident-legacy?severity=high&service=payments"
curl "http://localhost:8200/12/incident-distributed?severity=high&service=payments"
curl -X POST "http://localhost:8200/12/share-knowledge?type=runbook&detail=payments-runbook-v2"
curl http://localhost:8200/12/knowledge/state
curl "http://localhost:8200/12/incidents?limit=10"
curl http://localhost:8200/12/diagnostics/summary
curl http://localhost:8200/12/metrics
curl http://localhost:8200/12/metrics-prometheus
curl http://localhost:8200/12/reset-lab🧪 Escenarios utiles#
severity=high&service=payments→ revela el bus factor real en legacy.- Ejecutar
POST /share-knowledge?type=runbookvarias veces y ver como bajamttr_minutesen distributed. type=backup_person→ agregar personas al equipo y observar la reduccion deescalation_rate.type=drill→ simular un simulacro y ver como subedrill_scoreen/knowledge/state.
🧭 Que observar#
- como cambia
mttr_minutesentre legacy y distributed con el mismo escenario; - cuantas veces
hero_available: falseprovocaescalation: trueen legacy; - si sube
handoff_qualityy bajahero_dependency_rateal compartir conocimiento; - como mejora
readiness_scoreen/knowledge/statedespues de runbooks, backups y drills.
⚖️ Nota de honestidad#
No sustituye una organizacion real, on-call ni gestion formal de conocimiento. Si reproduce el riesgo operativo importante: depender de memoria tribal versus construir continuidad compartida con evidencia observable en readiness_score y mttr_minutes.