La semana de los detalles que nadie ve (hasta que fallan)
Una semana sin features grandes, pero con cuatro arreglos que cambian cómo se siente cada producto: CTAs más legibles en Hezu, traducciones que no se inventan en Chordna, notificaciones limpias en Ganga24 y resúmenes que dejan de cortarse en Sofi.
Hay semanas de fuegos artificiales y semanas de fontanería. Esta fue de las segundas, y probablemente de las más útiles del mes.
Ni una feature nueva sobre la mesa. En su lugar, cuatro productos pidiendo atención por motivos distintos: un CTA que la gente no veía, una IA que traducía a su bola, un bot que filtraba en voz alta, y un resumen que se cortaba a la mitad porque el modelo se quedaba pensando. Cosas que en una demo no impresionan a nadie, pero que separan un producto que da gusto usar de uno que da pereza.
Hezu: cuando el botón está, pero no se ve
En Hezu llevábamos arrastrando algo incómodo: el CTA principal de la guía era técnicamente visible, pero perceptualmente invisible. Texto demasiado claro, contraste flojo, perdido entre dos grupos de botones que competían por la mirada. La métrica decía "está ahí", el ojo humano decía "¿qué CTA?".
La solución fue menos sexy de lo que suena: texto más oscuro, highlight más marcado, tamaño un punto arriba. Y un cambio que en producto pesa más que el diseño: un micro-CTA justo debajo, diferenciar visualmente los dos grupos de botones (uno es la acción principal, el otro es contexto) y mover la trust badge a un sitio donde no robe atención al primer scroll. Es la W3 de la FEAT-022, que básicamente es "dejad de tratar la home como un escaparate y tratadla como una conversación".
El detalle marketinero que vale la pena anotar: la gente no lee, escanea. Si tu CTA necesita tres segundos para encontrarse, ya perdiste. Si compite con otros tres botones del mismo peso, también. Esta semana asumimos esa verdad y movimos píxeles en consecuencia.
Chordna: la IA bilingüe que era un poco mentirosa
En Chordna salió un hotfix que es de los que duelen porque revela una decisión de arquitectura mal pensada desde el principio. Estábamos generando contenido en español y luego traduciéndolo a inglés. Suena razonable: la mayoría de los usuarios iniciales están en español, ergo generamos en español primero.
El problema es que los modelos no son neutrales por idioma. Generan mejor en inglés, tienen más matiz musical, citan referencias más finas. Cuando generábamos primero en ES y traducíamos a EN, el resultado en inglés era una versión mediocre de un texto que ya era el techo de calidad del modelo en ese idioma. Y cuando un fan de jazz angloparlante leía la página, notaba el olor a traducción a metros.
La fix es trivial de explicar y un poco humillante de aceptar: generar siempre primero en inglés, traducir después al español. Más calidad en ambos idiomas, paradójicamente, porque ahora la traducción ES parte de un original más fuerte. PR #35, una tarde, gran impacto silencioso. De esos arreglos que nadie aplaude pero que un usuario nuevo no nota porque ya está bien desde el día uno.
Ganga24: dejar de chivarse en Telegram
El bug de Ganga24 es mi favorito de la semana porque es de los que solo ves cuando alguien externo se ríe de ti. El sistema tiene un prefilter interno que decide si una oferta vale la pena enviar al canal de Telegram. Ese prefilter genera texto explicativo (cosas tipo "esto pasa el filtro porque el descuento real es >40%") que era para uso interno, log, debugging.
Adivina dónde estaba acabando ese texto. Sí, en la notificación de Telegram. Los suscriptores veían razonamiento interno mezclado con el contenido del deal. Un poco como si en un restaurante te llegaran las notas del cocinero pegadas al plato.
Fix: sanitizar el output antes de mandarlo al canal, dejar el contexto interno donde tiene que estar (logs) y que el usuario vea solo lo que viene a buscar — el deal, limpio, sin meta-comentario.
Sofi: cuando "pensar más" significa "responder menos"
Y el último, que es el más técnico y el que más tiempo nos llevó diagnosticar. Sofi usa Gemini 2.5 para generar resúmenes diarios de actividad. Llevábamos unos días notando que ciertos resúmenes salían cortados a mitad de frase, sin patrón claro: a veces el resumen perfecto, a veces un final abrupto.
La pista estaba en cómo Gemini 2.5 reserva tokens. Los modelos con modo "thinking" gastan tokens en el razonamiento interno antes de empezar a escribir la respuesta visible. Si tu max_output_tokens es justito para el output esperado, el modelo se queda pensando, consume tokens en thinking, y cuando llega a generar la respuesta visible se queda sin presupuesto y trunca. No es un bug del modelo, es un bug del que configura el modelo (o sea, nosotros) por no leer la letra pequeña del cambio de versión.
El arreglo es subir max_output_tokens con margen suficiente para que el thinking no canibalice la respuesta. Detalle pequeño, fix de una línea, días de "¿por qué a veces sí y a veces no?". Es el tipo de cosa que justifica tener observabilidad decente — y también el tipo de cosa que recuerda que cada vez que un proveedor saca un modelo nuevo con "capacidades extendidas", parte de la factura la paga el equipo que lo integra.
El patrón de la semana
Mirando las cuatro cosas juntas, hay un hilo que une todo: producto pulido no es producto sin bugs, es producto donde los detalles no luchan contra el usuario. Un CTA que se ve, una traducción que no canta, una notificación sin ruido interno, un resumen que termina cuando tiene que terminar. Cero feature nueva, cuatro productos sensiblemente mejores.
No va a salir en ningún post de LinkedIn. Está bien.