Vibe coding: la mejor forma de aprender lo que no hay que hacer

Mujer sonriente sentada en el suelo de su salón con un portátil, del que brotan enredaderas y cables que invaden la habitación como una jungla descontrolada, con un pequeño timón de barco oculto entre las plantas y un androide entregándole otro cable más

Es domingo por la tarde. Mi blog, seamos honestos, es una mezcla rara: una tarjeta de presentación muy cara y un laboratorio donde hago mis pruebitas. Últimamente el laboratorio está muy entretenido: llevo semanas construyendo una bóveda de conocimiento personal que ingesta artículos, los clasifica, genera grafos que conectan ideas entre autores distintos. Lo que empezó siendo una evolución razonable —antes solo editaba posts, ahora quiero que también me ayude a encontrar temas y a aprender— se ha convertido en un jardín. Uno de esos de los que cuesta salir.

De «hazme un script» a «no sé qué he decidido»

El patrón es siempre el mismo. Le pides algo sencillo: que te automatice la ingesta de un artículo. Funciona, así que le pides la clasificación. También funciona, así que vas a por el grafo de conocimiento. Y de ahí a la diarización de hablantes en transcripciones de YouTube —algo que no había tocado en mi vida— escrito todo en scripts de Python, un lenguaje que tampoco he programado nunca.

Claude te va proponiendo cosas que, en principio, parecen razonables. Y como no le dedicas mucho rato —esto es un proyecto de fin de semana, no de trabajo—, tampoco piensas mucho las cosas. Dices «vale, perfecto» y sigues. Ese «vale, perfecto» repetido veinte veces es el problema: te da una sensación de control que no es real. No sabes si lo que acabas de aprobar tiene sentido. Solo sabes que suena bien.

La resaca del domingo con prisa

Y entonces empiezan a aparecer las grietas. No se da cuenta de que la transcripción de un vídeo ya existe en YouTube y no hace falta generarla de nuevo. Cuando transcribes en local, a veces alucina y el resultado es sutilmente incorrecto. Los scripts de Python se han ido llenando de funcionalidad añadida sobre la marcha hasta convertirse en un batiburrillo que ni tú entiendes.

Al final, aprovechando la vuelta del modelo Fable (que es más listo), le pedí que le echara un vistazo a todo aquello, porque tenía la sensación de que se estaba desmadrando. Y, efectivamente, estaba desmadrado: media docena de scripts pequeños que se podían fusionar en un par de ellos, y más cosas.

Lo curioso no es que la IA se equivocara. Es que, como yo tampoco sabía lo suficiente, no me di cuenta de lo que se le había pasado. Vas a la deriva convencido de que llevas el timón, y solo cuando ya no te acuerdas de por qué decidiste algo —y le tienes que pedir a la propia IA que te documente lo que has hecho para no perderte— te enteras de que no lo llevabas.

Lo único que de verdad me está funcionando

De todo lo que he ido probando, una cosa sí ha demostrado su valor: usar OpenSpec para dejar por escrito, antes de implementar, qué se va a hacer y por qué. Parece burocracia de fin de semana, pero no lo es: queda documentada la decisión, así que la propia IA es capaz luego de recordar por qué se tomó, en lugar de que tengas que reconstruirlo tú de memoria (que es justo lo que no funciona cuando decides veinte cosas seguidas sin pararte a pensarlas).

En el trabajo esto no es opcional: ahí sí hay que leer los diseños, prestar atención a lo que la IA propone, no dejarse llevar por la velocidad. En un proyecto personal de fin de semana, en cambio, puedo tirar para adelante y pagar el precio después.

Por eso recomiendo el vibe coding

Con todo el mundo diciendo que no hay que hacer vibe coding, yo lo recomiendo, con un poco de sorna. Una vez. En algo pequeño y sin consecuencias reales. Vas a aprender en un fin de semana lo que ningún curso te va a enseñar de verdad: que la IA, por muchas cosas plausibles que te proponga, no sabe lo que tú no sabes. Y que la sensación de control que te da es, precisamente, el riesgo.

Moraleja

El vibe coding no es peligroso porque la IA se equivoque de vez en cuando. Es peligroso porque tú, si no sabes lo suficiente, no te enteras de cuándo se equivoca. Hazlo una vez, en un proyecto sin nada que perder, y sabrás exactamente por qué no deberías volver a hacerlo así en algo que sí importa.

¿Te ha pasado alguna vez sentir que controlabas tu propio código —o tu propio proyecto— y en realidad ibas a la deriva? Cuéntamelo en LinkedIn.

Relacionados sugeridos

¿Importa la calidad del código en la era del vibe coding?

Artesana cosiendo a mano y un androide cosiendo con máquina en un taller luminoso; las puntadas pasan de irregulares a precisas formando un patrón tipo circuito.

Hace años, en una empresa en la que trabajaba, me contaron un caso muy directo: una empresa generó una aplicación a partir de UML con una herramienta automática que llevábamos nosotros. Cumplieron plazo y coste. Cuando cambiaron los requisitos, en lugar de mantener el código, tiraron la aplicación y la regeneraron: era más barato que tocar un código “raruno”, con nombres extraños. Esto se parece mucho a lo que ya estamos viendo con IA y el llamado vibe coding.

A mí aquello me dejó una idea: cuando regenerar es barato, la calidad se juega más fuera del código que dentro.

La idea en una frase

Si regeneras código a menudo, la calidad que paga la factura no está dentro de cada clase, sino en cómo está montado el sistema alrededor: arquitectura clara, datos bien gobernados, pipelines (build–test–deploy) fiables y reglas sencillas para trabajar. Lo del “código perfecto” importa cuando vas a evolucionarlo a mano; si vas a regenerar, importa menos.

¿Cuándo compensa regenerar?

Suele ganar la regeneración cuando se cumplen varias de estas condiciones:

  • Piezas pequeñas y con bordes nítidos (por ejemplo, un microservicio utilitario).
  • No hay mucho estado ni conocimiento “oculto” en el código actual.
  • El tiempo manda y cuesta más entender el código que volver a generarlo.

La experiencia de aquella herramienta lo anticipó: cuando el código es raro y vas justo de tiempo, regenerar duele menos que mantener. Con IA veremos este patrón más a menudo.

¿Y cuándo tiene sentido cuidar el código “a mano”?

Cuando hay conocimiento embebido (reglas, excepciones, compatibilidades), integraciones con terceros o necesitas trazabilidad y diagnóstico fino. Ahí el código legible y estable  ahorra dinero. Además, si tu cadena de entrega es débil, cualquier cambio (generado o no) es una ruleta: mejor invertir en el “sistema de trabajo”.

Si la calidad se desplaza… ¿a dónde se va?

A las capas que no puedes regenerar con un clic y a las rutinas que aseguran el día a día:

  • Arquitectura y límites: separar bien piezas y decidir cómo hablan entre sí (lo llamo “cadena de suministro de software”). Es el tipo de decisión donde un perfil puente entre negocio y tecnología aporta más valor.
  • Datos y esquemas: el dato de producción no se regenera. Cambiar un esquema sin gobierno duele siempre. (Sí: aquí la prudencia paga).
  • Pipelines y pruebas (CI/CD): con un pipeline sólido, regenerar es barato y seguro; sin él, cada entrega es “a ver si suena la flauta”.
  • Control de versiones y trazabilidad: reglas simples tipo “lo que no está en el repo no existe” y entregables siempre generados desde el repo. Si no, ni sabrás qué has puesto en producción.

En resumen: menos heroicidad en el IDE y más disciplina en el sistema. Eso es lo que hace que el negocio duerma tranquilo.

Del “código bonito” al “contexto útil”

Otra consecuencia práctica: sube el valor del prompt y, sobre todo, del contexto que das a la IA (estructura, convenciones, restricciones, ejemplos). Cuando pides “algo más que una función”, necesitas explicar el marco: carpetas, naming, dependencias, seguridad… No es brujería; es onboarding bien hecho para una máquina. Lo conté con más detalle en Del Prompt Engineer al Context Engineer: cómo la IA me obligó a reorganizar mi web (y mis esquemas mentales).

Este giro es la parte de mi propuesta de valor en la que más me estoy enfocando últimamente: conectar negocio y tecnología, traduciendo requisitos en decisiones prácticas y riesgos controlados.

Guía rápida para decidir

Usa esta lista como “semáforo”. Si la mayoría caen en verde, regenera. Si salen en rojo, mantén y mejora el código.

  1. Horizonte: ¿La pieza es “desechable” en 3–6 meses o vivirá 2 años? (Desechable → verde).
  2. Bordes: ¿Cuántos sistemas/clientes toco si cambio esto? (Pocos → verde).
  3. Estado y conocimiento: ¿Hay reglas “no escritas” en el código? (Pocas → verde).
  4. Cadena de entrega: ¿Tengo build–test–deploy automático y fiable? (Sí → verde).
  5. Trazabilidad: ¿Puedo reconstruir el entregable desde el repo y saber qué incidencia corrige cada versión? (Sí → verde).
  6. Definición clara: ¿Podemos describir el “qué” y “cómo” para que la IA acierte a la primera? (Sí → verde).

Con este enfoque, la discusión no va de gustos (“código limpio sí/no”), sino de coste total de cambio y riesgo de negocio.

Un apunte sobre roles

Todo esto no va solo de herramientas. Hace falta gente que entienda el código y el contexto, y que sepa explicarlo en llano a negocio. Ese perfil híbrido es justo el hueco que más falta hace ahora mismo en muchas organizaciones.

Moraleja

La calidad no muere: se mueve. Si vas a regenerar a menudo, pon tu esfuerzo en arquitectura, datos, pipelines, control de versiones y en dar buen contexto a la IA. Si vas a evolucionar a mano, cuida el código como un jardín. La clave es elegir con criterio dónde pones la energía para que el negocio gane hoy y no se ate las manos para mañana.


Leyendo el artículo de Ricardo Devis en LinkedIn me vino a la cabeza este caso y las reflexiones sobre el efecto que va a tener el vibe coding en el sector. Si te apetece comentarlo, nos vemos en LinkedIn.

Diseñado en la cabeza de Iñigo, made in ChatGPT.

Relacionados sugeridos

¿Oscuridad o seguridad? Una historia con linterna

Oscuridad vs seguridad

Cuando diseñé el modelo de seguridad de los canales digitales de i-DE, me tocó una de esas reuniones en las que el PowerPoint se queda corto y toca tirar de metáforas.

¿Y esto para qué sirve?

Muchas veces los equipos de negocio no entienden lo que hacemos en seguridad. Y no es por mala fe, es que usamos un lenguaje que suena a película de espías.

Me explico: en una de esas charlas con negocio, salió el tema de la “seguridad por oscuridad”. Al decirlo vi caras raras. Así que improvisé un ejemplo muy gráfico (o más bien oscuro 😉):

Imagina que tienes una habitación con un tesoro dentro. La habitación está completamente a oscuras. Nadie sabe que el tesoro está ahí, pero… la puerta está abierta.

Si alguien entra con una linterna, se lo lleva. Eso es la seguridad por oscuridad: no hay seguridad, solo ignorancia.

Ahora imagina la misma habitación, pero esta vez con una puerta cerrada con llave. Todo el mundo sabe que hay un tesoro, pero nadie puede entrar. Eso sí es seguridad.

Explicar lo técnico sin tecnicismos

Esta anécdota me recuerda algo importante: muchas veces, más que diseñar sistemas, estamos vendiendo ideas. Y para vender, hay que traducir.

Traducir jerga a metáforas. Riesgos a historias. Seguridad a cerraduras de toda la vida.

Y sí, cuesta. Pero si no lo haces, no te dan el OK. Y sin OK, no hay funcionalidad. Y sin funcionalidad, no hay mejora.

Moraleja

Convencer es tan importante como configurar. Que lo técnico no tape el mensaje.


Podemos seguir la conversación en LinkedIn

Este artículo ha sido Diseñado en la cabeza de Iñigo, made in ChatGPT … pero la linterna le llevaba yo.

¿Que es la innovación?

Fotografía realista, formato horizontal 16:9, oficina luminosa y moderna. En primer plano, una ingeniera joven —protagonista femenina, piel morena— explica ideas en un cristal con post-its de colores y diagramas de flujo. A su alrededor, equipo diverso (mujer asiática, hombre afrodescendiente, hombre caucásico) escuchando y tomando notas en tablets. Sobre la mesa, prototipos y herramientas sencillas que sugieren mejoras incrementales, mientras en segundo plano se proyectan sutilmente iconos holográficos que insinúan soluciones disruptivas. Sin logotipos ni marcas visibles. Estilo fotográfico limpio, colores cálidos y mucha luz natural.

En la anterior ocasión ya hablamos de que, en realidad, la innovación es la modernización de unas prácticas muy comunes desde hace mucho tiempo. Pero ¿qué es realmente la innovación? Podemos preguntarle a ChatGPT y lo que nos dice es lo siguiente:

«La innovación es el proceso de introducir nuevas ideas, métodos, productos o servicios que resultan en mejoras significativas o cambios positivos en diversas áreas. Puede ocurrir en distintos contextos, tales como tecnología, negocios, educación, salud y muchos otros. La innovación puede implicar la creación de algo completamente nuevo (innovación disruptiva) o la mejora de algo existente (innovación incremental).»

Pero ¿Que es la innovación?

La experiencia que he adquirido me hace ser de la misma opinión y me gustaría compartirte algunas reflexiones que se desprenden de esta definición.

Como la innovación supone algo nuevo o, al menos, una mejora, implica que para cada persona u organización «innovador» puede significar cosas distintas. Me explico: supongamos que una empresa gestiona sus proyectos con una metodología clásica en cascada; implantar una metodología más moderna basada en el agilismo le supondría una mejora y, consecuentemente, sería innovación. En cambio, para otra empresa del mismo sector que ya utilice agilismo no habría mejora y, por tanto, el agilismo no sería innovador. En definitiva, tú defines qué es innovador para ti.

El concepto de que algo suponga una mejora significativa es muy amplio, así que casi cualquier cosa puede ser innovadora. Por ejemplo, si un equipo desarrolla una aplicación de software sobre una versión de un lenguaje de programación y la migra a una versión superior que le permite mejorar su productividad gracias a las nuevas características del lenguaje, también se consideraría innovación. Eso es una suerte podrás seguir haciendo lo de siempre y decir que eres innovador… 😉 o no.

Que es la innovación para mi

Con esta definición prácticamente todo encaja dentro de la innovación, pero para mí lo que marca la diferencia a la hora de considerar si una empresa es innovadora o no es el hecho de si tiene un proceso de innovación definido, sistematizado y auditado… o si, simplemente, son unos colegas haciendo una prueba mientras se toman un café de máquina en la oficina.

Innovación disruptiva vs incremental

Creo que es esencial interiorizar que la innovación no tiene que ser necesariamente disruptiva; es decir, no tiene por qué poner patas arriba tu empresa o tu sector. Puede ser perfectamente incremental, con pequeñas mejoras, porque esto suele alejar a demasiadas personas de la innovación y si es el negocio que suele ser el patrocinador, tienes un problema.

Si lo tuviésemos todo claro, no sería innovación: sería un proyecto

Moraleja

Al final, innovar no es saltar al vacío, sino acotar riesgos y aprender deprisa.


¿Conoces mucha gente que piensa que la innovación debería ser disruptiva? Cuéntamelo en LinkedIn; me encantará conocer tu visión.

Diseñado en la cabeza de Iñigo, made in ChatGPT también es innovación.

SonarQube, uso desde eclipse

Segunda entrada sobre el SonarQube, en este caso y a diferencia de la primera entrega, en la que vimos la instalación y primer uso, en esa ocasión vamos a ver el uso desde el entorno de desarrollo Eclipse.

Este tipo de herramientas son muy útiles para tener un cierto control sobre el código fuente de nuestros desarrollos.

Pueden llegar a ser un poco delicados si se abusa del número de reglas que apliquemos, pero con una configuración inteligente puede resultar una herramienta muy útil.

Os dejo el vídeo.

Cadena de suministro de Software

Lo primero decir que me encanta la imagen destacada de esta entrada. Primero porque representa una cadena y segundo porque me parece muy bonita estéticamente hablando.

El concepto de cadena de suministro de Software no es muy usado, está mas de moda el de devops. Pero a mi la verdad es que el de devops no me gusta tanto, porque hace referencia a desarrolladores y operadores y prefiero utilizar el de cadena de suministro de software, como hacen referencia en Nexus de Sonatype.

Me gusta mas porque desde que nuestro cliente tiene una necesidad, hasta que esa necesidad se pone en producción en forma de un programa, hay que pasar por una serie de fases o una cadena para suministrar ese Software.

Por eso me gusta mas, porque creo que representa mejor lo que pasa, pero claro devops es un nombre mas cortito.

Os dejo bastantes reflexiones mas sobre este concepto en el vídeo

SonarQube #1: Instalación y primer vistazo

Empezamos una nueva serie sobre una herramienta de cuadro de mando de calidad. Es muy utilizada porque tiene una versión bastante completa que es gratuita.

Permite tener un cuadro de mando de la calidad del código y centralizar la gestión.

Pero mejor vamos a ver como se instala y a echarle un primer vistazo.

Cual es el porcentaje adecuado de cobertura de código

En mi opinión, lo mejor que puedes hacer es olvidarte del porcentaje de cobertura de código. Me explico.

Cuando lees el libro de Kent Beck, que es el autor que puso de moda las pruebas unitarias, y que viene a ser el manifiesto de programación extrema, te das cuenta que no habla en ningún momento de porcentajes de cobertura. El lo que dice es qué hay que escribir todas las pruebas que se te ocurran, de cosas que pueden fallar, obviamente. Y una vez que el código pasa todas esas pruebas y no eres capaz de encontrar ninguna prueba más tu código ya es correcto.

A la hora de probar nuestro código existe un grupo de herramientas que son las de cobertura de código que nos ayudan en nuestro trabajo. Estas herramientas, en el caso de Java, lo que hacen es poner la máquina virtual en un modo en el que la máquina va diciendo por que líneas de código va pasando cuando se ejecuta código. De tal forma que si nosotros ejecutamos nuestras pruebas unitarias con una herramienta de cobertura de código y vemos que hay una serie de líneas de código por las cuales no se ha pasado, eso nos proporciona una información muy valiosa. Puede ser por dos motivos o bien nuestro juego de ensayo no es tan completo como nosotros creíamos y se nos ha escapado alguna casuística o bien es lo que se llama código muerto, es decir en algún momento ese código tuvo alguna utilidad pero en este momento ya no la tiene y no se usa y se puede eliminar.

El problema viene cuando se confunde un medio con un fin es decir el fin de las pruebas unitarias es asegura que código es correcto la cobertura del código es un medio. Si nos obsesionamos con los porcentajes con un 70% o 60% u 80% de cobertura es cuando estamos equivocando el medio y el fin.

Obviamente si nuestra cobertura de código es baja es prácticamente imposible que nuestro juego de ensayos sea completo ya que hay muchas líneas por las cuales no pasamos. Pero también se puede dar el caso inverso, es decir que hayamos pasado por todas las líneas de código no quiere decir que las condiciones que hemos puesto en el JUnit sean las correctas o todas las necesarias. De hecho podríamos poner como única condición el siempre valido assertTrue(true) y nuestra cobertura de código sería alta.

Es por ello que, como decía al principio, no creo que haya que darle especial importancia al porcentaje de cobertura. Si es un buen indicador pero necesita de una persona que supervise porque él nivel es bajo o si un nivel alto realmente me está asegurando la calidad.

Porque te preocupas por el código, si no lo mira nadie.

Hoy quiero hablar de un tema que tenia en la cabeza desde hace tiempo y que la excelente entrada de Javier Garzás sobre la calidad del producto me viene como anillo al dedo.

El tema es como he vivido la evolución de la informática de desarrollo desde que empecé a trabajar, desde el punto de vista de un técnico que se dedica a la industrialización del desarrollo de software y a la arquitectura J2EE.

A principios del año 2000 (porque decir principios de la última década suena a muy mayor) estaba en un proyecto en el que una persona, y no programador precisamente, me hizo el comentario que figura como título de la entrada: «Para que te preocupas tanto por el código, si no lo mira nadie».

Es lo que se llevaba en esa época, cumplir los plazos y que la aplicación hiciese lo que tenia que hacer. Es decir se le daba muy poca importancia a los técnicos, eramos básicamente programadores, los que cortaban el bacalao eran los funcionales. Y los clientes tampoco es que se preocupasen mucho por el código.

Siempre me ha gustado intentar hacer las cosas lo mejor posible, así que por aquella época empecé a utilizar herramientas como PMD y Chekstyle, JUnit, etc que cuando las proponía usar me miraban raro. Parece que son herramientas nuevas, pero llevan desde hace más de 10 años.

Pero tenía claro que al final esa falta de preocupación por la calidad tenia que acabar explotando por algún sitio. Y así ha sido.Hoy día la mayoría de clientes de la zona están en mayor o menor medida implantando controles de calidad en el producto, independientemente de que exijan a sus proveedores la ISO o el CMMI.

Hoy día no resulta extraño encontrarse clientes con un Sonar, un SVN, un Jenkins, etc.

La siguiente gran práctica que creo que va a incorporarse va a ser el tema del TDD y todo lo relacionado con la automatización de pruebas. Ahí estaremos.

Auditoría de código en un proyecto ya empezado

Cuando tienes que asumir la industrialización del desarrollo de un software ya empezado, uno de los problemas a los que tienes que enfrentarte, es que hacer con la auditoría de código, que normalmente no se cumple.

Uno de los objetivos de la industrialización es bajar la deuda técnica y uno de los parámetros tiene que ver con el cumplimiento de la auditoría de código.

Es muy complicado el llegar a los objetivos de cumplimiento de una atacada, salvo que se pueda hacer una intervención ex-profeso, cosa que no suele suceder, primero, porque normalmente suele haber cosas más importantes en las que invertir los, normalmente escasos, recursos del proyecto.

Yo lo que suelo pedir es que por lo menos la deuda técnica se vaya reduciendo. Es decir, no espero que se pare todo para cumplir la auditoría, pero si que por donde se vaya pasando se vaya haciendo el esfuerzo de adecuar el código. Que los indicadores de cumplimiento vayan subiendo.

En el peor de los casos por lo menos podrás decir que el equipo está haciendo el esfuerzo de mejorar la calidad.