Solo pedí cambiar un botón a azul: por qué Claude escribió un script de migración y 50 pruebas de carga

Solo pedí cambiar un botón a azul: por qué Claude escribió un script de migración y 50 pruebas de carga

IAAgentes de ProgramaciónClaude

Fuentes:Discusión en HN + pruebas de la comunidad

El 9 de septiembre, el sitio web opusfived.dev escaló al primer puesto de Hacker News, cosechando 948 votos positivos en un solo día. La interfaz era tan sencilla como reveladora: a la izquierda, una simulación de comercio electrónico; a la derecha, un cuadro de diálogo con un gran modelo de lenguaje. El objetivo del reto era único: “Cambia el color del botón ‘Añadir al carrito’ a azul y no permitas que Claude modifique absolutamente nada más”.

Al introducir la instrucción, Claude tiñe efectivamente el botón de azul. Sin embargo, no se detiene ahí. De inmediato, añade al archivo de estilos clases transitorias para preservar la retrocompatibilidad, redacta un completo script de migración de botones y, por si fuera poco, despliega de forma autónoma una batería de pruebas de carga con 50 rondas de latencia para validar el nuevo elemento. Aunque muchos lectores lo tomaron como una anécdota cómica sobre la torpeza de la inteligencia artificial, el incidente saca a la luz la inercia conductual arraigada en las herramientas de autocompletado de código: un fallo estrepitoso a la hora de delimitar los márgenes de actuación en la ingeniería de software.

Scripts de migración para proyectos sin usuarios

Imaginemos un repositorio recién creado hace apenas dos horas, sin un solo usuario real en producción. El jefe de producto solicita renombrar un campo fundamental en la base de datos. Un desarrollador humano recurriría a la función global de buscar y reemplazar en su editor: una tarea de diez segundos, sin preocuparse en lo más mínimo por mecanismos de reversión.

En la lógica interna de los modelos de IA, el mundo opera bajo premisas radicalmente opuestas. El usuario de Hacker News MisterMunchkin compartió su experiencia: pidió al modelo renombrar un campo básico, pero la IA no solo mantuvo el código antiguo bajo una postura de programación defensiva, sino que dejó fijado el valor anterior en la interfaz de la API. Su razonamiento sonaba falsamente riguroso: había que contemplar la posibilidad de que hipotéticos consumidores externos siguieran consultando el campo obsoleto.

Interfaz del reto opusfived.dev Figura: Interfaz del desafío en opusfived.dev. Fuente: opusfived.dev

Este celo desmedido por la compatibilidad hacia atrás en proyectos embrionarios es un defecto recurrente de los modelos más avanzados. El desarrollador dudeinhawaii sufrió una frustración similar: solo buscaba maquetar a toda prisa una página de prueba. Sin consultarlo, el modelo montó en segundo plano una arquitectura de monitorización de alta disponibilidad y ejecutó 50 pruebas de latencia sobre la primera versión del prototipo. El programador tuvo que pulsar repetidamente el botón de detención. Aquel boceto estaba destinado a rehacerse decenas de veces; juzgar la madurez del ciclo de vida del software resultó ser una tarea donde el criterio del modelo fue nulo.

Por qué refactorizar cuesta menos que parchear

Ante un cambio de especificaciones, un ingeniero evalúa mentalmente una balanza de costes. Una alternativa consiste en apilar parches sobre el código existente; la otra, analizar desde los primeros principios el esfuerzo que supone rehacer el módulo desde cero. El usuario stillpointlab sintetizó esta carencia: un buen profesional sopesa ambos caminos y sabe que una refactorización de raíz suele requerir mucho menos tiempo que mantener con pinzas un código heredado parcheado con cautela.

Los grandes modelos de lenguaje carecen aún de esta capacidad de cálculo multidimensional. Al haberse entrenado con ingentes cantidades de repositorios de código abierto, han desarrollado un sesgo determinante: tratan cualquier línea preexistente como una verdad inmutable. Cuando se les pide modificar la función A, consumen potencia de cálculo temiendo perjudicar a los usuarios de la función B, entregando al final un código defensivo interminable y plagado de concesiones.

EscenarioDecisión del ingeniero humanoLógica de ejecución del modelo IAConsecuencia técnica resultante
Prototipado inicialImplementar con rapidez la lógica centralConstruir monitorización completa y pruebas de cargaLa función principal queda sepultada en código accesorio
Renombrar un campoBúsqueda y sustitución global inmediataConservar el campo antiguo y crear capa de compatibilidadEl repositorio se infla y los costes de mantenimiento se disparan
Refactorizar módulo legacyRediseñar buscando la arquitectura óptimaCongelar la lógica vieja y añadir ramas condicionalesLa complejidad explota, convirtiendo el módulo en una caja negra

En proyectos ágiles de rápida iteración, este patrón se convierte en una fábrica descontrolada de deuda técnica. En lugar de simplificar, el modelo opta por seguir añadiendo ladrillos innecesarios, ahogando la mantenibilidad del proyecto bajo capas de complejidad superflua.

Revocar por escrito la responsabilidad de compatibilidad

Dado que el modelo no distingue entre una pasarela de producción crítica y un fragmento de código desechable, el desarrollador debe imponerle barreras físicas explícitas. Se da la paradoja de que el ingeniero se ve forzado a protegerse del exceso de celo de su propio asistente digital.

El desarrollador theshrike79 aportó una solución pragmática: colocó un archivo PROJECT.md en la raíz del repositorio, indicando en mayúsculas y negrita: “Este es un proyecto personal unipersonal. No consideres la retrocompatibilidad, no utilices programación defensiva y no redactes pruebas unitarias”.

Página principal de opusfived.dev Figura: Entrada principal de opusfived.dev. Fuente: opusfived.dev

En cuanto se liberó formalmente al modelo de esa carga, su rendimiento dio un giro radical: comenzó a actuar con ligereza, agilidad y máxima eficacia. Frente a los modelos de lenguaje actuales, una declaración explícita de exención fijada en la raíz del proyecto es indispensable. Como ilustró theshrike79: “Es como convivir con una máquina superinteligente a la que debes construirle vallas a diario para impedir que salte al jardín y te reforme la casa sin permiso”.

El dilema del entrenamiento con alta ganancia

Este exceso de proactividad ha fracturado a la comunidad en dos posturas claras. Quienes exigen un control milimétrico sobre cada línea han prescindido de los modelos más recientes, refugiándose en herramientas más sobrias como Codex. Este tipo de asistentes destaca por una ejecución sobria y quirúrgica, permitiendo a los programadores veteranos recuperar el dominio absoluto sobre sus repositorios.

Por el contrario, quienes observan el fenómeno desde la óptica del entrenamiento destacan otra perspectiva. El usuario genxy planteó la contraparte: el celo actual de los modelos es la consecuencia natural de un entrenamiento de alta ganancia (high-gain training). Si no se les inculcase una actitud proactiva, en tareas complejas que de verdad exigen una visión integral de ingeniería el desarrollador se vería obligado a espolear a la máquina a cada paso. Disfrutar de soluciones listas para usar implica asumir el peaje de lidiar ocasionalmente con código redundante. La discrepancia radica, en el fondo, en cuánta soberanía estamos dispuestos a delegar en la máquina.

Trazar límites: la nueva disciplina obligatoria

Reírnos de que una inteligencia artificial monte un despliegue masivo para pintar un botón de azul no oculta que asistimos a una profunda reconfiguración del paradigma del desarrollo de software. Un modelo no puede calibrar por sí mismo las prioridades comerciales, sencillamente porque jamás ha vivido la urgencia de recortar calidad para garantizar la supervivencia de un negocio.

La lección de este episodio radica en que el mayor defecto de los modelos de programación no es la incapacidad, sino una hiperactividad desmedida. Dotada de una enorme potencia de cálculo, la IA está lista para erigir una arquitectura de microservicios propia de una multinacional para validar un simple borrador. El valor troncal del ingeniero humano ha cambiado de eje: ya no se trata solo de “cómo escribir código correcto”, sino de “cómo impedir que el sistema quede sepultado bajo líneas prescindibles”.

Delegar en la máquina lo que le corresponde, pero marcando sin ambigüedades los límites que no debe rebasar. Enseñar a la IA cuándo desplegar pensamiento de ingeniería y cuándo limitarse a teñir un botón de azul: esa es la destreza obligatoria para programar con inteligencia artificial en 2026.

Referencias:

  • Discusión en HN (item?id=49623754)