Todo funcionaba bien… hasta que una pantalla empezó a parpadear

¿Programar? Ah sí, como en las películas: gente en piezas oscuras tecleando sin parar mientras pasan líneas verdes en la pantalla.

Por: Rafael Garín Varela - Team Lead en Buda.com

Ya bueno, sé que no piensas eso. Pero igual puede que te imagines algo distinto de lo que en realidad es. La verdad es que a veces programar es como jugar al detective. Esta es la historia de cómo un error en la página nos persiguió silenciosamente durante meses, y cómo lo resolvimos al más puro estilo Sherlock Holmes.

En Buda.com puedes comprar y vender criptomonedas de forma fácil y rápida. Solo tienes que seguir algunos pasos donde eliges la moneda y la cantidad que quieres comprar. Se ve así:

Antes de confirmar tu compra, te mostramos un resumen con el detalle: cuánto vas a pagar, cuánto es la comisión y cuánto de la criptomoneda vas a recibir según el precio actual:

También te reservamos el precio durante un minuto. Esto significa que si el precio de la criptomoneda cambia durante ese minuto, igual vas a pagar y recibir la cantidad que te aparece en el resumen. Cualquier diferencia la cubrimos nosotros. Así puedes revisar con calma el resumen y confirmar la operación sin sorpresas. Es una forma de proteger a nuestros usuarios frente a los movimientos rápidos del mercado de criptomonedas.

Para representar visualmente el paso del tiempo, hay un temporizador en forma de barra horizontal que se va vaciando. Una vez que pasa el minuto, la página actualiza el precio, reinicia el temporizador, y muestra un nuevo resumen.

Un día, un usuario nos escribió por el chat de soporte porque la vista del resumen no le funcionaba. Se veía así:

Al principio no nos quedó claro por qué ocurría este “parpadeo”. Sabíamos que no era un problema generalizado, porque solo le pasaba a él. Después de un tiempo aparecieron un par de casos más, pero siempre muy pocos. Pasaban semanas o meses sin que se repitiera, y cuando lo hacía, parecía casi aleatorio.

Intenté replicar el problema en mi computador, pero no pude. Le pedí al resto del equipo que revisara si les pasaba lo mismo, pero a nadie más le ocurría. Tenía hasta al CEO de la empresa pensando en cuál podía ser la causa.

Luego de un tiempo, un usuario accedió a juntarse con nosotros por videollamada para ayudarnos a descifrar el misterio. Le pedimos que probara hacer la compra de varias maneras distintas, para ver qué funcionaba y qué no. Al probar en modo incógnito o en otro navegador tenía el mismo problema, así que no era un tema del navegador. Pero a la vez podía comprar por la app sin problemas, así que no era un tema de su cuenta. Y lo más curioso: si intentaba comprar desde el sitio web pero usando su teléfono, tampoco tenía el problema. O sea, no era un problema específico de la página.

¿Cuál es el patrón ahí?

Nos fijamos que el error ocurría en su computador y solo en su computador. Es decir, que parecía ser algo relacionado con el dispositivo.

Lamentablemente eso no nos fue suficiente para descifrar el misterio en la misma videollamada, pero al día siguiente nos juntamos a revisar el código y pensar en el problema, esta vez teniendo a mano estos antecedentes (y la mente más fresca).

Ahí es cuando alguien tuvo la hipótesis de que podía ser un problema con la hora.

Fácilmente comprobable. Un par de clicks para cambiarle la hora al computador y ¡bingo!, logramos replicar el parpadeo.

¿Qué es lo que pasaba? La página recibe una hora límite para la reserva de precio. Una vez que esa hora queda en el pasado, se reinicia el temporizador. Pero si la hora de mi computador está en el futuro, entonces la hora límite siempre va a estar en el pasado y por tanto el temporizador siempre se va a reiniciar. Una y otra vez.

Entendiendo eso, la solución fue relativamente simple: usar la hora oficial del momento en vez de la que tiene el dispositivo del usuario.

Me gusta compartir esta anécdota como un buen ejemplo de la complejidad que implica desarrollar una página web. Detrás de cada click y cada pixel hay un montón de pequeños engranajes y detallitos, y todos tienen que estar funcionando correctamente.

También nos enseña que programar no es solo escribir código. También es observar con atención, hacer preguntas, probar escenarios improbables y estar dispuestos a cuestionar cosas que en principio nos parecen obvias.