Tag: AI

  • Implementa Spec-First y TDD para asegurar código con Claude Code

    Implementa Spec-First y TDD para asegurar código con Claude Code

    Spec-First + TDD: el combo que hace que Claude Code no rompa nada

    Tiempo estimado de lectura: 4 min

    • Spec-First transforma requisitos en contratos ejecutables que eliminan ambigüedades.
    • TDD convierte esos contratos en tests que fallan primero (Red) y obligan a implementar hasta pasar (Green).
    • El flujo reduce suposiciones del agente, evita happy-paths y deuda técnica silenciosa.
    • Requiere versionar specs y tests junto a la implementación para trazabilidad y control.

    Spec-First + TDD: el combo que hace que Claude Code no rompa nada. Díselo a cualquier equipo que delega implementaciones críticas a un agente y observarás tres problemas: suposiciones, happy-paths y deuda técnica que aparece en silencio. Este patrón invierte el orden habitual: especificación primero, tests que fallan después, implementación solo para pasar tests. Resultado: la IA implementa contra contratos ejecutables, no contra intuiciones.

    Resumen rápido (lectores con prisa)

    Spec-First convierte requisitos en contratos ejecutables. TDD transforma esos contratos en tests rojos que deben pasar. El agente implementa únicamente para lograr que pnpm test devuelva exit code 0. Menos ambigüedad, más trazabilidad, menos regresiones.

    Spec-First + TDD: qué es y por qué lo necesitas con Claude Code

    Claude Code y otros agentes son excelentes generadores de código, pero su entrenamiento los empuja a soluciones “plausibles”, no necesariamente correctas para tu dominio. La solución no es prompts más largos; es cambiar el flujo de trabajo.

    Spec-First + TDD combina:

    • Spec-First: transformar requisitos en un contrato preciso y ejecutable (feature-spec.md).
    • TDD: traducir ese contrato a tests que inicialmente fallan (Red).
    • Implementación: conceder al agente la tarea de alcanzar el verde (Green) ejecutando y corrigiendo hasta que pnpm test devuelva exit code 0.

    Links útiles: Claude Code docs y Vitest para ejemplos de runners.

    Flujo operativo paso a paso

    1) Escribir la especificación (Spec)

    La especificación no es un texto largo: es un contrato. Define funciones, inputs, outputs, errores y reglas inmutables.

    Ejemplo (feature-spec.md):

    Feature: applyDiscount(order, coupon)
    
    Función: applyDiscount(order, coupon)
    Inputs:
    - order: { id, subtotal, userId, items[] }
    - coupon: { code, type: 'percentage'|'fixed', value, minOrder, expiresAt }
    
    Reglas:
    - Si coupon.expiresAt < now -> DiscountExpiredError
    - Si order.subtotal < coupon.minOrder -> OrderBelowMinimumError
    - total = max(0, subtotal - discount)
    

    Si necesitas respuesta HTTP o formatos JSON exactos, escríbelos. Nada queda implícito.

    2) Generar esqueletos de tests que fallen (Red)

    Pide a Claude que genere solo los tests: archivos Vitest/Jest que describan las aserciones exactas. Estos tests deben fallar inicialmente porque la implementación aún no existe.

    Ejemplo breve (applyDiscount.test.ts):

    import { applyDiscount } from './applyDiscount'
    import { DiscountExpiredError } from './errors'
    
    it('lanza DiscountExpiredError si el cupón expiró', () => {
      expect(() => applyDiscount(orderExpired, couponExpired)).toThrow(DiscountExpiredError)
    })
    

    Ejecuta pnpm test localmente o desde el agente. Verás rojo: eso es correcto. Tienes un contrato ejecutable.

    3) Implementación: el agente repara hasta verde

    Autoriza a Claude a escribir el código con una instrucción clara:

    “Implementa applyDiscount() conforme a feature-spec.md. Ejecuta pnpm test y corrige hasta que todos los tests pasen. No modifiques los tests.”

    El agente iterará: escribir, ejecutar, leer errores, corregir. Termina cuando el runner devuelve 0. Esa condición objetiva sustituye la “autovalidación” del modelo.

    Beneficios reales y medibles

    • Trazabilidad: cada cambio está ligado a un test derivado de una especificación humana.
    • Determinismo: el criterio de finalización es el estado del test runner, no el juicio subjetivo del agente.
    • Menos regresiones: CI bloqueará commits que rompan contratos; el agente ya trabaja para pasar esa barrera.
    • Refactor seguro: optimizar sin romper es posible porque la suite revisa invariantes.

    Métricas a monitorear: porcentaje de PRs que pasan en la primera ejecución de CI, número de reverts por errores de negocio, tiempo medio para retomar trabajo en sesiones de agente.

    Cuándo aplicar este combo (y cuándo no)

    Aplica Spec-First + TDD cuando:

    • La lógica tiene invariantes críticas: facturación, pagos, permisos.
    • La feature afecta múltiples consumidores del API.
    • Vas a delegar implementación a sesiones autónomas del agente.

    No lo uses para:

    • Prototipos visuales donde la iteración UX prima.
    • Scripts puntuales o migraciones one-off.
    • Cambios triviales donde crear tests cuesta más que la implementación.

    Buenas prácticas y guardrails

    • Versiona feature-spec.md junto con la PR que implementa la feature.
    • No permitas que el agente modifique tests sin revisión humana.
    • Mantén artefactos pequeños: especificaciones por feature, no documentos gigantes.
    • Incluye en CLAUDE.md la referencia a specs y al contrato de proyecto para que Claude cargue el contexto inicial: esto reduce fricción y errores de interpretación (ver docs).

    Spec-First + TDD no es un ritual: es control. Si quieres que Claude Code deje de ser creativo y empiece a ser fiable, escribe contratos ejecutables primero, exige tests rojos y permite que la IA solo implemente para pasar tests. El resultado no es menos velocidad: es menos correcciones, menos deuda y más confianza en el código que llega a producción.

    Dominicode Labs

    Para equipos que automatizan con agentes y workflows, un laboratorio de pruebas y plantillas de specs acelera la adopción. Consulta Dominicode Labs como continuación lógica para crear artefactos y plantillas reutilizables.

    FAQ

    Respuesta: Spec-First es un contrato ejecutable que define funciones, inputs, outputs y errores de forma precisa. La documentación normal puede ser descriptiva; la spec exige reglas inmutables y formatos exactos que pueden traducirse a tests automatizados.

    Respuesta: Forzar tests rojos crea un criterio objetivo: la implementación debe satisfacer el contrato verificable. Evita que el agente implemente “por intuición” y asegura que el código cumpla casos límites y errores definidos.

    Respuesta: Usa runners como Vitest o Jest para ejecutar tests. Ejecuta pnpm test en CI y localmente para validar que el agente alcanzó exit code 0.

    Respuesta: Políticas de revisión de PR que bloqueen merges si los tests cambian sin aprobación humana y reglas de CI que rechacen cambios en archivos de tests son medidas efectivas. Además, incluye en el proceso de aceptación la verificación de artefactos versionados.

    Respuesta: Hay una inversión inicial: escribir specs y tests. Esa sobrecarga se compensa con menos rework, menos regresiones y mayor velocidad a largo plazo cuando los agentes trabajan contra contratos claros.

    Respuesta: Métricas recomendadas: porcentaje de PRs que pasan en la primera ejecución de CI, número de reverts por errores de negocio y tiempo medio para retomar trabajo en sesiones de agente.

  • Cómo evitar problemas al pedir código a la IA sin especificaciones

    Cómo evitar problemas al pedir código a la IA sin especificaciones

    ¿Quieres velocidad o quieres un desastre bonito en producción?

    Tiempo estimado de lectura: 6 min

    • Ideas clave:
    • Pedir código antes de una spec convierte velocidad aparente en deuda técnica real.
    • La spec funciona como el “system prompt” del repositorio: contratos, reglas y criterios de aceptación evitan improvisaciones.
    • Procesos concretos —plan, contratos, red teaming, tests— transforman las respuestas rápidas de IA en soluciones sostenibles.
    • El rol senior evoluciona hacia guardián de límites y políticas, no solo autor de código.

    Poca gente dice esto en las charlas con café gratis: pedir código antes de dar contexto es como contratar a un pintor y no decirle qué pared. Va a pintar rápido. Va a quedar espectacular al principio. Y al primer olor a humo descubrirás que pintó sobre el sistema eléctrico.

    Resumen rápido (lectores con prisa)

    La IA genera código probables según datos y prompts. Sin una spec que defina objetivos, stack, contratos y criterios de aceptación, las soluciones serán rápidas pero frágiles. Escribe SPEC.md, publica contratos, exige plan y tests; audita con red teaming. Conserva disciplina para convertir velocidad en sostenibilidad.

    Poca gente habla de esto: la IA no entiende tu negocio

    Los modelos de lenguaje son máquinas de probabilidades. No entienden SLAs, ni GDPR, ni las peleas internas por usar Next.js o Svelte. Responden con lo más probable según su entrenamiento y tu prompt. Si no les das reglas, toman decisiones por ti. Decisiones elegantes, pero improvisadas. Y la improvisación no escala.

    Lo que pasa cuando pides código demasiado pronto

    No es teoría. Es patrón repetido en equipos que adoptan IA rápido y disciplina lenta:

    Demo brillante en 48 horas. Integración rota, tokens expuestos, tests que fallan en producción. Dos semanas de refactor para rescatar el proyecto.

    Síntomas concretos

    • Componentes gigantes que hacen todo: UI, llamadas HTTP, validaciones y cambios en la base de datos. Un archivo de 500 líneas que asusta.
    • Mezcla de librerías por impulso: Fetch aquí, Axios allá, una dependencia vieja que “funcionaba” en un tutorial.
    • Flujos automatizados (n8n, Zapier) que fallan ante el primer timeout porque nadie pensó en idempotencia.
    • Tests que existen pero no validan casos reales. O peor: pruebas que pasan porque la spec nunca fue clara.

    Alucinación arquitectónica: la versión elegante del desastre

    No es solo que la IA invente funciones. Inventará abstracciones. Te propondrá un patrón porque en sus datos aparece muchas veces. Puede recomendarte Event Sourcing para una app de encuestas. Te entregará un PR perfecto. Y tú, encantado, lo mergeas.

    Hasta que llega la primera incidencia. Hasta que un miembro nuevo del equipo abre ese PR y no entiende nada. La IA actúa con convicción. Por eso hace falta liderazgo humano que coloque límites.

    La spec: no es burocracia. Es supervivencia

    Quien sigue llamando a la spec “ese PDF que nadie lee” está mirando el problema con los ojos cerrados. En la era de la IA la spec es la única forma de que la creatividad de la herramienta aterrice donde debe.

    Piensa en la spec como el System Prompt del repositorio. No es un texto largo que nadie abre; es la brújula del proyecto. Contiene: objetivos, stack, reglas innegociables, modelos de datos, respuestas ante fallos, y criterios de aceptación.

    Si la IA fuera un barco y tu equipo fuera la tripulación, la spec es la brújula. Sin ella, el barco navega rápido y choca.

    Cómo evitar pedir código demasiado pronto (pasos concretos)

    No es magia. Es disciplina con sentido. Haz esto antes del primer commit generado por IA.

    1) Escribe el objetivo en una frase

    ¿Qué problema resuelve este módulo? ¿Qué NO debe hacer? Si no puedes decirlo en una frase, no lo pidas. La IA no lo adivina.

    2) Define el stack y las reglas innegociables

    Next.js 14 OK. No usar SSR en X páginas. No introducir nueva dependencia sin CVE-check. ¿Postgres o Mongo? ¿Monolito o microservicios? Quítale opciones a la IA para que deje de improvisar.

    3) Publica contratos antes que código

    Interfaces TypeScript, esquemas Prisma, OpenAPI. Si la IA tiene contratos, genera lógica que encaje. Si no los tiene, generará sutilezas que rompen todo.

    4) Exige plan antes de ejecución

    Pide un plan en pasos. Repite: plan. No “hazlo tú ahora”. Pide la lista de entregables, aprobala y luego ejecuta cada paso con prompts acotados.

    5) Red Teaming desde el minuto cero

    Pídele a la IA que sea adversaria: “Rompe este diseño.” “¿Qué falla con 10k req/s?” “¿Qué pasa si el proveedor OAuth cae 30s?” Esto saca a la luz cuellos de botella y casos límite.

    6) Testes y ejemplos junto al contrato

    Cada endpoint debe venir con payloads válidos e inválidos y tests de aceptación. Si la IA genera código sin tests que validen la spec, recházalo.

    7) Guarda la spec en el repo (no en Google Docs)

    SPEC.md, .cursorrules, spec.json. Ponlo en la raíz. Que sea lo primero que lea el agente cuando genere código.

    Plantilla mínima de SPEC.md (pégala ya)

    No la copies sin adaptar, pero ten algo así en la raíz del repo:

    • Título en una frase: Objetivo del módulo.
    • Stack aprobado: Next.js 14, Node 20, Postgres 15.
    • Reglas innegociables:
      • No exponer secretos en frontend.
      • Mutaciones por Server Actions.
      • Máximo 2 dependencias nuevas sin revisión de seguridad.
    • Contratos principales:
      • /api/users POST -> CreateUserRequest, CreateUserResponse (interfaces TypeScript)
      • DB: users (id uuid, email text unique, password_hash text)
    • Criterios de aceptación:
      • Test de integración que crea usuario y valida hash.
      • Tiempo máximo respuesta: 500ms en endpoint crítico.
    • Política de secretos: usar Vault, nunca env vars en texto plano.
    • Responsables: Tech Lead: @ana, Owner: @carlos.

    Prompts que funcionan (ejemplos directos)

    Un buen prompt = contexto + restricciones + output esperado.

    Malo: “Hazme un CRUD de users.”

    Bueno: “Te doy la spec (inserta SPEC.md). Genera: 1) Interfaces TS 2) OpenAPI para /api/users 3) Tests de integración con ejemplos válidos/ inválidos. No uses librerías externas para hashing. Tiempo de respuesta <500ms.”

    Divide el trabajo en sprints cortos y verificables

    • Sprint A: Modelo de datos + contratos + tests.
    • Sprint B: Endpoints críticos + seguridad.
    • Sprint C: Observabilidad y despliegue.

    Aprobar cada sprint antes de pasar al siguiente.

    El nuevo rol del Senior: faro y guardián, no solo coder

    Antes bastaba con saber la sintaxis. Hoy el valor está en definir límites, auditar reglas y decidir qué complejidad merece implementarse. El senior no codifica menos; decide mejor. Su trabajo es preguntarse: ¿esta solución respeta la spec? Si no, veto.

    Historias que sirven como espejo

    Junior + Copilot = demo en 48h. Producción = caos. Reescritura 3 semanas.

    Mismo caso con spec: plan en 2 días + Claude para contratos + Copilot para implementación respetando interfaces = demo en 48h. Integración estable. Diferencia: disciplina.

    Metáfora corta y pegadiza

    La spec es el embudo; la IA es la manguera. Sin embudo, el agua corre por todos lados. Con embudo, llega donde debe.

    Cuándo no necesitas spec rígida

    Sí, hay espacio para improvisar. Para generar mocks, para prototipos exploratorios o pequeñas refactors locales. Pero regla práctica: si tocas contratos (APIs, DB, auth, infra), necesitas spec. Punto.

    Checklist rápido antes de pedir código a la IA

    • ¿Existe SPEC.md en la raíz?
    • ¿Hay interfaces/contractos definidos?
    • ¿Hay reglas de seguridad básicas?
    • ¿El prompt pide tests y ejemplos?
    • ¿Se solicitó plan paso a paso y fue aprobado?

    Si respondes no a cualquiera, NO pidas código aún.

    Urgencia real: deuda técnica multiplica costes

    Cada PR aceptado sin spec es una apuesta. Adivina quién paga si pierde la apuesta: tu equipo. La deuda técnica no se desintegra con buenas intenciones. Se compone. Actuar ahora cuesta horas. Rehacer después cuesta semanas, o clientes.

    CTA simple y directo

    Haz esto en los próximos 60 minutos: crea SPEC.md en la raíz con las seis secciones mínimas que te di. Respóndeme con “Quiero la plantilla” y te la mando lista para pegar en tu repo.

    Cierre que no cierra (a propósito)

    Si sigues pensando que la IA es una varita mágica, es tu opción. Tienes otra: gobernarla. La spec es la forma más barata de gobernarla. No es cómoda. Es efectiva. Y esto no acaba aquí: si quieres, te doy la plantilla, un prompt maestro listo para Claude y un .cursorrules de ejemplo. Dime cuál quieres y te lo envío ahora. Tus commits —y tu equipo dentro de seis meses— lo agradecerán.

    Dominicode Labs

    Si trabajas con automatización, agentes o workflows y quieres ejemplos prácticos de especificaciones y .cursorrules, revisa los recursos disponibles en Dominicode Labs. Es una continuación lógica para equipos que buscan convertir experimentos rápidos en procesos repetibles y seguros.

    FAQ

    ¿Qué es una SPEC.md y por qué es necesaria?

    Una SPEC.md es un archivo en la raíz del repositorio que define objetivo, stack, reglas innegociables, contratos y criterios de aceptación. Es necesaria para alinear generación de código automática con las restricciones del negocio y evitar decisiones improvisadas que generen deuda técnica.

    ¿Cuándo puedo pedir código sin spec?

    Para prototipos exploratorios, mocks o pequeños refactors locales. Si el cambio afecta APIs, DB, auth o infra, siempre usar spec. Esa es la regla práctica del artículo.

    ¿Cómo garantizo que la IA respete los contratos?

    Publica interfaces TypeScript, OpenAPI o esquemas en el repo antes de pedir código. Exige tests que validen esos contratos y revisa que las implementaciones pasen los tests de integración definidos en la spec.

    ¿Qué contiene un criterio de aceptación sólido?

    Entradas y salidas esperadas, límites de rendimiento (ej. tiempo máximo 500ms), condiciones de error y tests de integración que validen el comportamiento en casos válidos e inválidos.

    ¿Quién debe ser responsable de la spec?

    Responsables claros: Tech Lead y Product Owner. En el ejemplo: Tech Lead: @ana, Owner: @carlos. Debe estar versionada en el repo y ser lo primero que lea cualquier agente automatizado.

    ¿Cómo auditar seguridad en dependencias sugeridas por IA?

    No introducir nuevas dependencias sin revisión de seguridad: CVE-check, análisis de licencia y una prueba mínima en entorno aislado. La spec puede imponer un máximo de dependencias nuevas sin revisión.

  • Cómo evitar la deuda técnica al integrar agentes de IA en el desarrollo

    Cómo evitar la deuda técnica al integrar agentes de IA en el desarrollo

    ¿Y si la velocidad que te vendieron como progreso es, en realidad, el motor que va a deshacer tu arquitectura?

    Tiempo estimado de lectura: 8 min

    • Ideas clave:
    • Integrar agentes de IA sin capturar intención produce deuda técnica a escala.
    • Necesitas trazar decisiones → requerimiento → test → código y hacerla canónica.
    • Una herramienta como Plum no pinta paredes; convierte intención volátil en artefactos persistentes.
    • Gobernanza debe vivir fuera del agente: hooks, CI y aprobaciones humanas son imprescindibles.

    Introducción

    ¿Y si la velocidad que te vendieron como progreso es, en realidad, el motor que va a deshacer tu arquitectura?

    Poca gente lo dice sin rodeos: integrar agentes de IA para escribir código sin un sistema que capture la intención es una receta perfecta para deuda técnica a escala industrial. Y no hablo de “posibles problemas”. Hablo de que, hoy, el código puede crecer más rápido de lo que cualquier humano puede leer —y eso duele en producción.

    This is her code. This is what she was managing. This is her VS code.

    Margaret Hamilton sujetó esa complejidad con una pila de impresiones. Ella no tenía prompts; tenía procedimientos. Nosotros tenemos prompts y convicciones ingenuas.

    Vamos al punto.

    Resumen rápido (lectores con prisa)

    Plum es una herramienta de gobernanza que intercepta commits, extrae decisiones y las convierte en artefactos trazables. Úsala cuando quieras que las decisiones que toman agentes o developers queden registradas y enlazadas a specs, tests y código. Importa porque previene deuda técnica acelerada por IA y funciona mediante git hooks, diffs, y un flujo de aprobación humana.

    1) El problema (simple y aterrador)

    Si un Product Manager edita una regla en producción, ¿el resto del sistema cambia con ella?

    En la práctica, no.

    Los hotfixes saltan directo al trunk.

    Los tests se rompen en silencio.

    Las specs siguen siendo documentos en Markdown que nadie actualiza.

    Y cuando introduces agentes de IA en ese mix, la cosa se acelera: los LLMs toman micro-decisiones en chats, tú implementas, haces commit y la “intención” se evapora.

    Resultado: código con autoría pero sin porqué. Comportamiento sin contrato. Equipos que arreglan cosas por intuición y no por diseño.

    2) Por qué los tests y specs no bastan

    Un test valida un output. No captura intención.

    Un spec define un contrato —hasta que alguien lo ignora.

    La implementación revela límites: casos borde, problemas de estado, compromisos de rendimiento. La única forma real de enriquecer una spec es escribir el maldito código. Implementar obliga a decidir. Y esas decisiones deben quedar registradas.

    3) ¿Qué hace falta?

    • Capturar decisiones. No dejar que vivan en el chat.
    • Vincular decisión → requerimiento → test → código.
    • Hacer que esa trazabilidad sea canónica y no opcional.

    Sin eso, tus agentes son obreros hiperproductivos que construyen habitaciones sin planos. Velocidad sin planos = casa que se cae.

    4) Plum: la plomada que no pinta paredes

    No es mágica. No genera código bonito.

    Plum hace otra cosa muchísimo más valiosa: transforma intención volátil en artefacto persistente.

    Qué hace Plum (sí, práctico)

    • Intercepta commits via git hooks.
    • Lee diffs y scans de traces de agentes.
    • Extrae decisiones (qué, por qué, quién).
    • Deduplica lógicas repetidas.
    • Te obliga a aprobar/rechazar/editar antes de permitir el commit.
    • Si apruebas, actualiza specs Markdown y genera un .jsonl con la decisión, autoría y trazas.
    • Ejecuta un sync que mapea spec ↔ tests ↔ código y muestra huecos de cobertura.

    Metáfora: la plomada cuelga del trípode y te dice si la pared está vertical. Plum no pinta; evita derrumbes.

    5) Por qué esto no puede ser una “skill” dentro del agente

    Una skill vive dentro del agente. Es una sugerencia.

    Un control de gobernanza tiene que vivir fuera. Debe poder bloquear commits, correr en CI y ser determinista.

    Si la herramienta fuera sólo otra respuesta del LLM, se ignoraría. Punto.

    6) Problemas reales a resolver (y por qué no es trivial)

    • Umbral de interrupción: si cada hotfix genera cinco decisiones para revisar, los devs odian la herramienta. Necesitas tolerancias dinámicas: que el sistema sólo te despierte para decisiones vagas, peligrosas o contradictorias.
    • Dedupe y fuzzy decision ID: identificar decisiones no es binario; es difuso y repo-específico. Necesitamos algoritmos ajustables y feedback humano.
    • Rollbacks automáticos: si rechazas una decisión, el sistema debería revertir el cambio relevante o pedir al agente que rehaga la tarea coherentemente. Hoy eso no está pulido.
    • Spec sharding: las specs crecen. Hay que fragmentarlas en requisitos testables. Un LLM puede ayudar a shardear, pero hay que diseñarlo.
    • Integración de test runners: en la versión actual Plum está acoplado a pytest. Necesitamos soporte agnóstico: conformance tests, runners multi-lenguaje, harnesses de integración.
    • Escalabilidad: en proyectos monolíticos gigantes aún no sabemos si el approach escala. Téstealo en una rama pequeña antes de clonar tu repo legacy.

    7) Cómo se gana valor real (dejando de ser postura)

    • Haz que cada decisión importante deje rastro. No excepciones.
    • Exige aprobación humana para decisiones con impacto.
    • Vuelve la spec viva: que el archivo Markdown no sea un monumento a la intención, sino el contrato vigente.
    • Los tests deben describir intención, no solo outputs. Property tests e invariantes sistémicas son tus nuevos héroes.
    • Si un agente necesita leer 50 archivos para cambiar una función, rehace la arquitectura: modularidad extrema, boundaries claros.

    8) Diseño técnico inteligente (lo que aprendí construyéndolo)

    • Usa git hooks como checkpoint. Si el commit no pasa la validación de decisiones, el commit falla.
    • Mantén un .plumignore para no disparar reviews por cambios triviales (README, docs, etc.).
    • Almacena estado y config en una carpeta oculta (.plum). Versiona el .jsonl.
    • Deduping y parsing de specs: estructura las llamadas LLM con DSPy para hacerlas más deterministas y testables.
    • Router de modelos: no todo exige GPT-costoso. En dedupe puedes usar un modelo OSS rápido. La experiencia del dev gira alrededor de latencia.
    • Diseña la UX: permitir modos (silent, strict, dangerously-approve) para distintos contextos.

    9) Ejemplo mínimo de flujo (para que lo pruebes en 15 minutos)

    • pip install plum-dev
    • cd repo (with specs.md and pytest suite)
    • plum init → apunta a folder de specs y a tests
    • Haz cambios con tu agente y commit
    • Si hay decisiones, git commit fallará y te pedirá revisión
    • Aprobar actualiza spec; reject detona rollback o workflow manual según tu configuración

    10) Umbral y gobernanza: políticas prácticas

    • En sistemas críticos: tolerancia cero. Todo pasa por aprobación humana.
    • En prototipos: modo “agile fast-lane” para no morir de fricción.
    • En equipos mixtos: definir perfiles por carpetas/paquetes. Modules core = strict; UI experimental = lenient.
    • Pipeline: bloquear merges si spec↔tests↔código no están sync. Es duro, sí. Necesario, también.

    11) Cultura y disciplina

    No se automatiza cultura. Se diseña.

    Pide que cada PR incluya:

    • ¿Qué decisión justificó este cambio?
    • ¿Qué requisitos se actualizaron?
    • ¿Qué tests nuevos cubren la decisión?

    Y deja que la herramienta coja esos metadatos y los convierta en .jsonl rastreables.

    12) Lo práctico y lo urgente

    • Si ya usas agentes y no tienes este tipo de control, estás acelerando una deuda técnica que no podrás pagar. No es dramático; es inevitable.
    • Prioridad de adopción:
      • 1. Empezar a capturar traces.
      • 2. Agregar hooks que bloqueen commits sin revisión de intención.
      • 3. Transformar specs en contratos testables.
      • 4. Automatizar sync y coverage mapping.

    13) ¿Qué pasa si no lo haces?

    Velocidad hoy = caos mañana.

    Cuando un bug crítico aparezca a las 2 AM, nadie sabrá por qué la regla se cambió. Commits huérfanos. Blame que no sirve. Migraciones peligrosas. Equipos quemados. Clientes enfadados.

    14) No todo es miedo: oportunidades enormes

    • Auditoría real sobre decisiones: útil para compliance y seguridad.
    • Mejor onboarding: nuevos devs leen el árbol de decisiones para comprender el porqué.
    • Menos discusiones eternas en PRs: si la decisión está bien documentada, la discusión baja y la calidad sube.
    • Productividad con control: velocidad + gobernanza = ventaja competitiva.

    15) Cierre con acción concreta

    Instala la plomada. Prueba en una rama pequeña. No por postureo. Por supervivencia técnica.

    Si quieres:

    • Te mando un template de .jsonl para decisiones.
    • Te paso un flujo de PR que puedes pegar en tu repo.
    • Te doy el checklist para integrar Plum en CI en 15 minutos.

    Respóndeme este mensaje con “Mándame el template” o corre ahora:

    • pip install plum-dev
    • cd tu-repo
    • plum init
    • haz un commit con un agente y observa qué decisiones aparecen.

    Esto no acaba aquí.

    Si no empiezas a capturar intención hoy, tus agentes construirán un legado que nadie querrá mantener mañana. Empieza por un archivo .jsonl. Empieza por una regla dura en tu CI. Haz que la próxima vez que alguien pregunte “¿por qué esto existe?” la respuesta esté en el repo y no en el recuerdo difuso de una conversación vieja.

    ¿Quieres el checklist y el template ahora? Dímelo. Y mientras lo instalas, piensa en esto: velocidad sin plomada es solo una forma elegante de cavar tu propia trampa.

    Para quien está explorando gobernanza de agentes y workflows, una continuación lógica es revisar investigaciones y herramientas de integridad técnica desarrolladas por equipos que experimentan con estos retos. Consulta Dominicode Labs como punto de referencia para materiales y experimentos relacionados con trazabilidad de decisiones y automatización segura.

    FAQ

    ¿Qué es Plum y para qué sirve?

    Plum es una herramienta de gobernanza que intercepta commits, extrae decisiones desde diffs y trazas de agentes, obliga a revisarlas y las convierte en artefactos persistentes (.jsonl) y actualizaciones en specs Markdown. Sirve para capturar intención y vincularla con tests y código.

    ¿Por qué no bastan los tests y las specs?

    Porque un test valida un output y una spec es un contrato que puede quedarse desactualizado. La implementación revela decisiones operacionales que deben quedarse registradas; solo ejecutar y aprobar esos cambios garantiza que la spec refleje intención real.

    ¿Cómo se integra Plum en el flujo de trabajo?

    Plum se integra mediante git hooks que interceptan commits, revisan diffs y traces, y requieren aprobación humana para cambios con decisión. Si se aprueba, Plum actualiza specs y genera el registro .jsonl; si no, puede revertir o pedir una re-ejecución coherente.

    ¿Qué pasa si rechazo una decisión durante el commit?

    Según la configuración, el rechazo puede detonar un rollback automático del cambio relevante o iniciar un workflow manual que pida al agente rehacer la tarea coherentemente. El comportamiento exacto depende de la policy definida.

    ¿Plum afecta la experiencia del desarrollador?

    Sí: introduce una fricción intencional para decisiones relevantes. Para evitar rechazo por exceso de ruido, Plum debe soportar tolerancias dinámicas (modos silent, strict, dangerously-approve) y un .plumignore para cambios triviales.

    ¿Es Plum dependiente de un test runner?

    En su versión inicial Plum está acoplado a pytest, pero el objetivo es soportar runners multi-lenguaje y conformance tests para ser agnóstico respecto al ecosistema de pruebas.

    ¿Cómo empezar con Plum sin romper el equipo?

    Prueba en una rama pequeña, habilita modos lenientes para partes experimentales del repo y aplica tolerancia cero solo en módulos críticos. Empieza por capturar traces y agregar hooks progresivamente.

  • Cómo usar Claude Code para tareas sin ser developer

    Cómo usar Claude Code para tareas sin ser developer

    Es claude code tan solo para developers ? 3 cosas que puedes hacer con claude sin ser developer

    “Tiempo estimado de lectura: 3 min”

    • Claude Code es una herramienta orientada a terminales y repos; Claude (modelo web/API) ofrece razonamiento técnico accesible sin instalar dependencias.
    • Con Claude puedes diseñar y depurar workflows en herramientas como n8n (automatización), transformar y analizar datos, y generar documentación y diagramas (Mermaid, OpenAPI).
    • La diferencia clave no es saber programar, sino estructurar problemas y validar hipótesis técnicas usando el modelo web/API.

    Introducción

    Es claude code tan solo para developers ? Si escuchaste “CLI” y cerraste la puerta, respira: la respuesta técnica es sí —pero la historia completa no es tan simple.

    Claude Code (el agente CLI de Anthropic) está pensado para terminales, repos y tareas que tocan el código. Pero Claude, el modelo, vive en la web, en APIs y en integraciones: te da razonamiento técnico sin obligarte a teclear npm install. Aquí te explico por qué importa y tres cosas concretas que puedes hacer sin ser developer.

    Resumen rápido (lectores con prisa)

    Qué es: Claude Code es un agente CLI; Claude (modelo) se accede vía web/API e integraciones.

    Cuándo usarlo: Usa Claude Code si un agente debe tocar tu repo y ejecutar tests; usa Claude Web/API para razonamiento, diseño de flujos y transformación de datos.

    Por qué importa: Permite a non-devs con criterio diseñar, validar y documentar soluciones técnicas sin convertirse en especialistas en sintaxis.

    Cómo funciona: En vez de escribir sintaxis, describes escenarios, estructuras y reglas; el modelo transforma esa descripción en snippets, esquemas y diagramas reutilizables.

    Es claude code tan solo para developers ? Lo esencial en 60 segundos

    Claude Code = herramienta para desarrolladores. Vive en la terminal. Requiere Git, variables de entorno y un repo que pueda inspeccionar y modificar.

    Claude (3.7 Sonnet y variantes) = modelo razonador accesible por web/API. No necesitas compilar nada, sí necesitas saber explicar problemas con precisión. En vez de escribir sintaxis, planteas escenarios, estructuras de datos y reglas. El peso se traslada del teclado al criterio.

    Traducción práctica: si eres product manager, automation builder o founder, puedes usar Claude como copiloto intelectual. No como quien programa, sino como quien diseña y valida soluciones.

    1) Diseñar y depurar workflows en n8n — sin tocar Node.js

    n8n es el lugar donde los flujos se vuelven reales. Pero cuando un JSON llega sucio o una API no tiene nodo nativo, la fricción aparece.

    Lo que haces con Claude:

    • Pegas el payload del webhook y pides: “Dame el fragmento JS para extraer estos campos y normalizarlos.”
    • Le pides la lógica de reintentos y manejo de errores: condiciones, backoff y notificaciones.
    • Si una API requiere HMAC o firma en cabeceras, Claude te escribe la plantilla para el nodo HTTP.

    Ejemplo (conceptual): le describes el JSON y obtienes el snippet listo para pegar en un Code Node de n8n. No tienes que memorizar async/await; solo validar la salida.

    Referencia: n8n (automatización)

    2) Transformar y analizar datos — sin pelear con hojas de cálculo eternas

    Limpiar datos es un agujero negro. Claude lo hace predecible.

    Casos concretos:

    • Generar regex para extraer emails, IDs o patrones específicos. (“Extrae solo .edu y .org que parezcan institucionales.”)
    • Convertir CSV/XML desordenados a JSON con esquema validado. Pegas 50 filas y pides el JSON-schema.
    • Redactar consultas SQL complejas: joins, ventanas, filtros por fechas. Le das la estructura de tablas y la métrica que quieres; él devuelve la query optimizada para tu caso.

    No es “codificar por ti”. Es convertir trabajo repetitivo y propenso a errores en instrucciones reproducibles.

    3) Documentación y diagramas técnicos que no te roban medio día

    El 70% del valor de una decisión técnica está en cómo se comunica. Claude entiende Mermaid.js y puede producir diagramas desde tu texto.

    Lo que recibes:

    • Código Mermaid listo para pegar en Notion o GitHub y ver el diagrama al instante.
    • Un borrador de OpenAPI a partir de la descripción de un endpoint (paths, parámetros, respuestas).
    • Un mapa de arquitectura cloud con dependencias y puntos de integración (ideal para alinear con ingeniería sin sonar inocente).

    Pequeña ventaja: llegas a la reunión con algo que se puede visualizar y discutir, no con una vaga idea.

    Docu: Mermaid (diagramas) · OpenAPI spec

    ¿Cómo decidir si usar Claude Code o Claude Web/API?

    Regla simple:

    • Si vas a dejar que un agente toque tu repo, ejecuciones y tests: Claude Code (requiere developer).
    • Si necesitas razonamiento, diseño de flujos, transformación de datos o documentación: Claude Web/API o integraciones (ideal para non-devs con criterio).

    El nuevo diferencial no es “saber programar”. Es saber estructurar problemas y validar hipótesis técnicas. Claude amplifica eso.

    Conclusión

    No conviertas la terminal en el test de tu valía. Aprende a describir problemas con precisión y tendrás una herramienta que piensa en arquitectura, no solo en sintaxis. Esto apenas comienza: la próxima ronda será cómo integrar Claude en tus procesos de despliegue y gobernanza sin romper producción.

    Fuentes útiles: Anthropic – Claude, n8n (automatización), Mermaid (diagramas), OpenAPI spec

    Para explorar implementaciones y experimentos relacionados con automatización y agentes, visita Dominicode Labs. Es una continuación lógica para quien quiere pasar del diseño a prototipos reproducibles.

    FAQ

    Respuesta: Claude Code es el agente CLI de Anthropic diseñado para operar en terminales y repos (requiere Git, variables de entorno y permisos de repo). Claude, en cambio, es el modelo accesible por web/API e integraciones y está orientado a razonamiento y generación sin necesidad de ejecutar comandos locales.

    Respuesta: No. Para acceder al razonamiento y generación de soluciones técnicas puedes usar Claude Web/API o integraciones; no necesitas ser developer, pero sí saber describir problemas con precisión.

    Respuesta: Sí. Puedes describir el payload o el problema y pedir snippets o plantillas listos para pegar en un Code Node de n8n, así evitas escribir Node.js desde cero.

    Respuesta: Generación de regex, conversión de CSV/XML a JSON con esquema validado, y redacción de consultas SQL complejas (joins, ventanas y filtros). Claude transforma tareas repetitivas en instrucciones reproducibles.

    Respuesta: Sí. Claude puede producir código Mermaid y borradores de OpenAPI que se pegan directamente en herramientas como Notion o GitHub para visualización inmediata.

    Respuesta: Elige que un agente toque tu repositorio cuando sea necesario ejecutar pruebas, aplicar cambios automáticos o inspeccionar código de forma programática. Si solo necesitas diseño, razonamiento o generación de artefactos técnicos, la web/API suele ser suficiente.

  • Implementación efectiva con Plan Mode en Claude Code

    Implementación efectiva con Plan Mode en Claude Code

    Plan Mode primero, código después: el workflow que cambia cómo trabajas con Claude Code

    Tiempo estimado de lectura: 5 min

    • Plan Mode obliga a auditar y planear antes de ejecutar cambios en código.
    • Workflow en tres fases: análisis, refinamiento y ejecución; cada fase reduce riesgo y scope de impacto.
    • Activa Plan Mode en cambios multiplataforma, código heredado o integraciones de librerías arquitectónicas.
    • Mide efectividad por integración sin rollback, estabilidad en CI y ahorro de horas en debugging.

    Plan Mode primero, código después es la regla que separa entregas limpias de correcciones interminables. Activa Plan Mode, deja que Claude analice el repositorio y produzca un plan antes de que toque una sola línea de código. Esa inversión de diez minutos evita horas de debugging por decisiones implícitas.

    Resumen rápido (lectores con prisa)

    Plan Mode obliga a auditar y planear cambios antes de codificar. Úsalo cuando el cambio implica múltiples archivos, código heredado o librerías que afectan la arquitectura. Workflow: análisis, refinamiento y ejecución. Mide por integración sin rollback y estabilidad en CI.

    Plan Mode primero, código después: qué es y por qué importa

    Plan Mode es un modo de sesión en Claude Code que obliga al agente a auditar el código existente, mapear dependencias y proponer una secuencia de cambios verificable antes de implementar. Se activa con Shift+Tab en sesiones interactivas de Claude Code; la documentación oficial lo describe como un flujo que prioriza planificación sobre ejecución (https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview y https://www.anthropic.com/claude).

    ¿Por qué importa? Porque los errores de diseño no son fallos de sintaxis: son decisiones implícitas que se propagan. Implementar primero amplifica esos errores. Planear primero los expone cuando aún cuestan cero cambios.

    Cómo funciona el workflow (práctico y repetible)

    El workflow consta de tres fases claras: análisis, refinamiento y ejecución. No son sugerencias; son pasos que los equipos efectivos repiten cuando integran agentes en su proceso.

    1) Análisis inicial (activar Plan Mode)

    Activa Plan Mode (Shift+Tab). Describe el objetivo como contrato, no como receta. Ejemplo: “Aísla la lógica de autenticación para pruebas unitarias sin DB” en vez de “usa repositorio para auth”. Deja que Claude liste archivos relevantes, dependencias directas y riesgos.

    2) Revisión y refinamiento (iterar sobre el plan)

    Lee el plan: archivos a tocar, orden propuesto, efectos secundarios y tests necesarios. Corrige límites de dominio si hace falta. Esa iteración es barata: texto, no commits. Aquí se define el alcance real y se evitan sorpresas de integración.

    3) Aprobación e implementación (ejecutar con control)

    Aprobas el plan y Claude implementa en el orden validado. Cada cambio es acotado, con tests adjuntos y notas de diseño. Si algo rompe, el impacto está limitado al módulo que se aprobó, no a toda la base de código.

    Ejemplo real de uso en migración

    Meta: migrar API REST a tRPC por módulos.

    Spec

    • Módulo A: AuthService (sin dependencias).
    • Módulo B: UserService (depende de A).
    • Módulo C: Billing (depende de B).

    Con Plan Mode, Claude devuelve: archivos a crear/modificar por módulo, tipos DTO esperados, tests unitarios y orden de merges. Implementación ocurre por sesión por módulo. Resultado: integraciones predecibles y rollback sencillo.

    Cuándo activar Plan Mode (criterio técnico)

    Activa Plan Mode cuando:

    • El cambio afecta múltiples archivos o contracts públicos.
    • Trabajas en código heredado que no conoces.
    • Vas a integrar una librería que afecta la arquitectura (auth, DB, infra).
    • La tarea es una refactorización o migración.

    No lo actives cuando:

    • El cambio es un ajuste pequeño en un único archivo.
    • Creas un archivo nuevo con una spec cerrada.
    • Resuelves un typo o validación trivial.

    El criterio es simple: a mayor riesgo arquitectónico, mayor valor del plan previo.

    Reglas prácticas para que Plan Mode funcione

    • Siempre comienza con CLAUDE.md actualizado. El agente leerá convenciones y patrones prohibidos antes de planear (si tu repo lo tiene, intégralo; si no, crea uno).
    • Exige que el plan incluya: archivos modificados, orden de cambios, tests a ejecutar y riesgos conocidos.
    • Valida el plan tú, un peer o el tech lead; las aprobaciones humanas reducen regresiones.
    • Mantén las sesiones acotadas: una sesión = un módulo. Evita planos globales indefinidos.

    Métricas que importan (no solo LOC/hora)

    Mide efectividad por:

    • Tiempo hasta integración sin rollback.
    • Número de handoffs con correcciones arquitectónicas.
    • Cobertura y estabilidad en CI tras cada merge.
    • Tiempo invertido en revisión del plan vs. horas ahorradas en debugging.

    Un plan de 10 minutos que evita 2 horas de corrección es ROI directo.

    Riesgos y límites honestos

    Plan Mode reduce errores, no elimina la necesidad de juicio humano. Si la spec es ambigua, Claude producirá una implementación ambigua más rápido. El agente no reemplaza decisiones críticas de diseño, trade-offs de rendimiento o consideraciones legales de seguridad. Su fuerza está en ejecutar lo que tú especificas mejor y antes de que toque escribir código.

    Conclusión

    Adoptar “Plan Mode primero, código después” cambia la métrica del equipo: de velocidad de salida a resiliencia de la plataforma. Si quieres que Claude Code deje de ser un generador de parches y pase a ser un colaborador técnico confiable, exige un plan. Haz que piense antes de tocar tu repo.

    Para equipos que exploran workflows, integraciones y automatización avanzada, consulta Dominicode Labs como continuación lógica del enfoque: recursos y experimentos centrados en agentes y productividad técnica.

    FAQ

    ¿Qué es Plan Mode?

    Plan Mode es un modo de sesión en Claude Code que obliga al agente a auditar el código existente, mapear dependencias y proponer una secuencia de cambios verificable antes de implementar.

    ¿Cuándo debo activarlo?

    Actívalo cuando el cambio afecta múltiples archivos, trabajas en código heredado, o integras librerías que afectan la arquitectura. Para cambios pequeños y aislados no es necesario.

    ¿Qué debe incluir un plan mínimo?

    El plan debe listar archivos a modificar, orden de cambios, tests a ejecutar y riesgos conocidos. También conviene indicar límites de dominio y criterios de aceptación.

    ¿Cómo reduce el riesgo en migraciones?

    Al definir el alcance y el orden de merge por módulo, limita el blast radius y facilita rollbacks. Permite validar la integración por partes con tests adjuntos.

    ¿Plan Mode reemplaza la revisión humana?

    No. Plan Mode reduce errores estructurales, pero las aprobaciones humanas siguen siendo necesarias para decisiones críticas y trade-offs no técnicos.

    ¿Qué métricas debe rastrear mi equipo?

    Tiempo hasta integración sin rollback, número de handoffs con correcciones arquitectónicas, cobertura y estabilidad en CI, y la relación entre tiempo de planificación y horas ahorradas en debugging.

  • Implementando Compound AI para Optimizar la Efectividad en Testing

    Implementando Compound AI para Optimizar la Efectividad en Testing

    ¿Quieres que la IA escriba código… o que lo arruine en silencio mientras nadie sabe por qué?

    Tiempo estimado de lectura: 8 min

    • Ideas clave:
    • Los LLMs no son inherentemente malos; el problema es soltarlos sin reglas ni orquestación.
    • Compound AI es orquestación: múltiples modelos, validadores, RAG y un controlador que decide.
    • Spec, Código y Tests deben mantenerse sincronizados; la trazabilidad y decisiones registradas son críticas.

    Introducción

    Poca gente lo dice claro: no es que los LLMs sean malos. Es que los estamos soltando sin reglas. Y rápido.
    Eso se nota cuando el triángulo Spec — Código — Tests se desincroniza a ritmo algorítmico. Y adivina qué aparece primero: deuda técnica.

    Claire Le Goues en CMU lo adelantó hace años. No es novedad; es evolución. Reparación automática de programas y análisis de cobertura no son juguetes académicos. Son la columna vertebral de cualquier agente que quiera escribir código que aguante en producción.

    Lo que estamos construyendo hoy se llama Compound AI. Y si lo manejas mal, es una mina.

    Resumen rápido (lectores con prisa)

    Compound AI: orquestación de múltiples modelos, validadores, bases de conocimiento (RAG) y un controlador.
    Úsalo cuando necesites código reproducible, verificable y trazable en producción.
    Importa porque reduce deuda técnica y fallos en producción al exigir specs operables, tests automatizados y decisiones registradas.
    Funciona mediante pipelines: inputs tipados, transformaciones, validación automática y decision logging.

    1) Por qué esto ya no es ML-only

    Los investigadores pueden inventar algoritmos bonitos. Pero la ingeniería de verdad exige cosas aburridas: orquestación de estado, reintentos inteligentes, persistencia de memoria, latencias aceptables y observabilidad.
    Necesitas backends robustos. PaaS. Infra que aguante agentes que lanzan 50 tareas concurrentes y esperan consistencia.

    2) DSPy y la estructuración de llamadas

    Frameworks como DSPy (o lo que quieras llamar ese nivel de orquestación) transforman llamadas LLM en flujos compilables.
    Piensa en DSLs para IA: inputs tipados, outputs comprobables, rutas deterministas. Menos “ensayo y error” y más pipelines reproducibles.

    3) Test-Time Inference y RLMs — lo que no es magia

    En vez de quemar ciclos entrenando eternamente, gastas cómputo en inferencia inteligente.
    Modelos de razonamiento (RLMs) exploran caminos, ejecutan validadores, comparan resultados y devuelven la versión que pasa las pruebas.
    Sí: eso cuesta. Sí: merece la pena cuando lo que quieres no es una demo, sino software que no explote a las 2AM.

    4) ¿Por qué necesitas ingenieros backend (con experiencia en PaaS)?

    Porque la solución no es un notebook de investigación. Es operación:

    • Orquestar estado entre modelos.
    • Persistir trazas y decisiones.
    • Manejar reintentos sin duplicar efectos.
    • Escalar validadores y tests en paralelo.
    • Aislar fallos y hacer rollback automáticos.

    Si tu equipo no tiene esto, el agente será como un aprendiz con acceso root: peligroso.

    5) El Triángulo que manda: Spec, Código, Tests

    Si uno se desincroniza, todo se va a la mierda. Punto.

    • La Spec debe ser operable. Markdown no basta. Necesitas specs con semántica, vinculadas a código y tests.
    • El Código debe exponer por qué existe. No solo el “qué”.
    • Los Tests no son opcionales. Deben ser ejecutados por el pipeline de agente antes de cualquier merge automático.

    Implementación ≠ caja negra. Implementación comunica intención. Y esa intención debe quedar como dato.

    6) Trazabilidad: la regla de oro

    Cada decisión que toma un agente necesita un artefacto: quién, cuándo, por qué, y qué alternativas se descartaron.
    Si el agente aplicó un “hack” para pasar un test, eso no puede quedar en un chat efímero. Tiene que vivir en tu repo, indexable. JSONL. PR metadata. Historia forense.

    ¿Por qué? Porque poder buscar “find all shortcuts” salva horas de debugging y evita que el mismo hack mute millón de veces.

    7) Integración práctica: stack mínimo para empezar hoy

    No necesitas toda una nave espacial. Esto es un MVP operativo:

    • Orquestador: un servicio que planifica pasos y guarda estado (puede ser una pequeña cola + DB).
    • Callers LLM: modelos rápidos (OSS) para edición y modelos potentes (RLM) para verificación.
    • RAG vector DB para contexto y specs.
    • Validadores: linters, pruebas unitarias, integración y un sandbox de ejecución.
    • Decision store: archivo versionado (.decisions.jsonl) por PR.
    • CI que no solo ejecuta tests, sino que verifica que la spec y los tests se actualizaron si el código cambió.

    8) Un flujo mínimo (ejemplo)

    1. Dev escribe o actualiza spec en formato operable.
    2. El agente genera código y propone cambios en una rama.
    3. Pipeline ejecuta tests + validadores.
    4. Agente intenta optimizar. Si aplica un atajo, registra una decisión en .jsonl. Commit falla si no hay artefacto.
    5. Reviewer aprueba la decisión o solicita cambio.
    6. Merge + sync spec/tests/código.

    Sí, agrega fricción. Es la fricción que salva producción.

    9) Herramientas y patrones recomendados

    • Esquemas validados: usa Zod o similar para validar outputs LLM cuando tocas boundaries.
    • Captura de decisiones: .jsonl con campos: id, pregunta, decisión, autor (LLM/humano), timestamp, diff link.
    • Umbrales configurables: “strict” para core, “lenient” para experiments.
    • Rollbacks automáticos: si una decisión se revoca, tus pipelines deben poder revertir o marcar la rama como needing-fix.
    • Observabilidad: traces de latencia, éxito de validadores, número de decisiones por PR.

    10) Cultura, no solo stack

    No automatices los valores. Automatiza la disciplina.
    Si el equipo ve la herramienta como un juez en lugar de asistente, la odiarán. Hazla útil. Hazla pequeña. Hazla punitiva solo cuando tenga que serlo.

    • Regla simple: cada cambio que no sea trivial necesita al menos una línea en la spec o una entrada en el decision log.
    • No más “and let it run and we go answer some email and then we come back and now I get a decision and I’m like, that’s insane. Don’t do that.” Si vas a delegar, que quede registrado.

    11) Riesgos reales y cómo mitigarlos

    • Ruido: Demasiadas decisiones pequeñas saturan. Solución: umbrales y agrupación por categoría.
    • Alucinaciones del LLM: Validadores estrictos y esquemas runtime.
    • Duplicidad de specs: Fragmenta specs por dominio y mantén ownership.
    • Ataques o leak de credenciales: todo secreto rotatable y accesible solo a procesos autorizados.

    12) Qué cambiar en GitHub (si tuvieras la varita mágica)

    • Markdown como entidad semántica. No solo texto.
    • Linkar decisiones ↔ specs ↔ tests ↔ diffs en la UI.
    • Búsqueda por “intención” (por ejemplo: “find decisions that relaxed auth checks”).
    • Hooks nativos que prevengan merges sin decision artifacts.

    13) Resultado: ¿qué ganas si lo haces bien?

    • Menos deuda acumulada.
    • Onboarding más rápido. Nuevos devs leen la historia de decisiones.
    • Automatización sin descontrol.
    • Auditoría real para compliance.
    • Velocidad que no se convierte en caos.

    14) No es sexy. Es efectivo.

    Las grandes respuestas técnicas no son flashes de genialidad. Son procesos con disciplina.
    Tenemos herramientas para bajar esa disciplina a la realidad operativa. Compound AI no es excusa para saltarse pasos. Es oportunidad para formalizarlos.

    ¿Quieres que lo vuelva práctico?
    Puedo:
    – Escribir el template de .jsonl para decisiones.
    – Diseñar el flujo de CI (GitHub Actions) que bloquee merges sin sincronía spec↔tests↔code.
    – Crear un checklist para ponerlo en marcha en 2 semanas.

    Respóndeme “Dame el template” o “Quiero la CI” y te lo entrego listo para copiar.
    Y recuerda: velocidad sin registro es solo una forma elegante de cavar tu propia trampa. Esto no acaba aquí.

    Si quieres avanzar en pipelines, validación y decision logging con ejemplos prácticos y plantillas, revisa los recursos y experimentos de Dominicode Labs. Es una continuación lógica para equipos que quieren pasar de prototipos a procesos operables. Encontrarás ejemplos de decision logs y patrones de integración que encajan con lo expuesto arriba.

    FAQ

    ¿Qué es Compound AI?

    Compound AI es la orquestación de múltiples modelos, herramientas de validación, bases de conocimiento (RAG) y un controlador que decide qué modelo o herramienta usar, cuándo y cómo, para producir resultados reproducibles y verificables.

    ¿Cuándo debo usar validadores estrictos?

    Usa validadores estrictos en componentes core que afectan seguridad, integridad de datos o disponibilidad. Para experimentos o prototipos puedes aplicar umbrales más lenient, pero documentándolo en el decision log.

    ¿Qué debe contener un decision log (.jsonl)?

    Campos mínimos: id, pregunta, decisión, autor (LLM/humano), timestamp y diff link. Debe ser indexable y versionado por PR.

    ¿Cómo evito que el agente aplique hacks sin supervisión?

    Bloquea commits sin artefacto de decisión; ejecuta validadores en CI; exige que cualquier atajo quede registrado en .jsonl y sea revisado por un humano antes del merge.

    ¿Qué cambios mínimos implemento en CI?

    1) Ejecutar tests y validadores automáticamente. 2) Comprobar que specs y tests cambien si el código cambia. 3) Fallar merges que no incluyan decision artifacts.

    ¿Cómo balancear fricción y velocidad?

    Define umbrales configurables: “strict” para core y “lenient” para experiments. Agrupa decisiones pequeñas y aplica políticas de batching para reducir ruido sin sacrificar trazabilidad.

  • Implementación de Function Calling en Modelos LLM para Automatización

    Implementación de Function Calling en Modelos LLM para Automatización

    ¿Quieres que un modelo de IA deje de ser un loro elegante y empiece a hacer cosas reales por ti? Bienvenido a las Function calling.

    Tiempo estimado de lectura: 5 min

    Ideas clave

    • Las Function calling permiten a un LLM devolver una estructura (normalmente JSON) indicando intención y parámetros para que el backend ejecute acciones reales.
    • Existen dos estilos principales: JSON Schema (estricto) y formato libre (flexible), cada uno con trade-offs de seguridad y predictibilidad.
    • Diseño seguro requiere validaciones, registros, sandboxes, rollback y, para operaciones críticas, un human-in-the-loop.
    • Arquitectura práctica mínima: catálogo de herramientas, orquestador, executor aislado, auditoría y mecanismos de reversión.

    Tabla de contenidos

    Introducción

    Poca gente habla claro sobre esto: las llamadas a funciones son la diferencia entre un chatbot inútil y un agente que mueve fichas en el mundo real. No es magia. Es arquitectura.

    Resumen rápido (lectores con prisa)

    Las Function calling permiten que un LLM deje de generar solo texto y devuelva una estructura (normalmente JSON) con intención y parámetros para que tu backend ejecute acciones reales. Usa JSON Schema para operaciones críticas y formato libre para prototipos; siempre valida y, para escrituras peligrosas, exige confirmación humana.

    ¿Qué son, en una frase?

    Son el puente que permite a un LLM dejar de generar puro texto y pedirle a tu sistema: “oye, ejecuta esto”. El modelo no ejecuta nada por sí solo. Lo que hace es devolver una estructura (normalmente JSON) con la intención y los parámetros. Tu backend toma ese JSON, ejecuta la función y devuelve el resultado al modelo. Fin.

    ¿Por qué importa más que otra “nueva característica”?

    Porque hasta ayer los LLMs eran como una enciclopedia parlante: óptimos para explicar, pésimos para actuar. Las Function calling rompen ese techo. Ahora el modelo puede:

    • Consultar una base de datos en tiempo real.
    • Lanzar un reembolso en Stripe.
    • Generar y ejecutar una consulta SQL.
    • Enviar un mensaje a Slack o disparar un workflow en n8n.

    Es como si le dieras manos al loro: sigue hablando, pero ahora también abre puertas.

    El ciclo real: cómo funciona sin volverte loco

    No inventes un diagrama mental complejo. Hay cinco pasos claros y repetibles:

    1. Tu app manda el prompt + la descripción de las herramientas disponibles.
    2. El modelo decide: ¿lo puedo responder solo o necesito una herramienta?
    3. Si necesita, devuelve un JSON con el nombre de la función y parámetros.
    4. Tu backend valida y ejecuta la función real (API, DB, script).
    5. Devuelves el resultado al modelo. Él sintetiza y responde al usuario.

    Siempre hay una mano humana posible en el medio, sobre todo en operaciones peligrosas. Más abajo te explico por qué.

    Dos estilos de herramientas: JSON Schema o texto libre

    No todas las herramientas son iguales. Hay dos escuelas y cada una tiene su lugar.

    JSON Schema (estricto)

    Defines la función, tipos, campos obligatorios y enums. El modelo devuelve exactamente lo que espera tu backend. Es predecible, seguro y perfecto para integraciones REST y sistemas críticos. Ejemplo mental: la función crear_ticket exige titulo:string y prioridad:("alta"|"media"|"baja"). Punto y final.

    Formato libre (texto)

    El modelo genera un bloque de texto, código o comando. Ideal para análisis ad-hoc, scripts complejos o cuando necesitas flexibilidad absoluta. Requiere parsing robusto y sandboxes. Es más potente, pero también más peligroso si no controlas la entrada y la ejecución.

    ¿Cuándo usar cada una?

    • Si tu operación cambia estados críticos (pagos, borrados, cambios de permisos): usa JSON Schema y validaciones humanas.
    • Si estás haciendo análisis, prototipos o generación de consultas SQL que luego validarás: el modo libre puede acelerar prototipos, pero añade riesgo.

    Casos de uso que realmente importan (no los anuncios)

    • Customer Success: un agente recibe una queja, consulta el pedido en Shopify y, si procede, crea el reembolso en Stripe. Si la operación implica dinero, envía un checkpoint a un humano antes de ejecutar.
    • DataOps: un usuario pide “ventas por región ayer”. El LLM traduce a SQL, ejecutas, devuelves los resultados y el modelo te da el resumen en lenguaje natural.
    • Automatizaciones internas (n8n): en vez de tener flujos rígidos, el modelo decide qué nodos disparar, en qué orden y con qué parámetros, según la intención del usuario. Eso convierte tu automatización en dinámica, no en una secuencia predefinida.

    Una advertencia sin eufemismos: los modelos mienten (a veces)

    Alucinación de parámetros. Prompt injection. Errores sutiles. No es paranoia, es experiencia. Los LLMs pueden inventarse campos, malinterpretar enums o seguir instrucciones maliciosas ocultas en el prompt.

    Regla de oro

    • Automáticamente ejecuta lecturas (GET) si la operación es inofensiva.
    • Para escrituras (POST/DELETE/PUT) exige validación adicional: reglas en el backend o confirmación humana. Siempre. No, no es opcional.

    Human-in-the-loop: no es una filosofía, es ingeniería

    La idea es simple: deja que el LLM proponga, pero que un humano o una lógica de negocio firme el cheque para operaciones críticas. Dos patrones útiles:

    • Confirmación explícita: el LLM genera el payload, lo guardas y muestras a un humano para aprobar.
    • Validación automática: reglas en el backend que verifican coherencia, límites y permisos antes de ejecutar.

    Si haces esto bien, reduces riesgos drásticamente sin perder automatización.

    Arquitectura práctica: qué componentes necesitas

    No necesitas un stack del otro mundo. Necesitas disciplina.

    1. Registro de herramientas: catálogo con descripciones y esquemas JSON.
    2. Orquestador: recibe el JSON del LLM, valida y ejecuta. Aquí entra n8n, un backend propio o un servidorless.
    3. Sandbox/Executor: si vas a ejecutar scripts generados por el modelo, hazlo en un entorno aislado.
    4. Auditoría: logs de cada llamada, inputs y outputs. Esto no es solo para depurar; es para seguridad y cumplimiento.
    5. Rollback y revocación: especialmente si permites crear o borrar recursos.

    Un ejemplo mental (sin código complicado)

    Usuario: “Reembolsa el pedido 123 si no se ha enviado.”

    El LLM: decide que necesita verificar el estado del pedido → devuelve { action: "checkOrder", orderId: "123" }.

    Tu backend: consulta y devuelve { status: "pending", paid: true }.

    El LLM: con ese dato propone { action: "refund", orderId: "123", reason: "producto no enviado" }.

    Tu backend: valida política de reembolsos y, si todo ok, lo ejecuta o pide OK humano.

    Pistas y errores que nadie te dirá gratis

    • Nunca confíes en que la respuesta del LLM está “bien formateada”. Valida siempre.
    • Evita exponer funciones peligrosas sin restricciones de permiso.
    • Ten límites de tasa para evitar loops: un LLM llamando a una función que regenere prompts puede convertirse en un bucle infinito.
    • Si permites código, ejecútalo en containers efímeros con timeouts rígidos.

    Metáfora que pega y que funciona

    Las Function calling son como darle una tarjeta de crédito a un asistente. Con ella puede comprar lo que necesita, pero tú decides los límites, si necesita aprobación para ciertos tickets y a qué tiendas no puede entrar. Sin límites, te quedas sin dinero. Con límites y reglas, ganas productividad.

    Urgencia realista

    Si estás empezando a usar LLMs para interacción con sistemas reales y no diseñaste estas capas, estás pidiendo problemas. Empezar ahora con patrones sólidos (schemas, validaciones, humanos en la cadena) te ahorra migraciones dolorosas.

    ¿Quieres empezar ya?

    Haz esto en 3 pasos prácticos:

    1. Define las 3 funciones más críticas que quieres exponer (consulta de pedidos, emitir reembolso, crear ticket).
    2. Escribe schemas JSON mínimos para cada una y prueba el loop: prompt → LLM → JSON → backend → resultado.
    3. Añade validación humana para la más peligrosa y logs para todo.

    No te dejo solo: ¿seguimos con la parte técnica?

    Puedo enviarte:

    • Un checklist para diseñar tus schemas JSON.
    • Plantillas de orquestador para n8n con ejemplos de validación humana.
    • Estrategias para sandboxing y rollback.

    Respóndeme este mensaje y te doy la checklist completa y un ejemplo listo para copiar y pegar. Esto no acaba aquí: en la próxima entrega te muestro cómo migrar un flujo rígido de n8n a un agente LLM dinámico sin incendiar producción. ¿Te interesa?

    Dominicode Labs

    Si quieres ejemplos prácticos, plantillas y artículos relacionados con automatización, agentes y workflows, revisa Dominicode Labs. Es una continuación lógica para implementar patrones de Function calling en entornos productivos.

    FAQ

    ¿Qué diferencia hay entre JSON Schema y formato libre?

    JSON Schema es estricto: defines tipos, campos y enums y el modelo debe devolver estructura predecible. Formato libre permite flexibilidad para análisis o scripts complejos, pero requiere parsing y sandboxes adicionales.

    ¿Debo permitir que el modelo ejecute escrituras automáticamente?

    No. Para escrituras (POST/DELETE/PUT) exige validación adicional en backend o confirmación humana. Es la regla de oro indicada en el artículo.

    ¿Cómo prevengo loops entre el LLM y mis funciones?

    Aplica límites de tasa y reglas que detecten y rompan llamadas recursivas. Evita diseños donde una función cause regeneración automática de prompts sin control.

    ¿Qué registros debo guardar?

    Logs de cada llamada, inputs y outputs. Auditoría para depuración, seguridad y cumplimiento. Guarda también decisiones de validación y aprobaciones humanas.

    ¿Cuándo usar validación humana?

    Para operaciones críticas que afecten dinero, permisos o borrados irreversibles. También cuando las reglas automáticas no pueden garantizar seguridad suficiente.

    ¿Es seguro ejecutar código generado por el modelo?

    Solo en sandboxes aislados, con containers efímeros y timeouts rígidos. El artículo recomienda ejecutar código en entornos aislados y con controles estrictos.

  • Cómo crear prompts efectivos para generar código con IA

    Cómo crear prompts efectivos para generar código con IA

    ¿Quieres que tu proyecto salga de un prompt y se convierta en un producto real… o en otro experimento bonito que nadie mantiene?

    Poca gente lo dice así: usar Lovable o Bolt.new no te salva de las malas decisiones. Te da velocidad y una sensación de omnipotencia. Eso es peligroso. Si no pones reglas, estándar y criterio técnico, la IA te entregará un prototipo brillante y un desastre a medio plazo.

    Resumen rápido (lectores con prisa)

    Qué es: Lista de buenas prácticas para usar IA en generación de código de producción.

    Cuándo usarlo: Antes de delegar generación de pantallas, esquemas o integraciones críticas a un LLM.

    Por qué importa: Evita deuda técnica, fugas de seguridad y vendor lock‑in.

    Cómo funciona: Define contrato y plan primero; da contexto reducido al modelo y versiona prompts.

    Tiempo estimado de lectura: 6 min

    Ideas clave

    • Ventana de contexto es tu presupuesto: modulariza y da snippets pequeños.
    • Diseña tus tablas y ERD antes de pedir esquemas a la IA.
    • Plan First: valida el plan antes de generar código.
    • Evita vendor lock‑in y exige código estándar y control de versiones.
    • Seguridad: nunca hardcodees keys en el cliente; usa BFF y Secret Manager.

    1) El Context Window es tu presupuesto real

    La IA no tiene memoria infinita. La ventana de contexto es el límite de atención del modelo. Si tu app es un mamotreto con 20 componentes, 10 rutas y 3 librerías por feature, la IA terminará olvidando piezas críticas.

    Síntoma

    Pides una nueva pantalla y la IA borra imports o rompe tests que estaban bien ayer.

    Solución

    • Modulariza. Divide en microcomponentes. Un componente = una responsabilidad.
    • Un prompt = el componente y sus contratos (props, eventos, estado).
    • Mantén snippets pequeños y referencias externas. No le metabolismes el repo entero en una sola petición.

    Truco

    La ventana de contexto es la mochila del modelo. Pocas cosas, y bien organizadas —no todo el campamento adentro.

    2) Base de datos: tú diseñas las tablas, no la IA

    Lovable y Bolt.new son rápidos para scaffolding. Pero pedirle a la IA que “genere el esquema” suele acabar en redundancias y campos con nombres raros tipo “user_name_2”.

    • Regla dura: escribe el ERD primero. Define relaciones (1:N, N:M), claves foráneas, índices y tipos. Dale ese SQL o ese esquema inicial a la IA como contexto.
    • Si usas Supabase, prepara las migrations y políticas RLS antes de que la IA genere las pantallas.
    • Beneficio: menos prompts, menos correcciones, menos refactors dolorosos.

    3) Plan First, Code Later — no es sugerencia, es mandamiento

    Las herramientas muestran un plan. Léelo como si fuera el contrato que firmarás. Si el plan falla, el código será un remiendo.

    Preguntas que debes hacer al plan

    • ¿Entendió el flujo del usuario?
    • ¿Qué librerías propone y por qué?
    • ¿Qué estrategias de estado (local/global) va a usar?
    • ¿Qué testing planea (unit, e2e)?

    Si la IA propone algo raro, corrígelo en el plan. Luego ejecuta la generación.

    Pro-tip: agrupa requerimientos complejos en un solo prompt largo (Lovable) o en un bloque bien definido con ejemplos (Bolt.new). Gasta menos mensajes y evitas contradicciones.

    4) Vendor lock‑in y exportación: piensa en huir antes de casarte

    ¿Y si dentro de seis meses quieres migrar? ¿Qué pasa si Bolt.new cambia modelo de negocio? No te cases por default.

    • Exige código estándar: React+Vite+Tailwind o lo que tu equipo soporte.
    • Control de versiones: GitHub integrado y commits humanos. Que el repo sea clonable y arranque local.
    • Evita dependencias propietarias: libs que solo funcionan dentro del editor de la plataforma son bombas de tiempo.

    5) Manejo de diffs y errores cíclicos: corta el bucle

    La IA puede entrar en bucles de “arreglar-esto-romper-aquello”. Si ves repetidos fallos en el mismo bloque, deja de pedirle que arregle. Entra y corrige manualmente.

    • Técnica simple: si falla dos veces en el mismo lugar, resetea a un commit estable y arregla a mano. Luego vuelve a la IA.
    • Por qué funciona: rompes el estado de error acumulado y le das a la IA un contexto limpio.

    Tokens vs mensajes: cómo pagar menos sin perder eficacia

    Bolt.new cobra por tokens. Lovable, por mensajes. Eso cambia la estrategia.

    • Bolt.new (tokens): haz micro-prompts, optimiza longitud y reusa templates. Bueno para iteración rápida.
    • Lovable (mensajes): agrupa instrucciones complejas en un solo prompt largo. Menos interacciones, más orden.

    Stack “opinada”: si quieres otra cosa, pelea por ello

    Estas herramientas aman React y Tailwind. Si tu stack es Angular, Laravel o un monolito legacy, prepárate para forzar mucho al modelo.

    • Opción A: adapta tu stack al flujo (si puedes).
    • Opción B: usa una herramienta más abierta (Cursor, Copilot, IDEs asistidos). Menor magia visual, pero mayor control técnico.

    Seguridad: las API keys no son souvenirs

    El error clásico: pedir a la IA que “integre Stripe” y conseguir un .env con la API key pegada en el frontend. Eso pasa. Mucho.

    • Nunca pongas keys en el cliente.
    • Siempre: BFF (Backend-for-Frontend) + Secret Manager (AWS Secrets Manager, Vault).
    • Recomendación: short-lived tokens y rotación automatizada. Kill-switch para revocar keys si algo huele raro.

    Prompt versioning: trata el prompt como código

    Un cambio de prompt puede cambiar comportamiento entero. Versiona tus prompts como si fueran migrations.

    • Estructura mínima: promptId, version, author, changelog, template.
    • Guarda promptId y promptVersion en metadatos de cada request para reproducibilidad y auditoría.

    Moderación y trust & safety: no lo ignores

    Tus usuarios intentarán generar logos, contenido protegido o imágenes que no deberías producir.

    • Filtra y modera en el BFF antes de llamar al modelo.
    • Bloquea términos sensibles. Si hay duda, manda a revisión humana.
    • Log: guarda hashes de prompts, no texto completo si hay PII.

    Observability: métricas que realmente importan

    No solo logs. Métricas que salven tu día.

    • Latencia E2E por prompt.
    • Cost per generation (USD).
    • Cache hit ratio.
    • Rate of regeneration per user.
    • Incidencias de prompt-injection.

    Cache: ahorra dinero y tiempo

    Si dos usuarios piden “perro astronauta”, no generes dos imágenes nuevas.

    • Hash(prompt + constraints) → Redis.
    • TTL adaptativo: prompts comerciales frecuentes TTL largo; prompts únicos TTL corto.
    • Cache hit = ahorro directo.

    Testing y CI: no dejes que la IA improvise tu pipeline

    • Mockea LLM en tests unitarios.
    • Contract tests: respuesta del modelo debe cumplir schema JSON.
    • Canary releases para nuevos prompts: 1% tráfico, luego escalas.

    UX que no traicione la IA

    • Siempre: transparencia. Indica cuando la respuesta es generativa.
    • Si confidence < 0.6: pide confirmación humana antes de acciones sensibles.
    • Muestra el prompt o la interpretación antes de ejecutar (editable).

    Playbook anti-abuso (lo que debes tener listo)

    • Rate limits y quotas por usuario.
    • Circuit breaker y fallback a placeholder.
    • Kill switch global para detener generación masiva.
    • Alertas de gasto (thresholds diarios).

    Plantilla rápida: prompt “Plan First”

    Usa esta plantilla antes de generar código. Pégala como prompt inicial.

    System: “Eres un generador de código que sigue estrictamente el plan. Responde con: 1) Plan de archivos; 2) Librerías y versiones; 3) Tests a crear; 4) Código. El prompt del usuario es: {{user_prompt}}. Las reglas de la marca: {{brand_rules}}. Stack: React 18, Vite, Tailwind 3.2. Output: JSON con campos plan, files[], tests[].”

    Si la IA no responde en ese formato, rechaza y reprompt.

    Checklist mínimo antes de pulsar “deploy”

    • [ ] ERD definido y migrations escritas.
    • [ ] Prompt versionado y almacenado en repo seguro.
    • [ ] BFF implementado con secret manager y rate limiting.
    • [ ] Moderación automática y paths de escalado humano.
    • [ ] Tests con mocks LLM.
    • [ ] Canary rollout para new prompts.
    • [ ] Observability y alertas de coste.

    Errores que acaban con productos bonitos

    • Permitir que la IA toque el schema sin revisión.
    • Dejar keys en el bundle para facilitar “hackeo” por bots.
    • No versionar prompts: si algo falla, no puedes reproducir.
    • Depender de wrappers no oficiales (Midjourney via Discord): buen gusto para hobbies, mal gusto para negocios.

    Qué hacer ahora (acción inmediata)

    1. Si estás probando: agrega promptVersion y un traceId a cada petición.
    2. Si vas a producción: crea el BFF en la próxima semana. No hay atajos.
    3. Si tienes equipo: asigna ownership de prompts a un rol (AI Owner) con procesos de CI.

    Si quieres que te lo entregue listo

    Responde “QUIERO EL KIT” y te doy:

    • Esqueleto BFF Node/Nest con secret manager y rate limiting.
    • Plantilla de prompt versionado y CI para canary prompts.
    • Component React + Vite + Tailwind con patrón Plan First integrado.
    • Tests e2e que simulan LLM.

    Dominicode Labs

    Si quieres explorar workflows y agentes aplicados a producto, puedes ver recursos y experimentos relacionados en Dominicode Labs. Es un complemento lógico si trabajas con automatización y agentes en entornos de producción.

    FAQ

    ¿Qué es la ventana de contexto y por qué debería preocuparme?

    La ventana de contexto es la cantidad de texto que un modelo puede “recordar” en una sola petición. Debes preocuparte porque si le das demasiado contexto, el modelo puede omitir piezas críticas; si le das poco, carecerá de información esencial.

    ¿La IA puede diseñar mi BD por completo?

    No. La IA puede ayudar a generar esquemas iniciales, pero deberías diseñar el ERD, relaciones, índices y tipos primero y proporcionar ese contexto al modelo.

    ¿Cómo evito vendor lock‑in al usar Bolt.new o Lovable?

    Exige código estándar (por ejemplo React+Vite+Tailwind), controla versiones en Git y evita dependencias propietarias que solo funcionen dentro de la plataforma.

    ¿Dónde debo almacenar las API keys?

    En un Secret Manager (AWS Secrets Manager, Vault, etc.) y exponerlas vía un BFF. Nunca las incluyas en el cliente.

    ¿Qué es prompt versioning y cómo se aplica?

    Tratar los prompts como código: asignar promptId, version, author y changelog; guardar metadatos en cada request para trazabilidad y reproducibilidad.

    ¿Qué métricas debo monitorizar para generación IA?

    Latencia E2E por prompt, coste por generación, cache hit ratio, rate of regeneration per user e incidencias de prompt‑injection.

    ¿Cuándo debo usar un canary para nuevos prompts?

    Cuando lances cambios en prompts que afectan lógica crítica o costos. Empieza con ~1% del tráfico y escala según resultados y métricas.

  • Cómo implementar generación de imágenes en tiempo real para e-commerce

    Cómo implementar generación de imágenes en tiempo real para e-commerce

    ¿Quieres que tu e‑commerce deje de vender fotos y empiece a fabricar deseos en tiempo real?

    Tiempo estimado de lectura: 4 min

    Ideas clave

    • Generación de imágenes en tiempo real: es una palanca de conversión que exige arquitectura, cache, moderación y observabilidad.
    • BFF controlado: valida prompts, aplica reglas de marca y evita exponer la cuenta de la empresa al cliente.
    • Cache y coste: hash de prompt → Redis + TTL inteligente y políticas de rate limiting para evitar facturas inesperadas.
    • UX y mock‑ups: mostrar progreso, confirmar cuando la confianza es baja y combinar imágenes generadas con mock‑ups reales.
    • Moderación y legal: bloquear logos/trademarks y guardar metadata (promptId, traceId) para reproducibilidad y cumplimiento.

    Poca gente lo dice tan claro: la generación de imágenes al vuelo no es un capricho estético. Es una palanca de conversión. Si la ejecutas mal, quemas presupuesto y confianza. Si la ejecutas bien, vendes productos que no existían cinco minutos antes.

    Te voy a dar el patrón que usan los equipos que ya están experimentando con esto en producción. Sin rodeos. Con lo técnico que importa. Y con las trampas que nadie te advierte hasta que te llega la factura.

    Resumen rápido (lectores con prisa)

    Qué es: Generación de imágenes en tiempo real integrada en el flujo de e‑commerce para producir mock‑ups o productos personalizados al momento.

    Cuándo usarlo: Cuando el valor de conversión supera el coste por generación y puedes controlar cache, moderación y latencia.

    Por qué importa: Aumenta la conversión y reduce fricción para productos personalizados; mal implementado genera coste y pérdida de confianza.

    Cómo funciona (resumen): Cliente → BFF (validación, prompt‑engineering, moderación, cache) → Modelo generativo → Storage/CDN → cliente con URL y metadata (promptId, traceId).

    1) Arquitectura mínima que funciona (y no te deja expuesto)

    Cliente Angular

    • captura prompt, muestra estado, aplica mock‑up en Canvas/Three.js.

    BFF (Node/Nest)

    • valida prompt, aplica prompt‑engineering de marca, moderación, cache, llama a la API generativa.

    Storage CDN (S3 + Cloudfront)

    • guarda imagen final, sirve al cliente por URL.

    Redis

    • cache de hash(prompt) → URL.

    Observability

    • traces (OpenTelemetry), métricas de latencia y coste.

    Metáfora rápida: el BFF es el taller de estampación. El cliente es la tienda con el maniquí. No mandes clientes a la fábrica con la tarjeta de crédito de la empresa.

    2) ¿DALL‑E 3 o Midjourney? La decisión que define tu stack

    DALL‑E 3: integra, documentado, estable. Latencia predecible. Útil para flujos sin sorpresas.

    Midjourney: estética potente, pero sin API oficial. Inestabilidad + riesgo legal. Úsalo solo para pruebas internas o moodboards.

    Regla: si es negocio y producción, DALL‑E (o alternativa con SLA). Si es inspiración artística, Midjourney en sandbox.

    3) UX que no te mata la tasa de conversión

    • Primera regla: muestra progreso. El usuario debe saber que algo está sucediendo (ondas, barra y texto: “La IA está pintando tu idea”).
    • Segunda regla: siempre confirmación si confidence < 0.6. No ejecutes automáticamente acciones críticas.
    • Tercera: muestra la transcripción/prompt y permite editar antes de generar; reduce re‑generaciones y costes.

    4) Cómo combinar imagen generada con mock‑up realista

    • Si tu IA devuelve fondo blanco: usa mix-blend-mode: multiply para integrar color y sombras.
    • Para recortar a área imprimible: usa mask-image con PNG alfa que delimite el área.
    • Para objetos 3D (tazas, gorras): renderiza textura en Three.js y proyecta. La imagen 2D se vuelve material.

    5) Cache y coste: no es opcional

    • Hash(prompt + constraints) → si existe en Redis, devuelve URL.
    • TTL inteligente: alta prioridad evergreen (best sellers) tiene TTL largo; prompts únicos TTL corto.
    • Rate limiting en BFF y quotas por usuario. Un mal prompt viral = factura.

    6) Moderación y cumplimiento legal

    • Antes de llamar al modelo: pass prompt through a moderation endpoint.
    • Bloquea logos/trademark detectados y solicita versión con licencia o alternativa propuesta.
    • Guarda hashes de audio/texto, no PII completo, salvo consentimiento.

    7) Pipeline de prompts (versión como código)

    No mezcles estilos. Versiona prompts. Cada cambio debe pasar CI.

    Ejemplo de prompt system (simple y efectivo):

    "UserPrompt: {{user}}. BrandRules: fondo blanco, sin texto, colores primarios: #000,#fff,#ff0066, estilo: vector elegante, resolución: 2048x2048. Output: return image url or base64."

    Guarda promptId en la metadata de la imagen (para reproducibilidad).

    8) Snippet Angular (esqueleto, revisa nombres)

    • Usa Signals para estado: isLoading, imageUrl, error.
    • Llama a BFF con debounce en input.
    • Muestra preview inmediatamente si hay cache.

    9) Casos límite y cómo protegerte

    • Input malicioso: sanitize + moderate.
    • Trafico súbito: circuit breaker en BFF con fallback a placeholder.
    • Resultados pobres: ofrecer 3 variantes y un botón “regenerar” que cuente como 1 intento.

    10) Métricas que importan (no te fijes en impresiones)

    • Latencia end-to-end (ms).
    • Cost per generation.
    • Cache hit ratio.
    • Conversion lift por producto con imagen generativa.
    • Tasa de re‑generaciones por usuario.

    Checklist mínimo antes de lanzar

    • [ ] BFF con autenticación y rate limiting.
    • [ ] Cache (Redis) por prompt hash.
    • [ ] Moderación automática en BFF.
    • [ ] Mock‑up pipeline (mask + blend + optional 3D).
    • [ ] Observability y tracing (traceId en metadata).
    • [ ] Tests e2e con fixtures de imágenes.
    • [ ] Política de retención y GDPR (si almacenas diseños con PII).

    Si quieres algo listo para pegar en tu repo Dime exactamente qué prefieres y te lo doy:

    • QUIERO EL REPO”: repo con Angular UI + BFF Node + Redis cache + prompts versionados + tests e2e.
    • QUIERO EL BFF”: solo el BFF con endpoints, moderación, cache y llamadas DALL‑E.
    • QUIERO LA UI”: Angular component con Signals, Canvas mock‑up y Three.js demo.

    Esto no acaba aquí: si implementas mal, perderás dinero; si lo implementas bien, venderás productos que nadie espera. ¿Qué quieres construir primero — la fábrica (BFF) o la vitrina (UI)? Responde “BFF” o “UI” y te paso el plan con código listo para copiar y pegar.

    Si buscas una continuación práctica y orientada a equipos que implementan pipelines, revisión de prompts y workflows de producción, considera explorar Dominicode Labs como recurso complementario. Ofrece experimentos y plantillas que encajan con la arquitectura y las pruebas operativas descritas en este artículo.

    FAQ

    ¿Por qué necesito un BFF en este flujo?

    El BFF valida prompts, aplica reglas de marca, modera contenido, gestiona cache y llama al modelo generativo. Evita exponer credenciales y controla quota y costes.

    ¿Qué modelo debo usar en producción?

    Usa un modelo con SLA y API documentada (por ejemplo, DALL‑E 3 o alternativa con soporte). Midjourney es válido para pruebas internas o moodboards, no para producción.

    ¿Cómo reduzco costes por generación?

    Implementa cache por hash de prompt, TTL por prioridad, limita re‑generaciones y muestra/edita prompts antes de generar.

    ¿Qué hago si aparece un logo o trademark?

    Bloquea la generación, solicita una versión con licencia o propone una alternativa sin marca. Registra acciones en metadata para auditoría.

    ¿Cómo debe integrarse la cache?

    Hash(prompt + constraints) → Redis → devuelve URL si existe. TTL inteligente según prioridad del prompt y políticas por usuario.

    ¿Qué métricas debo vigilar al lanzar?

    Latencia E2E, coste por generación, cache hit ratio, conversion lift por producto y tasa de re‑generaciones.

    ¿Cuándo ofrecer regeneraciones y cómo limitar abusos?

    Ofrece 3 variantes por intento y cuenta cada regeneración. Aplica rate limiting y quotas por usuario para evitar picos de coste.

  • Mejora tus habilidades de programación con IA y automatización

    Mejora tus habilidades de programación con IA y automatización

    ¿Sigues pensando que ser buen programador es escribir más líneas de código que el resto? Estás en peligro y ni lo hueles.

    Tiempo estimado de lectura: 7 min

    • La relevancia hoy viene de saber ensamblar piezas y orquestar, no de escribir cada línea.
    • Integrar IA y automatizaciones es parte de la infraestructura técnica.
    • Prioriza automatizaciones y evaluaciones de producto sobre trabajo artesanal repetitivo.

    Introducción

    ¿Sigues pensando que ser buen programador es escribir más líneas de código que el resto? Estás en peligro y ni lo hueles.

    Poca gente habla de esto: la obsolescencia profesional ya no viene por no saber una sintaxis. Viene por no saber qué piezas ensamblar. Si tu respuesta a casi cualquier problema sigue siendo “voy a levantar un servidor y escribirlo todo”, entonces tienes un problema de criterio, no de habilidad técnica.

    Esto no es un ataque. Es un diagnóstico frío.

    Aquí están las señales reales de que te estás quedando atrás como desarrollador (y aún no lo ves). Y sí: algunas duelen porque son verdades que nadie te dice en las entrevistas.

    Resumen rápido (lectores con prisa)

    RAG y embeddings son patrones para integrar LLMs con datos; se usan cuando necesitas respuestas contextuales y actualizadas. Automatizar workflows con orquestadores reduce deuda técnica y libera tiempo para diferenciar producto. Audita lo que genera la IA: automatiza boilerplate, revisa seguridad y performance antes de producción.

    Señales de que te estás quedando atrás

    1) Sigues tratando la IA como un chat útil y nada más

    Usar ChatGPT para resolver bugs es cómodo. Pero si tu interacción con la IA termina ahí, estás ignorando que los LLMs ya son parte de la infraestructura.

    La IA hoy:

    • Es una API que debes orquestar.
    • Responde mejor si le das contexto correcto.
    • Puede ejecutar funciones, devolver JSON y disparar procesos en tu backend.

    Si no sabes integrar un modelo con RAG (Retrieval-Augmented Generation), embeddings y llamadas a funciones, estás viendo una lámpara excelente y sin saber que hay electricidad detrás.

    2) Prefieres escribir todo desde cero aunque exista una solución fiable

    Orgullo artesanal = deuda técnica. Si te piden integrar un CRM con PostgreSQL y Slack, y tu primer movimiento es montar Express + cron jobs, estás desperdiciando tiempo que tu equipo necesita para diferenciarse.

    La diferencia es simple: los líderes usan orquestadores (n8n, Zapier o Airbyte donde toque) para lo que no aporta valor diferencial. Tú deberías reservar tu tiempo para la lógica que realmente vende producto.

    3) Tu identidad técnica está atada a un framework

    “React es mejor” o “Angular es la única forma”. Si tu argumento técnico se reduce a banderas de framework, estás perdiendo la partida estratégica. Los frameworks cambian, los patrones no.

    Quien no se queda atrás:

    • Entiende rendering strategies, caché, costos de bundle.
    • Evalúa trade-offs por producto, no por fanatismo.

    4) Rechazas asistentes de código por orgullo

    Los asistentes (Copilot, Cursor, etc.) generan código repetitivo y tests. Si los ignoras por “principio”, estás perdiendo velocidad. No se trata de dejar que la IA haga tu trabajo; se trata de auditar lo que la IA produce con criterio.

    El desarrollador moderno:

    • Genera boilerplate con la IA.
    • Invierte tiempo en revisar, asegurar y optimizar.
    • Usa la IA para escribir tests extremos que tú nunca cubrirías a mano.

    5) Tu responsabilidad termina en el commit

    Si crees que tu trabajo acaba cuando haces push, estás en riesgo. El software vive en producción y ahí hay otras reglas: latencia, despliegues, observabilidad y costes.

    No hay que ser un experto en AWS, pero sí:

    • Entender contenedores (Docker).
    • Saber pipelines CI/CD.
    • Saber qué es un sistema stateless y por qué importa.

    6) Sigues resolviendo problemas con soluciones locales en vez de pensar en experiencia y métricas

    Si tu medida de éxito es “funciona en mi máquina”, vas por mal camino. Hoy el foco es negocio: conversiones, tiempo hasta interacción, abandonos en formularios.

    Si no monitoreas métricas, tus decisiones técnicas serán errores caros disfrazados de “buena ingeniería”.

    Cómo reconectar tu perfil y no morir en el intento

    Esto es práctico. No necesitas reinventarte en una tarde. Necesitas cambiar prioridades.

    1) Aprende a pensar en piezas, no en código

    Antes de escribir, pregúntate:

    • ¿Existe un servicio que resuelva esto de forma mantenible?
    • ¿Puedo automatizarlo con un workflow?
    • ¿O esto es realmente ventaja competitiva y merece código?

    2) Domina las integraciones IA → producto

    No basta con “saber usar” la IA. Tienes que:

    • Integrar embeddings y bases vectoriales.
    • Construir pipelines RAG.
    • Programar llamadas a funciones del LLM y validar outputs.

    3) Automatiza donde tenga sentido

    n8n, herramientas de workflow, y PaaS existieron para quitarte trabajo repetitivo. Úsalas. Si tus tareas son integraciones entre servicios, la primera opción no debería ser escribir un microservicio.

    4) Usa asistentes, pero audita con ojo clínico

    Que la IA escriba tests, esquemas o endpoints iniciales. Tu rol será:

    • Revisar seguridad.
    • Comprobar performance.
    • Refactorizar para calidad.

    5) Toma responsabilidad por el entorno de ejecución

    No delegues todo a DevOps. Aprende lo suficiente para:

    • Diagnosticar un despliegue roto.
    • Leer logs con sentido.
    • Configurar health checks y despliegues canary.

    Checklist rápida para saber si estás fuera del mercado (marca lo que apliques)

    • [ ] Consideras la IA solo como un chat.
    • [ ] Prefieres escribir integraciones manuales siempre.
    • [ ] Defiendes un único framework como identidad profesional.
    • [ ] No usas asistentes de código por “principio”.
    • [ ] Tu trabajo termina en el push.
    • [ ] No monitorizas métricas de negocio.

    Si marcaste 2 o más, es hora de actuar.

    Historias reales (personajes que cambian)

    Laura — Frontend Senior

    Antes: construía cada modal y cada transición con hacks CSS.

    Después de redirigir su tiempo: integró RAG para ayuda contextual en la app, delegó automatizaciones tensas y redujo las tareas repetitivas un 60%. Ahora diseña flujos de producto que realmente importan.

    Marco — Mobile Engineer

    Antes: convencido de reescribir pantallas en nativo.

    Tras auditar: mantuvo Ionic para la mayoría de flujos y reescribió solo dos pantallas críticas en nativo. Resultado: menor mantenimiento y mejor ROI.

    Carla — Product Manager

    Antes: recortaba features por problemas de accesibilidad.

    Con integración A11y y RAG en conjunto con el equipo, lanzó la funcionalidad completa sin recorte de alcance.

    Metáforas que te quedarán grabadas

    – El código es un pasivo: genera coste hasta que lo elimines.

    – La IA es la tubería del edificio: no se ve, pero cuando falla, todo se convierte en agua por todas partes.

    – El assistente de código es un taladro potente: úsalo, pero asegúrate de no perforar la pared equivocada.

    Tácticas concretas que te devuelven relevancia en 30 días

    Semana 1

    Aprende lo básico de RAG y embeddings. Haz un PoC que responda preguntas sobre tu documentación interna.

    Semana 2

    Implementa un workflow en n8n para una integración repetitiva. El objetivo: reducir tareas manuales un 50%.

    Semana 3

    Introduce Copilot o Cursor y genera tests unitarios con la IA. Revisa y corrige.

    Semana 4

    Configura un pipeline básico de CI/CD que mande alertas de error y métricas de rendimiento a Slack.

    Errores que te harán perder meses

    • Actualizar dependencias sin pruebas E2E.
    • Depender de selectores CSS de librería para tests.
    • No manejar casos de fallo de la API de IA (timeouts, rate limits, respuestas inválidas).

    Qué pide el mercado hoy (en lenguaje claro)

    • Ingenieros que integren y orquesten.
    • Personas que dominen RAG y LLMOps.
    • Desarrolladores que produzcan menos código repetitivo y más automatizaciones inteligentes.
    • Profesionales que entiendan negocio y métricas.

    No es solo tecnología; es postura profesional. Si sigues vendiendo “sé X framework” como la gran promesa, empezarás a notar menos llamadas de reclutadores. Si en cambio puedes decir “sé montar RAG, automatizar workflows y ponerlo en producción con pipelines reproducibles”, te llamarán mucho más rápido y mejor pagado.

    ¿Quieres algo tangible ahora?

    Respóndeme con “QUIERO CHECKLIST” y te envío:

    • Checklist descargable de migración de skills (PDF).
    • Mini-plan de 30 días (tareas diarias).
    • Recursos para aprender RAG, n8n y LLMOps con ejemplos prácticos.

    Cierre directo: esto no acaba aquí

    Quedarse atrás no es cuestión de talento; es cuestión de prioridades. Mantenerse relevante implica cambiar qué eliges hacer con tu tiempo. Lo peligroso es pensar que tienes tiempo. No lo tienes. Empieza hoy: automatiza lo que no aporta valor, integra lo que mejora decisiones, y usa IA como una herramienta que amplifica tu criterio.

    ¿Quieres que te mande la checklist? Respóndeme “QUIERO CHECKLIST” y te la paso ahora. Esto no acaba aquí.

    Recursos adicionales

    Si te interesa experimentar con workflows, RAG y despliegues reproducibles, puedes explorar material práctico en Dominicode Labs como continuación lógica a estas tácticas. Encontrarás ejemplos y guías para implementar pipelines y pruebas de concepto.

    FAQ

    ¿Por qué RAG y embeddings son importantes?

    Porque permiten que los LLMs respondan con contexto actualizado y relevante sin reentrenar el modelo. Integran tus datos (documentación, logs, productos) a las respuestas del modelo.

    ¿Cuándo debería usar un orquestador como n8n en vez de escribir un microservicio?

    Cuando la integración es principalmente transferencia de datos entre servicios y no aporta ventaja competitiva. Un orquestador reduce tiempo y deuda técnica.

    ¿Cómo integrar asistentes de código sin perder calidad?

    Usa asistentes para generar boilerplate y tests; dedica tiempo a auditar seguridad, rendimiento y cobertura. La IA acelera, tú aseguras calidad.

    ¿Qué métricas debo monitorear para evaluar impacto de mis cambios?

    Conversión (si aplica), tiempo hasta interacción, tasas de abandono en flujos críticos y métricas de rendimiento (latencia, errores). Complementa con alertas y logs para producción.

    ¿Qué debo aprender primero para dominar LLMOps?

    Embeddings, bases vectoriales, pipelines RAG y cómo orquestar llamadas a funciones del modelo. Complementa con prácticas de validación de outputs y tolerancia a fallos.

    ¿Cómo empiezo un PoC de RAG en una semana?

    Extrae un conjunto pequeño de documentación interna, calcula embeddings, indexa en una base vectorial y conecta un LLM para responder preguntas con ese contexto. Mide precisión y tiempos de respuesta.