Cómo nos enteramos de que algo se ha roto en producción antes de que lo diga el cliente
Un sábado por la mañana, un cliente de alimentación online nos escribió para avisar de que su carrito llevaba roto desde el viernes por la noche. No lo habíamos visto nosotros. Lo vio él, mirando el panel de pedidos y preguntándose por qué no entraba ni uno desde hacía catorce horas. Eso fue hace más de un año y todavía me da un poco de vergüenza contarlo, pero es la razón por la que ahora casi ningún proyecto sale de nuestras manos sin algo que vigile si sigue vivo.
Lo que había pasado era tonto: un cambio en una pasarela de pago devolvía un código distinto al que esperaba nuestro backend, y el error se tragaba silenciosamente en un try/catch que alguien (yo, para ser exactos) había escrito meses antes “por si acaso” y nunca revisó. Sin logs claros, sin alerta, sin nada. El checkout devolvía una pantalla en blanco y el usuario simplemente se iba.
Después de eso empezamos a meter Sentry en todos los proyectos con backend propio, no solo en los grandes. Cuesta poco (el plan gratuito cubre de sobra a un cliente pequeño) y captura excepciones no controladas antes de que las capture un usuario enfadado. Para sitios más simples, sin backend complicado, usamos Uptime Kuma autoalojado en el mismo VPS donde ya teníamos otras cosas corriendo: hace ping cada minuto a las URLs importantes y avisa por Telegram si algo deja de responder o tarda más de la cuenta.
La parte que no contamos tanto es que la primera versión de esto fue un desastre por exceso, no por defecto. Configuré Sentry para avisarme de cualquier excepción, sin agrupar, sin umbral. A la semana tenía más de doscientos correos acumulados de un error menor de una librería de terceros que no afectaba a nada real. Dejé de leerlos. Y claro, el día que hubo algo de verdad, estaba mezclado con el ruido de siempre.
Tuvimos que aprender a distinguir entre “esto rompe algo que el usuario nota” y “esto es un warning que puede esperar al lunes”. Ahora las alertas críticas van a un canal de Telegram que miramos literalmente todos, y todo lo demás se queda archivado en el panel para revisar una vez por semana. Bastante menos elegante que cualquier charla sobre observabilidad que hayas visto en una conferencia, pero funciona.
Lo que todavía no tenemos resuelto es el turno de guardia. Somos tres personas y ninguna quiere ser la que mira el móvil un domingo a las once de la noche por un cliente que paga trescientos euros al mes de mantenimiento. De momento la solución informal es “el que lo vea primero avisa al grupo”, que funciona mientras el equipo sea pequeño y nadie esté de vacaciones a la vez. No sé qué haremos el día que dejen de coincidir esas dos cosas.