Cómo garantizar gobernanza en especificaciones y código usando Plum

gobernanza-especificaciones-codigo

¿Y si te dijera que tu “spec perfecta” es solo un espejismo que te está dejando con más ruina que beneficio?

Tiempo estimado de lectura: 7 min

  • Ideas clave:
  • Specs y tests no capturan intención; la implementación revela decisiones que deben registrarse.
  • Sin trazabilidad y gobernanza, la velocidad con agentes de IA genera deuda técnica no asignable.
  • Convierte decisiones efímeras en artefactos auditables: captura, exige aprobación humana y sincroniza spec↔tests↔código.

Introducción

Poca gente habla claro de esto: en el mundo real, sometimes specs and tests aren’t sufficient. Y cuando metes agentes de IA en la ecuación, la ilusión se convierte en problema de verdad. No es opinable. Es práctico. Y te va a doler si no te preparas.

La promesa era bonita. Escribe la especificación, lanza unos tests, suelta un agente, y voilà: código. Suena como un truco de magia barato. Pero la magia no limpia deudas técnicas. La magia solo las acelera.

Resumen rápido (lectores con prisa)

Qué es: Capturar decisiones técnicas efímeras como artefactos auditable (spec, tests y registro de decisiones).

Cuándo usarlo: Siempre que agentes de IA o cambios rápidos modifiquen comportamiento crítico.

Por qué importa: Sin trazabilidad las decisiones quedan en chats y commits huérfanos; eso genera deuda técnica no atribuible.

Cómo funciona (resumido): Leer diffs, extraer decisiones, pedir aprobación humana y actualizar spec/tests con registro.

Por qué las specs y los tests fallan

Un código que pasa todos los tests puede ser un desastre elegante. Puede consumir memoria, colapsar bajo concurrencia o romper la invariant que nadie documentó.

Los tests —por sí solos— no capturan intención. Capturan salida. Y la intención es lo que de verdad se rompe cuando un Product Manager cambia una regla a las tres de la madrugada.

Tests vs intención

Recuerda a Margaret Hamilton con su pila de papeles y cinta adhesiva. Ella no estaba haciendo “scripts”; estaba diseñando resiliencia. Llevaba la arquitectura en la cabeza porque no había alternativa. Hoy no se trata de memoria humana: se trata de contexto. Y los LLMs lo tienen fragmentado.

Escribir el código no es el paso final. Es la lupa que revela lo que la spec olvidó. Implémentalo y la spec te devolverá correcciones. No al revés. Ese es el flujo honesto que muchos olvidan.

Implementación y decisiones

Speedrun histórico: estamos reinventando problemas ya resueltos. La comunidad de IA está “speedrunneando” la historia del software: volver a tropezar con acoplamientos, incoherencias, dependencias ocultas. Cuando ni tú ni la IA pueden sostener la visión completa, lo que obtienes no es progreso: es ruido estructural.

Esto no es una discusión teórica. Mira los proyectos que intentan ejecutar Python en Rust. Tests completos. Especificaciones martilladas. Y aún así—hilos de 20 comentarios sobre cómo debería comportarse una función. ¿Por qué? Porque el comportamiento observado y el comportamiento deseado no siempre coinciden en el mundo real. La implementación revela las zonas grises. Y las zonas grises necesitan decisiones, no conjeturas.

Decisión = intención registrada. Si una IA sugiere “arreglar X así” y nadie lo documenta, ¿quién responde cuando eso explota? Sin trazabilidad, la autoría desaparece. Los commits quedan huérfanos. Las decisiones quedan atrapadas en chats. Eso es un cáncer técnico que se expande silencioso.

Necesitas convertir intención en artefacto. No más “lo arreglé en local”. No más “lo discutimos en Slack”. Necesitas un registro auditable: qué se decidió, por qué, quién lo aprobó, y en qué rama quedó.

Plum y trazabilidad

Ahí entra Plum. No porque sea mágico, sino porque cumple una tarea concreta: transforma decisiones efímeras en evidencia material. Lee diffs. Escanea traces. Extrae decisiones. Te pregunta “¿lo apruebas?”.

Si dices que sí, actualiza la spec y genera un registro .jsonl con la decisión, la autoría y la traza. Es la plomada para tu triángulo spec ↔ tests ↔ código.

No es la única forma, pero la idea es la idea:

  • captura las decisiones,
  • exige aprobación humana,
  • sincroniza spec y tests,
  • y audita la intención.

Práctico: cómo empezar sin reinventar la rueda

  1. Escribe la spec como contrato, no como aspiración. Si falta un caso límite, añádelo. Si no se puede automatizar, hazlo explícito.
  2. Invierte en tests que describan intención, no solo outputs. Los property tests y las invariantes sistémicas son el equivalente a los checks de seguridad en un avión.
  3. Captura los traces del agente. Que estén en el repo. Que no vivan solo en la ventana del chat.
  4. Extrae decisiones en cada commit. Pide aprobación humana antes de actualizar la spec.
  5. Bloquea merges si la spec—tests—código no están sincronizados. Sí: pon reglas duras en CI.

Si tu respuesta inmediata es “nuestra organización no hará eso”, entonces ya perdiste. La opción no es hacerlo o no hacerlo. Es hacerlo hoy o pagar por horas de desastre mañana.

Modularidad extrema, o el arte de no romper todo con una línea

Si un agente necesita entender 50 archivos para cambiar una feature, tu arquitectura es culpable. Divide, desacopla, define boundaries estrictas. Interfaces claras. Contratos pequeños y firmes. Haz que los cambios sean locales y verificables. Así los agentes tienen probabilidades reales de acertar.

Limitaciones de los LLMs

No te engañes: los LLMs son herramientas brutales. También son miopes por diseño: ventana de contexto, sesgo de prompt, falta de visión de producto. Los modelos pueden sugerir refactors; no pueden entender roadmaps ni retener trade-offs históricos. La validación humana no es ornamental. Es esencial.

Valor actual: tests y especificaciones vivas

El valor actual ya no está en la sintaxis. Está en la suite de tests. En las especificaciones vivas. En los artefactos de decisión. El código se deja atrás. Los tests y las especificaciones sobrevivirán a generaciones de actores.

Un ejemplo real —y sencillo

Imagina que tu PM cambia la regla de cálculo de una comisión. Un ingeniero empuja el hotfix, el test unitario pasa. ¿Y el resto?

  • ¿Se actualizaron las pruebas de integración?
  • ¿Las reglas de caching se siguen cumpliendo?
  • ¿Se respetan las invariantes fiscales?

Si la respuesta es “no lo sé”, fallaste en gobernanza. Si la respuesta es “sí, lo sabemos y está registrado”, ganaste.

Cultura + Herramienta = Supervivencia

No puedes automatizar cultura. Pero puedes diseñarla. Exige que cada decisión relevante tenga un artefacto. Añade a tu pipeline la obligatoriedad de reconciliar spec↔tests↔código antes del merge.

Esto suena duro. Lo es. Pero sin esas reglas, el “move fast” vuelve rápidamente a ser “move fast and break everything—and then no one knows why”.

¿Quieres algo fácil de ejecutar ahora?

Instala plum-dev en una rama pequeña. Apunta Plum a tu carpeta de specs y a tu suite de tests. Ejecuta un par de commits con agentes. Observa cómo las decisiones dejan de evaporarse en chat. Si no puedes hacerlo hoy, al menos empieza a exigir que cada PR documente la decisión que justifica el cambio.

No se trata de quitar velocidad. Se trata de mantenerla con control. Agentes que generan código a la velocidad de la luz + procesos que no controlan la intención = desorden a escala.

FAQ

 

 

Respuesta: ¿Qué hace Plum y por qué es relevante?

Plum transforma decisiones efímeras en evidencia material: lee diffs, escanea traces, extrae decisiones y solicita aprobación humana para actualizar specs y generar registros .jsonl con decisión, autoría y traza.

Respuesta: ¿Por qué registrar decisiones en vez de confiar en commits y chats?

Porque los commits y chats no proporcionan trazabilidad estructurada: la autoría se pierde, las decisiones quedan huérfanas y no hay un artefacto auditable que explique el porqué de un cambio.

 

Respuesta: ¿Cómo se integra esto en CI sin frenar al equipo?

Implementando reglas de bloqueo en CI que exijan sincronía spec—tests—código y aprobaciones humanas para cambios relevantes. Esto añade pasos obligatorios, no burocracia: evita horas futuras de investigación y corrección.

Respuesta: ¿Qué tipo de tests son prioritarios?

Tests que describan intención: property tests, pruebas de integración e invariantes sistémicas. Prioriza pruebas que validen contratos y comportamientos críticos, no solo outputs unitarios.

Respuesta: ¿Cómo evito que los agentes provoquen ruido estructural?

Diseña arquitectura modular con boundaries claros, interfaces pequeñas y cambios locales verificables. Captura traces y decisiones en el repo y exige aprobación humana antes de aplicar cambios en specs.

Respuesta: ¿Qué límites tienen los agentes y los LLMs?

Son herramientas con ventana de contexto y sesgos de prompt; no retienen trade-offs históricos ni entienden roadmaps. Pueden sugerir refactors, pero requieren validación humana para decisiones estratégicas.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *