Resolviendo bucles infinitos
¿Por qué tu aplicación se congela, consume recursos como loca y tú no sabes ni por dónde empezar a arreglarlo?
Una semana más vuelve la ola de calor y tu newsletter favorita de vibe coding 😄 ¿Eres una de esas personas afortunadas que ya están tumbadas en la playa o sigues currando?
Yo estoy en ese segundo grupo 😅 ¡Pero más a gusto que un arbusto! Bueno, vamos al lío. ¿Qué ha pasado desde la última vez que nos leímos?
No sé si pudiste participar, pero la semana pasada hice una encuesta sobre cuál era tu mayor frustración con el vibe coding. Hubo dos (grandes) ganadores: bucles infinitos y conexión con base de datos.
La idea inicial era hacer una MASTERCLASS sobre el tema más votado, pero me he dado cuenta de que con los bucles infinitos no tiene mucho sentido. Hay muchos tipos diferentes y no todos tienen un origen claro que se pueda enseñar paso a paso.
En lugar de eso, hoy vamos a ver:
Qué es un bucle infinito
Los 3 tipos más comunes
Cómo evitarlos y/o solucionarlos
"Pero Pol, ¡esto no es una MASTERCLASS!"
Lo sé, pero he pensado algo que pienso que te encantará...
He preparado una sesión de resolución en directo de 1 hora donde abordaremos bucles infinitos reales aportados por vosotros. Los que nos dé tiempo en esa hora. Puedes apuntarte aquí 👇
MASTERCLASS Resolviendo bucles infinitos
Para apuntarte necesitas explicar cuál es el bucle infinito que estás experimentando o que has experimentado en el pasado. Ideal si es uno que no hayas podido resolver, así tendremos trabajo real que hacer.
Ahora sí, vamos al tema de hoy.
¿Qué es un bucle infinito?
Un bucle infinito es cuando tu aplicación ejecuta la misma acción una y otra vez sin parar. La aplicación se queda atrapada repitiendo algo porque no encuentra una condición que le diga "ya puedes parar".
Me acuerdo de un chiste que ilustra perfectamente esto:
Cliente: ¡Muy buenas! ¿Tiene magdalenas?
Dependiente: ¡Muy buenas!
Cliente: ¡Muy buenas! ¿Tiene magdalenas?
Dependiente: ¡Muy buenas!
...
Y así podríamos seguir indefinidamente. Esto es un bucle infinito.
Los 3 tipos de bucles infinitos más comunes
1. Bucle de dependencias circulares (Problema de permisos RLS)
Me pasó hace unos meses con una aplicación de salas de chat que estaba construyendo. Tenía tres elementos principales: tabla de mensajes, tabla de usuarios y tabla de participantes. Los usuarios podían ser de dos tipos: participantes o anfitriones.
Establecí una regla que parecía lógica: "solo los participantes de un chat pueden ver los mensajes". Esto impedía que otros usuarios pudieran acceder a conversaciones privadas. Hasta ahí todo perfecto.
El problema surgió al intentar crear una sala. La aplicación verificaba si yo era anfitrión para permitirme crear la sala, pero para verificar si era anfitrión necesitaba comprobar los permisos en la base de datos, y para comprobar los permisos necesitaba saber si era anfitrión. Un círculo vicioso perfecto.
Pero la cosa empeoraba. Incluso cuando conseguía crear la sala, no podía acceder a ella. ¿Por qué? Porque aunque era el anfitrión, no era técnicamente un "participante" en la tabla de participantes, y solo los participantes podían ver los mensajes.
Cambié dos cosas para solucionarlo. Primero, hice que fuera la propia aplicación quien creara las salas usando permisos superiores, no el usuario directamente. Segundo, el acceso al chat pasó a depender de un código de acceso, no de verificar si eras participante en la base de datos.
2. Bucle de actualizaciones de estado
Esto me ocurrió con una aplicación de gestión de tareas que construí para organizar mis proyectos personales. Había configurado que cada vez que marcabas una tarea como completada, la aplicación reordenara automáticamente toda la lista para mostrar las tareas pendientes primero.
La lógica parecía correcta: completas tarea → lista se reordena → mejor experiencia de usuario.
Pero resultó que cada vez que la lista se reordenaba, la aplicación detectaba que había "cambios" en las tareas (porque habían cambiado de posición), así que volvía a ejecutar el reordenamiento. Y como al reordenar volvía a detectar cambios, se quedaba reordenando infinitamente.
La pantalla parecía que tenía epilepsia, con las tareas saltando de un lado a otro constantemente. Además, mi ordenador se calentaba como si estuviera minando Bitcoin.
Separé las acciones para solucionarlo. Marcar una tarea como completada era una acción independiente del reordenamiento. El reordenamiento solo se ejecutaba cuando el usuario hacía clic en un botón específico de "reorganizar lista", no automáticamente.
3. Bucle de verificación de autenticación
Construí una aplicación de seguimiento de hábitos donde quería que la experiencia fuera súper fluida. Para eso, configuré que la aplicación verificara constantemente si el usuario seguía logueado, para que nunca se encontrara con pantallas de "sesión expirada".
La aplicación verificaba cada pocos segundos si la sesión seguía activa. Pero cada vez que hacía esta verificación, Supabase actualizaba automáticamente el campo "última actividad" del usuario. Al actualizar este campo, la aplicación detectaba que había un cambio en los datos del usuario, lo que disparaba... otra verificación de si seguía logueado.
El resultado era que mi aplicación estaba haciendo cientos de consultas por minuto solo para "verificar" que el usuario seguía ahí. Esto era insostenible porque en el plan gratuito de Supabase tienes limitadas las "Database requests". Si alcanzas ese límite, la aplicación se bloquea hasta el siguiente mes o hasta que subes a un plan superior.
Hice dos cambios para solucionarlo. Primero, habilité la persistencia de sesión configurando el token de acceso de Supabase, que queda almacenado automáticamente y permite al usuario mantener su login durante días sin verificación constante. Segundo, solo verifico este token en momentos críticos: al cargar la página y cuando necesito importar datos de la base de datos para mostrarle al usuario.
Cómo detectar y solucionar bucles infinitos
En Lovable podemos detectar los bucles infinitos de dos maneras:
Al intentar realizar una acción nos puede saltar un toast que indica "error de recursión infinita"
En el chat, cuando la IA termina de ejecutar la petición, puede salir un mensaje de error con un botón de "try to fix"
En ambos casos, el primer paso es activar el modo "Chat". Añade contexto de qué ves en pantalla y pregúntale a la IA "¿qué está ocurriendo?".
Con el modo chat activado, Lovable empezará a analizar tanto el código como Supabase y te hará un reporte de lo que está pasando. Es posible que detecte errores y te explique cómo se están produciendo, ya que puede acceder a los logs de Supabase.
Es entonces cuando debes activar tu mente y volver al PRD, o simplemente pensar cómo debería funcionar tu aplicación. Es vital que entiendas cómo está construida, cómo se relacionan los elementos y las funcionalidades. Si algo no te queda claro, sigue preguntando en modo "Chat" hasta tener una comprensión global del problema.
En mi experiencia, aunque pueda parecer que estás gastando créditos, esta manera de proceder te ayudará a resolver muchos más problemas que simplemente darle a "Try to fix".
¿Has experimentado alguno de estos bucles? ¿O tienes uno diferente que no conseguiste resolver?
Apúntate a la sesión práctica y lo resolvemos juntos en directo.
La semana que viene abordaremos el segundo tema más votado en la encuesta: conexión con base de datos. Y sí, cumpliendo la promesa, será con mini-videos explicativos porque creo que se entiende mucho mejor con ejemplos visuales.
Espero verte en la MASTERCLASS (o como quieras llamarlo) resolviendo bucles infinitos 😝


Me encantó el post de hoy Pol. Super práctico y directo al grano. Gracias por compartir info valiosa para la comunidad de vibe coders. Un abrazo