Hay una clase de error que no aparece en tu pantalla. No sale en la consola, no rompe el build, no enciende ninguna alarma. Vive, tranquilo, en el único lugar donde nunca miras: el teléfono de la persona para la que construiste todo.
Hoy lo encontramos. Y la historia de cómo lo encontramos vale más que el código que lo arregló.
Lo que salió a producción
PRISMA es un producto de la corporación: un intake de “brand sprint” en autoservicio para dueños de pyme. La idea es fácil de decir y difícil de hacer bien — que alguien con un negocio y sin diseñador cuente su historia en un formulario, y del otro lado reciba una marca.
Esta sesión levantamos la v2.0. No fue un retoque. Fue un rediseño editorial completo y, sobre todo, el flujo transaccional de punta a punta: el cliente cuenta su negocio, Javier revisa y aprueba o rechaza, el cliente paga por transferencia, recibe su marca en una página privada y deja su opinión. Detrás quedó un panel de administración, una entrega automática —clave y link de un solo click—, un estándar de calidad que toda entrega debe cumplir, y hasta un comando que orquesta la producción de principio a fin.
Sobre el papel, un sistema cerrado. En pantalla, impecable. Y ahí está la trampa.
El botón que no hacía nada
Javier no se quedó mirando la pantalla del computador. Hizo lo único que importa: salió a probar el producto donde entra su gente. Abrió PRISMA desde el navegador que vive adentro de Instagram. Desde el de WhatsApp. Desde teléfonos de pyme más viejos, de esos que siguen trabajando años después de que el resto del mundo los dio por muertos.
El botón “Siguiente” del formulario estaba muerto. No lento, no con glitch: muerto. No pasaba absolutamente nada al tocarlo. La página se veía perfecta —el servidor la entrega ya renderizada, así que el diseño estaba ahí, intacto— pero el formulario no respondía a nada. Un maniquí precioso en la vitrina.
En el computador de desarrollo —Chrome de escritorio, Safari de escritorio— funcionaba perfecto. Cero errores. Ese es el veneno: el producto estaba silenciosamente roto para exactamente las personas para las que lo construimos, y en ninguna de las pantallas donde lo mirábamos nosotros se notaba.
Una sola línea
La causa cabía en un renglón. Una llamada a crypto.randomUUID() —una función que genera un identificador único— que en esos navegadores, sencillamente, no existe. Cuando el código la invocaba, no obtenía un identificador: obtenía un error. Y ese error, sin blindar, mataba todo el JavaScript del formulario antes de que los botones alcanzaran a “despertar”.
No fallaba el botón. Fallaba una línea, tres pantallas antes, que tumbaba al botón de paso. Toda la interactividad de la página dependía de que esa función existiera — y para el navegador de Instagram, no existía.
El arreglo, medido en caracteres, es minúsculo: proteger esa llamada y darle una alternativa cuando el navegador no la trae. El arreglo, medido en lo que significa, es enorme. Es la diferencia entre un producto que se ve terminado y uno que funciona para quien paga.
Lo que esto enseña
Dev no es la realidad de tus usuarios. Es una frase que todos repetimos y casi nadie cree hasta que le pasa. Tu máquina es un navegador moderno, con la última versión de todo, en una pantalla grande, con buena conexión. La persona que necesita PRISMA está en un teléfono modesto, dentro de una app, tocando un enlace que le llegó por mensaje. Son dos mundos, y solo uno de ellos paga.
La única razón por la que este error salió a la luz es que Javier no confió en su propia pantalla. Fue a buscar el problema al lugar incorrecto a propósito — al navegador “raro”, al teléfono viejo, al contexto real. Ninguno de los tests que teníamos lo habría cazado, porque todos corrían en el mundo cómodo.
De paso, esa misma vuelta por producción destapó dos cosas más. El verde de selección de texto del sitio corporativo se estaba colando dentro de PRISMA, un detalle que solo ves cuando arrastras el dedo sobre un párrafo; se corrigió. Y una revisión de textos dejó al descubierto una pregunta frecuente mal redactada, de esas que en vez de resolver una duda, la siembran.
Lo que viene, y lo que deliberadamente no viene
Ahora abrimos PRISMA a sus dos primeras entregas de pago reales. Dos. No es un número tímido por miedo — es un número elegido. Antes de gastar un solo peso en difusión, queremos saber algo que todavía no sabemos: cuántas horas de trabajo real cuesta producir una entrega de principio a fin.
Es tentador abrir la llave de golpe. Pero una llave abierta sobre un costo que no conoces no es crecimiento, es apuesta. Con dos entregas medidas de verdad —cronómetro, no intuición— vamos a saber si el modelo respira. Recién entonces se justifica invitar a más gente.
PRISMA todavía no ha tenido su primera venta. Lo digo con todas sus letras porque es la parte honesta de construir en público: hoy la victoria no es un número de ventas. Es haber encontrado, antes que un cliente, el botón muerto que le habría dado la bienvenida.