NUNCA lo olvides, mensajes de usuario en lugar de mensajes de excepción
Hace poco menos de 1 mes me encontraba en una de esas famosas tiendas de Madrid y de otras partes de España donde se puede hacer casi de todo (hacer la compra mínima de urgencia, comer o cenar, comprar o leer libros y revistas, comprar música y películas…).
Próximo a la parte de la tienda dedicada a la música y las películas me encontré una curiosa caja de metal y de forma rectangular para recoger entradas para ir al cine y espectáculos.
Me quedé mirando el «cacharro», que no era otra cosa que una caja metálica con una pantalla y un pequeño interfaz para registrar los datos personales que nos solicitaba, y un flamante cable que salía descaradamente de la parte posterior para esconderse en el suelo en una más que posible regleta.
Como uno es curioso por naturaleza y puesto que nadie me lo impedía, me puse a toquetear en la aplicación para ver que tal se comportaba, como era de amigable, y bueno… pensando en que siempre es posible aprender algo nuevo (porqué no decirlo).
Empecé a usar la aplicación, y sin entrar en la discusión de si era más o menos bonita, intuituva, etc., y centránome en lo estrictamente funcional, efectivamente obtuve un listado de los espectáculos en cartelera, una breve sipnosis, y simulé que quería una entrada de una de los espectáculos para ver hasta donde podía llegar y «probar» más aún todo el proceso.
Todo fue correctamente hasta que llegó el momento de conectarme con el servidor para reservar asiento y formalizar la compra.
Ahí y transcurrido un rato, ocurrió un error con el sistema y me devolvió un pantallazo como el que se puede ver a continuación (no os fijéis mucho en la pobre calidad de la imagen):
El pantallazo es realmente nefasto. El error está claro que parece estar originado por un timeout en la respuesta del servidor de base de datos.
Ahora bien, todo esto para indicar una cosa que se repite una y otra vez, que no es nueva, pero que no siempre tenemos presente en los desarrollos Software que hacemos.
Repita conmigo: ¡NO es conveniente ni buena práctica volcar en pantalla la información que devuelve una excepción!.
Seamos un poco más estrictos y repita nuevamente conmigo: ¡NUNCA muestre mensajes de excepciones ni mensajes genéricos a un usuario!.
Se me revuelven las tripas de solo ver la imagen que capturé con el mensaje que apareció en pantalla. En mi caso porque entiendo un poquito lo que puede haber pasado, pero un usuario normal… ¿qué le importa todo eso que aparece en pantalla o para qué es?.
Al usuario lo que le interesaba es que apareciese no todo ese texto ahí desorganizado, sino un simple mensaje del tipo: «En estos instantes, la aplicación no es capaz de conectarse con el sevidor. Inténtelo pasados unos minutos o más tarde.».
Eso sin entrar en el detalle de que en la pantalla aparecen los dos posibles casos con diferente fuente de letra y enmarañado entre el mensaje devuelto por la excepción.
Está claro, que en el log interno se podría haber registrado el detalle del error, pero al usuario le importa realmente un rábano si es un Timeout expired, si tiene algo que ver o no EntaNetDAL.EntaNetSQLDB.Generic o lo que sea.
¿Porqué pasa esto?. Porque muchas veces pensamos como programadores y no como usuarios. Tan simple como eso.
No obstante y tratando otro tema mucho más sensible sobre lo mismo, el riesgo de mostrar mensajes de este tipo, es grandísimo, ya que en algunas ocasiones, podríamos comprometer incluso la seguridad de la aplicación y/o de los datos si mostramos información relevante. No sería la primera vez que aparece información sensible y que de repente, «alguien» nos ha hackeado nuestra aplicación.
Recordemos siempre que los usuarios solo entienden un lenguaje. El lenguaje breve, claro y conciso.
Los programadores y técnicos hablamos en una jerga mucho más compleja y técnica, pero el usuario solo quiere algo agradable a la vista, incluso cuando se produce un error de tipo Timeout como el caso del ejemplo.
Finalmente, agrego como referencias alguna documentación útil sobre el tema de las excepciones, por si queremos aprender más acerca de ellas.
Referencias:
Una interesante entrada en inglés sobre las mejores prácticas en el manejo de excepciones.
Krzysztof Cwalina con cuenta en inglés como elegir el tipo de excepción correcta a lanzar.
Información del blog de Shiman’s sobre las excepciones de aplicación.
Exception Management Architecture Guide. Guía de Microsoft sobre la gestión de excepciones.
8 Responsesso far
Jajajaja que bueno tio, es muy normal este tipo de excepciones por ahí….En que pensaremos los programadores :P?? (porque claro luego la culpa es de nosotros que teníamos mucho tiempo xD) Jejeje
Saludos crack!!
Hola Jorge, me ha gustado pero cuando preguntas ¿Por qué pasa eso? creo más bien que es que se ha olvidado, que ese mensaje le ha usado el programador y luego se le ha olvidado cambiarlo.
La vida en Madrid sin estas tiendas sería imposble jeje
@Fran, muchas gracias por comentar. A veces pasa lo que apuntas, los tiempos ajustados nos obliga a focalizarnos y priorizar unas tareas por encima de otras para hacerlas más adelante, y después,… ya nis acordamos de cambiarlas.
Seguir una metodología y tareas organizadas nos ayudaría a evitar este tipo de situaciones.
@Eduardo, efectivamente es posible que sea como dices, que al programador se le haya olvidado (no dudo que en este caso concreto pudiera ser así), pero muchas veces como programadores nos olvidamos de esos detalles porque los dejamos para el final del desarrollo (como le decía a Fran) o porque como comentaba, no nos ponemos el gorro del usuario o peor aún, no lo identificábamos como tarea. Lo mejor es ponerlo como tarea y hacerlo al mismo tiempo que se desarrolla, de esa manera, no se nos olvidarían estas cosas imperdonables en cualquier desarrollo Software (este es un ejemplo, pero hay cientos de ellos).
Muchas gracias a ambos por comentar.
Hola Jorge, soy un lector frecuente de tu blog, esto que comentas es muy cierto muchas veces no nos ponemos en los zapatos del usuario y mostramos ya sea por olvido o por flojera los mensajes de excepción, error fatal.
Cuando comenzaba a programar me llego a pasar, y a veces por simple flojera, hasta que un día un usuario me dijo directamente «Te pago por hacer algo amigable y funcional o por mostrarme esos mensajes que no tengo ni idea de lo que dicen»
En este momento recapacite y jamás volví a hacer decidía con respecto a este tema. Así que estoy de acuerdo con esto, no olvidemos nunca mostrar mensajes amigables y entendibles al usuario en vez de esos horribles mensajes de excepción.
Tienes mucha razón, hace poco vi un sistema que mostraba el sgte error: «Ocurrió un error inesperado». Quería llorar 🙁
@Marco, muchas gracias por comentar lo que te pasó. Me alegro de que tengas en cuentas siempre no caer en la flojera que comentas de… ya lo haré luego.
Por cierto, muchas felicidades por el libro Delphi Prism. 🙂
@ckomiya, lo del error inesperado es de los «mejores» mensajes que se pueden mostrar… sobre todo si vuelves a ejecutar nuevamente la aplicación y en el mismo punto ocurre una y otra vez lo mismo al más puro estilo del día de la marmota… en ese instante, lo más seguro es que desinstalarás la aplicación y no se la recomendarás a nadie.
Muchas gracias por comentar. 🙂
A ver si no me olvido, a ver si no me olvido, a ver si no me olvido…
Es un puro defecto de los programadores, porque somos más programadores que usuarios, y cuando vemos un error, preferimos el mensaje de excepción para saber qué es exactamente lo que ha ocurrido y donde ha ocurrido en vez de una bonita y en ocasiones ridícula frase que dice que algo ha pasado, no dice por qué y no da pistas sobre cómo solucionarlo.
Recuerdo un divertido capitulo de “Why Software Sucks” (D.Platt) que habla de esto.
Una vez más, a ver si no me olvido, a ver si no me olvido …
Un abrazo,
Carlos.
si… parece mentira la cantidad de aplicaciones que hay por ahí sin gestión de excepciones…