Ultimamente han venido a mi cabeza ideas de analogías sobre el control de calidad, y he querido expresarlas aquí.
¿Que sucede comunmente cuando se desarrollan proyectos a pequeña-mediana escala y estos son evaluados por los usuarios finales?
Les dibujo un panorama antes. Una micro-empresa los contrata para el desarrollo de una aplicación web, donde tienen que administrar la venta en línea de ciertos productos. Esta aplicación tiene dos ámbitos: uno público para el consumidor final, y otro administrativo para personal entrenado. Gente que sabe, o debería saber hacer su trabajo.
Bueno, pues bien, empeiza la etapa de pruebas por los usuarios (como es un proyecto pequeño, no existe departamento de calidad, el departamento de QA son, los usuarios finales, y uno mismo) , y estos hacen y deshacen de la aplicación llevándola a condiciones que el desarrollador no se imagina.
El triste escenario más común, es que el usuario final, encuentre no uno, ni dos, sino varias maneras de hacer fallar el sistema, y el desarrollador quede en vergüenza, argumentando que un sistema debe contemplarlo todo y evitar mensajes de error inesperados. Que sucede a continuación ? El desarrollador, quien está sujeto a la aprobación del cliente puesto que él tiene su cheque en espera, baja la cabeza, y corrije los fallos.
Ahora… Hablemos con la verdad.
Se sabe en el mundo del desarrollo dos cosas :
1- El desarrollador piensa que el usuario es un estúpido, incompetente, con un coeficiente por debajo de un ratón buscando queso.
2.- El usuario piensa que el desarrollador es un idiota arrogante, necio y además perezoso, que siempre se negará a hacer algo a pesar de que sea para su beneficio.
Pues bueno, yo creo que ambos tienen razon, y no al mismo tiempo.
Aceptemos, que ya estamos bajo este paradigma, y como desarrolladores, estamos hartos de probar una y otra vez nuestra propia aplicación, y no entendemos, como alguien puede hacerlo tan mal una sola vez mientras que nosotros hacemos el proceso perfectamente siempre. Aceptémoslo, NO LE TENEMOS PACIENCIA AL USUARIO, NO TENEMOS TIEMPO PARA SU INEFICACIA. Y es entendible, puesto que nuestro trabajo (hablando exclusivamente como desarrolladores) es desarrollar instrucciones lógicas para que una máquina haga su labor, no capacitar ni bordear todas las infinitas causas de un error. Tal vez ese trabajo le corresponda a alguien más, alguien destinado para atención al cliente. Un mediador.
Y, del otro lado, como usuarios, muchas veces hemos usado una aplicación, esperando que sea tan intuitiva como una interfaz de iPhone. Yo, al menos, he hecho berrinche pensando cómo es posible que los diseñadores de la interfaz de una aplicación no pensaron en que desconozco por completo del tema, y su aplicación no me permite avanzar puesto que no me manda ningún mensaje de error. Inmediatamente me dibujo en mi cabeza la imagen de un programador rascándose la barriga diciendo ‘Que se joda el usuario, si no hace bien las cosas, no es mi problema’.
Ahora… creo que es responsabilidad del usuario investigar antes sobre un producto, antes de usarlo. El usuario espera de la computadora y su software demasiado, y creo que esto es gracias a la dramatización de las películas, que han humanizado el software: Programas que hablan con personas, que son capaces de analizar la realidad sin los sensores adecuados, alguien recuerda como Kitt, el auto increible, podía averiguar cuantas personas habían en una habitación ? tambien contenía todos los planos de todos los edificios que se puedan imaginar. Una vez, escaneó las huellas de una llanta, y le dio a Michael Knight la marca, modelo de neumático, y la matrícula del auto que lo manejaba. Creo que eso le ha dado un concepto erróneo de las computadoras a las persona que NO SABEN DE COMPUTADORAS.
Ahora, imaginen esto: Llega un cliente a un concesionario de autos, y pide una prueba de Manejo.
Arranca el carro, mete primera velocidad y avanza, inmediatamente mete quinta velocidad, y el carro hace ruidos extraños. entonces, el usuario reclama «porque el carro no contempló esto?!!!».
Luego, se baja del automóvil, le saca el aire a una llanta, y sigue manejando, el auto obviamente pierde control rápidamente, y el usuario vuelve a reclamar: «porque el carro no sabe prevenir este problema?!!»
Luego le vacía el anticongelante, el carro se recalienta, y vuelve a reclamar…
Se que suena absurdo, pero, no es absurdo que una persona también meta letras en un campo donde le piden la edad ?
No es absurdo que una persona quiera crear una factura cuando ni siquiera ha elegido un producto a facturar ?
«Es que, el usuario puede andar distraido, y teclear erroneamente datos»
o «El usuario no tiene porque sufrir la complejidad del sistema, el sistema debe guiarlo intuitivamente a través del proceso»
Nuestros líderes de proyecto siempre nos decían «Piensa que el usuario es el ser más tonto que hayas imaginado»
Creo que en la computación se le está deslindando cierta responsabilidad al usuario final, se le está permitiendo ser tonto, o descuidado, y se le está cargando todo un esfuerzo en evitar catástrofes a los sistemas por medio de procesos de calidad.
No estoy en contra de la calidad de un sistema, pero, vamos, la gente sabe que si metes aluminio al microondas, se descompone. La gente sabe que si le echas otro liquido que no sea gasolina al tanque de un auto, dañas el auto. La gente sabe que si haces una fogata dentro de un refrigerador, se quema !
PORQUE NO PODEMOS EXIGIR CIERTO SENTIDO COMUN A UN USUARIO EN COMPUTACION ??
Ahora… dos cosas:
1- La tecnología, le hace la vida más fácil a la humanidad. Hoy en día es más difícil estropear un automovil que hace 30 años, puesto que la mayoría trae sensores que alertan a las personas para hacer las revisiones y reparaciones adecuadas a tiempo. Aun así, un auto de línea económica no tiene el mismo sistema de calidad y confort que un auto de super lujo. Sabemos que el auto de superlujo tendrá una mejor computadora, tendra mas sensores y mejor control sobre tracción, frenos, motor, etc.
Porque no podemos llevar esta analogía al software ? Enfocarnos en el tipo de usuario que tenemos enfrente, y saber que tipo de control de calidad estamos dispuestos a desarrollar, y cuanto el esta dipuesto a pagar. Por que el control de calidad cuesta, tiempo y recursos hombre.
Tal vez el usuario espera un control de calidad de super-lujo, cuando está pagando el tiempo y esfuerzo para desarrollar un control de calidad austero. Seamos realistas y proyectemos esa realidad al usuario.
2.- La tecnología continuamente va avanzando, y la humanidad se va adaptando a ella. Volviendo a la analogía de los autos, Hace 10 años tener frenos ABS era carísimo puesto que estaba en sus inicios y solo las marcas que la habian desarrollado podian implementarla. Hoy en día tener frenos ABS en un automóvil es más economico, y esto es porque ya están probados, refinados y el sistema ha madurado, y al extenderse en todas las marcas, se vuelve menos complicado de implementar.
Asi sucede con el software y la gente. Hoy sabemos que la validación básica de un formulario no es tan complicada que hace 10 años, y esto es gracias a los patrones de diseño, frameworks y otras herramientas como el paradigma AJAX nos resuelven gran parte del camino.
Espero haber aclarado el punto de todo este rollo que les he escrito:
Es cierto, hoy en día es más fácil implementar validaciones básicas, y también es cierto que es responsabilidad nuestra asegurar un nivel de calidad adecuado. Pero tampoco se vale como usuario ponerse en el papel de ‘no se usar una computadora’ . Si no sabes como usar algo, usalo bajo tu propio riesgo, tomate el tiempo de aprender, lee el manual, pregunta, no esperes que el cielo se te abra y te caiga la respuesta del cielo.
Los programadores no tienen excusa para ser flojos y antipaticos con el usuario.
Los usuarios no tienen excusa para ser ignorantes y tontos.