El poder del mapeo de datos en la atención sanitaria: ventajas, casos de uso y tendencias futuras. La rápida expansión del sector sanitario y de las tecnologías que lo sustentan genera una inmensa cantidad de datos e información. Las estadísticas muestran que alrededor de 30% del volumen mundial de datos se atribuye al sector sanitario, con una tasa de crecimiento prevista de casi 36% para 2025. Esto indica que la tasa de crecimiento es muy superior a la de otras industrias como la manufacturera, los servicios financieros y los medios de comunicación y entretenimiento.

Primero utilizaron ChatGPT para reducir costes. Luego nos contrataron para limpiar la deuda técnica AI

Philip Tihonovich
29 de mayo de 2025 10 minutos de lectura
Le sorprendería saber cuántas empresas lo hacen ya.

Como indican los informes de toda la industria, ahora hay un sector especializado cada vez mayor de ingenieros que se dedican a corregir los errores de código generados por el AI.

El patrón se ha vuelto notablemente consistente. Las empresas recurren a ChatGPT para generar scripts de migración, integraciones o funciones completas, con la esperanza de ahorrar tiempo y reducir costes. Al fin y al cabo, la tecnología parece rápida y accesible.

Entonces los sistemas fallan.

Y nos llaman.

Últimamente, recibimos cada vez más peticiones de este tipo. No para lanzar un nuevo producto, sino para desenmarañar cualquier lío que haya quedado después de que alguien confiara un modelo de lenguaje a su código de producción.

En este punto, está empezando a parecer su propio nicho de la industria. Arreglar los fallos generados por el AI es ahora un servicio facturable. Y en algunos casos, muy caro.

Informe 2024 de GitClear confirma lo que hemos visto con los clientes: Las herramientas de codificación AI aceleran la entrega, pero también alimentan la duplicación, reducen la reutilización e inflan los costes de mantenimiento a largo plazo.

En un caso, un cliente acudió a nosotros después de que una migración generada por AI dejara caer datos críticos de un cliente. Invertimos 30 horas recuperando lo que se perdió, reescribiendo la lógica desde cero y limpiando el pipeline.. Lo irónico es que habría sido más barato que un desarrollador veterano lo hubiera escrito a la antigua usanza.

Que quede claro, sin embargo, que no estamos "en contra del AI". Nosotros también lo utilizamos. Y es útil en el contexto adecuado, con los guardarraíles adecuados. Pero lo que me frustra de la excesiva confianza en el AI y sus implicaciones generalizadas -y probablemente a usted también- es el pensamiento mágico. La idea de que un modelo lingüístico puede sustituir al verdadero trabajo de ingeniería.

No se puede. Y como dice el refrán, la prueba está en el pudín. Cuando las empresas pretenden lo contrario, acaban pagando a alguien como nosotros para que lo limpie.

¿Cómo es uno de estos trabajos de limpieza? Esto es lo que los AI-afficionados no te cuentan en cuanto a tiempo perdido y dinero malgastado.

Cómo es una solicitud típica

El mensaje suele llegar así:

"Oye, ¿puedes echar un vistazo a un microservicio que hemos construido? Usamos ChatGPT para generar la primera versión. La empujamos a staging, y ahora nuestra cola RabbitMQ está completamente inundada".

Siempre empieza por algo pequeño. Una tarea que parecía demasiado aburrida o lenta. Algo como analizar un CSV, reescribir un cron job o cablear un simple webhook. Así que se la entregan a un modelo lingüístico y esperan lo mejor.

Pero aquí está la cosa: los síntomas aparecen mucho más tarde. A veces días después. Y cuando lo hacen, rara vez es obvio que la causa de fondo sea el código generado por AI. Simplemente parece que... algo falla.

"No se puede externalizar el pensamiento arquitectónico a un modelo lingüístico. AI puede acelerar las cosas, pero siguen haciendo falta ingenieros para construir sistemas que no se vengan abajo bajo presión."
Director Técnico

Tras una docena de estos casos, empiezan a surgir patrones:

  • Sin pruebas. En absoluto. Ni siquiera una afirmación de "hola mundo". Sólo crudo, código especulativo que nunca se ejercitó correctamente.
  • Desconocimiento de los límites del sistema. Hemos visto scripts ChatGPT que consultan tres microservicios de forma sincrónica, ignoran los tiempos de espera y hacen explotar toda la cadena de llamadas al primer fallo.
  • Uso indebido de las transacciones. Un cliente utilizó SQL generado por AI con transacciones anidadas dentro de un servicio Node.js utilizando Knex. Funcionó, hasta que dejó de hacerlo y la mitad de las escrituras fallaron silenciosamente.
  • Sutiles condiciones de carrera. Especialmente en bases de código multihilo o asíncronas. El tipo de errores que no aparecen en desarrollo pero que destrozan la producción a escala.

Y por supuesto, cuando todo se derrumba, el AI no te deja un comentario diciendo: "Por cierto, estoy adivinando aquí".

Esa parte corre de tu cuenta.

Caso 1: El script de migración que dejó caer silenciosamente datos de clientes

Este vino de una empresa de tecnología financiera de rápido crecimiento.

Estaban desplegando una nueva versión de su modelo de datos de clientes, dividiendo un gran campo JSONB en Postgres en múltiples tablas normalizadas. Algo bastante estándar. Pero con plazos ajustados y pocas manos, uno de los desarrolladores decidió "acelerar las cosas" pidiendo a ChatGPT que generara un script de migración.

A primera vista tenía buena pinta. El script analizaba el JSON, extraía la información de contacto y la insertaba en un nuevo archivo contactos_usuario mesa.

Así que lo ejecutaron.

Sin simulacro. Sin copia de seguridad. Directamente a la puesta en escena, que, como resulta, estaba compartiendo datos con la producción a través de una réplica.

Unas horas más tarde, el servicio de atención al cliente empezó a recibir correos electrónicos. Los usuarios no recibían notificaciones de pago. A otros les faltaban números de teléfono en sus perfiles. Fue entonces cuando nos llamaron.

Qué salió mal

Rastreamos el problema hasta el script. Hizo la extracción básica, pero hizo tres suposiciones fatales:
  • No manejaba NULL o claves que faltan dentro de la estructura JSON.
  • Insertaba registros parciales sin validación.
  • Utilizaba SOBRE EL CONFLICTO NO HACER NADApor lo que cualquier inserción fallida se ignoraba silenciosamente.
Resultado: sobre 18% de los datos de contacto se perdió o se corrompió. No hay registros. No hay mensajes de error. Sólo pérdida de datos silenciosa.

Lo que costó arreglar

Asignamos un pequeño equipo para desenredar el embrollo. Esto es lo que hicimos:
  1. Diagnóstico y replicación (4 horas) Volvimos a crear el script en un entorno aislado y lo ejecutamos contra una instantánea de la base de datos. Así confirmamos el problema y localizamos exactamente lo que faltaba.
  2. Auditoría forense de datos (8 horas) Comparamos el estado roto con las copias de seguridad, identificamos todos los registros con datos faltantes o parciales y los cotejamos con los registros de eventos para rastrear qué inserciones fallaron y por qué.
  3. Reescribir la lógica de migración (12 horas) Volvimos a escribir todo el script en Python, añadimos una lógica de validación completa, creamos un mecanismo de reversión y lo integramos en el proceso CI del cliente. Esta vez, incluía pruebas y soporte de ejecución en seco.
  4. Recuperación manual de datos (6 horas)Algunos registros no se podían recuperar de las copias de seguridad. Extrajimos los campos que faltaban de sistemas externos (sus API de CRM y proveedor de correo electrónico) y restauramos manualmente el resto.

Tiempo total: 30 horas de ingeniería

Dos ingenieros, tres días. Coste para el cliente: unos $4,500 en comisiones de servicio.Pero el golpe más duro lo recibieron los clientes. Las notificaciones fallidas provocaron impagos y bajas. El cliente nos dijo que gastó al menos $10,000 en tickets de soporte, compensaciones de SLA y créditos de buena voluntad por ese script chapucero.Lo irónico es que un desarrollador senior podría haber escrito la migración correcta en unas cuatro horas. Pero la promesa de velocidad AI acabó costándoles dos semanas de limpieza y daños a su reputación.

Arreglamos lo que ChatGPT rompía y construimos lo que no podía.

Caso 2: El cliente API que ignoró los límites de tarifa y rompió la producción

Ésta procede de una startup de tecnología jurídica que crea una plataforma de gestión de documentos para bufetes de abogados. Una de sus características principales era la integración con un servicio gubernamental de notificaciones electrónicas: una API REST de terceros con OAuth 2.0 y una limitación estricta de la velocidad: 50 solicitudes por minuto, sin excepciones.

En lugar de asignar la integración a un desarrollador de backend experimentado, alguien del equipo decidió hacer un prototipo con ChatGPT. Introdujeron la especificación OpenAPI, pidieron un cliente Python y obtuvieron un script de aspecto limpio con solicitalógica de reintento mediante tenacidady actualización de fichas.

Parecía sólido sobre el papel. Así que lo enviaron.

Qué salió mal

Al principio, todo parecía ir bien. El cliente gestionaba correctamente las solicitudes individuales, pasaba la autenticación e incluso reintentaba en caso de fallo. Pero durante el uso real, especialmente bajo carga, la plataforma empezó a comportarse de forma impredecible.

Esto es lo que ocurrió en realidad:

  • No se respetan los límites de las tarifas. El código generado no leía ni interpretaba X-RateLimit-Remaining o Reintentar después de cabeceras. Seguía enviando peticiones a ciegas.
  • Los reintentos empeoraron las cosas. Cuando empezaron a llegar los errores 429, el decorador de tenacidad los reintentó automáticamente. Sin jitter. Sin colas. Sólo una avalancha de solicitudes de seguimiento.
  • El proveedor de la API bloqueó temporalmente su IP. Durante 3 horas, nadie en la plataforma pudo sincronizar documentos. Sin registros, sin alertas. Sólo un fallo silencioso.
Esto no era un arreglo de una línea. Era un malentendido de cómo se comportan los sistemas de producción. Y es un gran ejemplo de lo que los LLM no saben; no porque estén estropeados, sino porque no tienen conciencia del tiempo de ejecución.

Deja de parchear código generado por AI en prod - tráenos antes de que se rompa.

Cómo lo arreglamos

  1. Rastrear y aislar el fallo (6 horas) Añadimos middleware para inspeccionar el tráfico saliente y confirmamos la avalancha de peticiones durante los picos de uso. También recreamos el fallo en la puesta en escena para comprender plenamente el patrón desencadenante.
  2. Reconstruir el cliente API (10 horas) Reescribimos el cliente utilizando httpx.AsyncClientha implementado un acelerador basado en semáforos, ha añadido un backoff exponencial con jitter y ha gestionado correctamente Reintentar después de y cabeceras de límite de velocidad.
  3. Prueba de esfuerzo y validación (6 horas) Simulamos el uso en el mundo real con miles de peticiones simultáneas utilizando Locust, probamos la limitación de velocidad en diferentes escenarios de ráfagas y confirmamos que no se producían 429s bajo carga sostenida.
  4. Añadir supervisión y alerta (4 horas) Configuramos métricas Prometheus personalizadas para realizar un seguimiento del uso de la API por minuto y añadimos alertas para notificar al equipo si se acercaban a los umbrales de tasa.

Tiempo total: 26 horas

Dos ingenieros, repartidos en dos días y medio. Coste para el cliente: unos $3,900.

El mayor problema es que su principal cliente, un bufete de abogados con expedientes urgentes, perdió dos plazos de presentación ante los tribunales debido a la interrupción. El cliente tuvo que controlar los daños y ofrecer un descuento para mantener la cuenta.

Todo porque un modelo de lenguaje no entendía la diferencia entre "código de trabajo" y "código listo para producción". Y sin más, otra capa de deuda técnica AI se añadió silenciosamente a la pila.

Por qué sigue ocurriendo esto

Lo que da miedo no es que estas cosas salgan mal. Es lo predecible que se está volviendo todo.Cada uno de estos incidentes sigue el mismo patrón. Un desarrollador pide a ChatGPT un fragmento de código. Le devuelve algo que funciona lo suficientemente bien como para no dar errores. Lo conectan al sistema, tal vez lo limpian un poco, y lo envían, asumiendo que si se compila y se ejecuta, debe ser seguro.Pero aquí está el truco: Los grandes modelos lingüísticos no conocen tu sistema. No saben cómo interactúan tus servicios. No conocen tu presupuesto de latencia, tu canal de despliegue, tu configuración de observabilidad o tus patrones de tráfico de producción.Generan el código más probable basándose en los patrones de sus datos de entrenamiento. Eso es todo. No hay conocimiento. No hay garantías. No hay intuición para el diseño del sistema.Y el resultado suele reflejarlo:
  • Código que funciona una vez, pero falla bajo carga
  • Sin programación defensiva ni sistemas de seguridad
  • Escasa comprensión de las limitaciones del mundo real, como los límites de velocidad, los tiempos de espera o la coherencia final.
  • Cero sentido de la intención arquitectónica

Lo peor es que el código parece correcto. Es sintácticamente limpio. Pasa linters. Incluso podría ser cubierto por una prueba básica. Pero le falta la única cosa que realmente importa: el contexto.

Por eso estos fallos no aparecen de inmediato. Esperan a los despliegues del viernes por la noche, a las ventanas de alto tráfico, a los raros casos límite. Esa es la naturaleza de la deuda técnica AI - es invisible hasta que rompe algo crítico.

Cuando AI realmente ayuda

Como ya hemos dicho, nosotros también utilizamos AI. Casi todos los ingenieros de nuestro equipo tienen una configuración similar a Copilot funcionando localmente. Es rápido, útil y, sinceramente, una forma estupenda de saltarse las partes aburridas.Pero aquí está la diferencia: nada llega a la rama principal sin pasar por un ingeniero senior, y en la mayoría de los casos, una tubería de CI que sabe qué buscar.Los LLM son geniales:
  • plantillas de andamiaje para nuevos servicios o puntos finales de API,
  • generar cobertura de pruebas para la lógica existente,
  • ayudar en la refactorización repetitiva de grandes bases de código,
  • convertir simples scripts de shell en plantillas de infraestructura como código,
  • o incluso comparando enfoques algorítmicos que ya entendemos.

Lo que son no bueno es el diseño. O el contexto. O los valores predeterminados seguros.

Por eso hemos creado nuestros flujos de trabajo para tratar los resultados de LLM como sugerencias, no como fuentes de verdad. Esto es lo que ocurre en la práctica:

  • Etiquetamos todos los commits generados por AI para facilitar su seguimiento y revisión.
  • Nuestros editores tienen avisos en línea, pero con ganchos pre-commit forzados que bloquean cualquier cosa sin pruebas o documentación.
  • Nuestro CI incluye reglas de análisis estático que detectan patrones inseguros que hemos visto antes en LLMs: cosas como reintentos no protegidos, tiempos de espera no cubiertos, análisis JSON ingenuo o manejo SQL inseguro.
  • Cada pull request con código generado por LLM pasa por una revisión humana obligatoria, normalmente por alguien de alto nivel que entiende la lógica del dominio y la superficie de riesgo.

Bien utilizado, ahorra tiempo. Si se usa a ciegas, es una bomba de relojería.

Lo que recomendamos a los CTO

No estamos aquí para decirle que prohíba las herramientas AI. Ese barco ya ha zarpado.¿Pero dar acceso a un modelo de lenguaje? Eso es buscarse problemas.Esto es lo que recomendamos en su lugar:

1. Tratar a los LLM como herramientas, no como ingenieros

Deja que te ayuden con el código repetitivo. Que propongan soluciones. Pero no les confíes decisiones críticas. Cualquier código generado por AI debe ser revisado por un ingeniero senior, sin excepciones.

2. Hacer trazable el código generado por LLM

Ya sean etiquetas de confirmación, metadatos o comentarios en el código, dejar claro qué piezas proceden del AI. Esto facilita la posterior auditoría, depuración y comprensión del perfil de riesgo.

3. Definir una política de generación

Decidan en equipo dónde es aceptable utilizar LLM y dónde no. ¿Boilerplate? Claro. ¿Flujos de autenticación? Tal vez. ¿Sistemas transaccionales? Absolutamente no sin revisión. Explicitar la política y parte de sus normas de ingeniería.

4. Añadir supervisión a nivel de DevOps

Si dejas que el código generado por AI entre en producción, tienes que asumir que algo se romperá en algún momento. Añade comprobaciones sintéticas. Monitores de límite de velocidad. Seguimiento de dependencias. Hacer visible lo invisibleespecialmente cuando el autor original no es humano.

5. Construir para la recuperabilidad

Los mayores fallos provocados por el AI que hemos visto no provenían de código "malo". Procedían de errores silenciosos -falta de datos, colas rotas, tormentas de reintentos- que pasaban desapercibidos durante horas. Invierta en la observabilidad, la lógica de retroceso y las reversiones. Especialmente si dejas que ChatGPT escriba las migraciones.

En resumen, AI puede ahorrar tiempo a su equipo, pero no puede asumir la responsabilidad.

Sigue siendo un trabajo humano.

Reflexiones finales: AI ≠ ingenieros de software

AI puede ayudarle a moverse más rápido. Pero no puede pensar por ti.No entiende su arquitectura. No sabe lo que significa "hecho" en tu contexto. Y definitivamente no le importa si su canalización de datos se rompe silenciosamente un viernes por la noche.Por eso, como directores de tecnología, debemos centrarnos en la resistencia del sistema, no solo en la velocidad.Es tentador dejar que AI se encargue de las partes aburridas. Y a veces está bien. Pero todo atajo conlleva una contrapartida. Cuando el código generado por AI se cuela sin control, a menudo se convierte en deuda técnica AI. Del tipo que no ves hasta que tu equipo de operaciones está luchando contra el fuego en producción.Si ya se ha topado con ese muro, no está solo. Hemos ayudado a equipos a recuperarse de todo, desde migraciones rotas hasta desastres de API. No nos limitamos a refactorizar código. Ayudamos a refactorizar el pensamiento que hay detrás.Porque al final, eso es lo que realmente hace que los sistemas sean fiables.
Jefe del Departamento de Python, Big Data, ML/DS/AI
Philip aporta un enfoque nítido a todo lo relacionado con los datos y el AI. Él es quien hace las preguntas correctas desde el principio, establece una sólida visión técnica y se asegura de que no solo construyamos sistemas inteligentes, sino los correctos, para obtener un valor empresarial real.

Índice

    Contáctenos

    Reservar una llamada o rellene el siguiente formulario y nos pondremos en contacto con usted cuando hayamos procesado su solicitud.

    Envíenos un mensaje de voz
    Adjuntar documentos
    Cargar archivo

    Puede adjuntar 1 archivo de hasta 2 MB. Formatos de archivo válidos: pdf, jpg, jpeg, png.

    Al hacer clic en Enviar, autoriza a Innowise a procesar sus datos personales de acuerdo con nuestra política de privacidad. Política de privacidad para proporcionarle información relevante. Al enviar su número de teléfono, acepta que nos pongamos en contacto con usted a través de llamadas de voz, SMS y aplicaciones de mensajería. Pueden aplicarse tarifas de llamadas, mensajes y datos.

    También puede enviarnos su solicitud
    a contact@innowise.com

    ¿Qué pasa después?

    1

    Una vez recibida y procesada su solicitud, nos pondremos en contacto con usted para detallarle las necesidades de su proyecto y firmar un acuerdo de confidencialidad. Proyecto y firmaremos un acuerdo de confidencialidad.

    2

    Tras examinar sus deseos, necesidades y expectativas, nuestro equipo elaborará una propuesta de proyecto con el alcance del trabajo, el tamaño del equipo, el plazo y los costes estimados. con el alcance del trabajo, el tamaño del equipo, el tiempo y las estimaciones de costes.

    3

    Concertaremos una reunión con usted para hablar de la oferta y concretar los detalles.

    4

    Por último, firmaremos un contrato y empezaremos a trabajar en su proyecto de inmediato.

    ¿Necesita otros servicios?

    flecha