Conforme seguimos trabajando en la industria de la tecnología, nos damos cuenta que existen patrones en algunas de las aplicaciones hechas a medida existentes. Algunas de estas cumplen con las funcionales especificadas por el cliente y otras no (pero esa, es otra historia). Las que cumplen con las características especificadas por el cliente, cuentan con una buena experiencia e interfaz de usuario, aportando ciertos beneficios a los clientes del lado externo de la aplicación, en otras palabras: lo que el cliente y los usuarios ven.
Pero, ¿qué pasa con la parte interna? Lo que los desarrolladores ven, o sea: el código de una aplicación. La cual, en la mayoría de los casos muchos clientes no se preocupan por su aspecto o como luzca dicho código. Es aquí donde se pone interesante la cosa, ya que pueden existir dos aplicaciones que realizan las mismas funciones e inclusive cuentan con una buena interfaz y experiencia de usuario, pero una es más costoso que la otra ¿Por qué?… la respuesta es la calidad externa e interna con la que esta hecha la aplicación.
¿Cómo se puede definir una buena calidad de software?
Existen muchas cosas que pueden contar como calidad para el software. Hablando del lado externo de la aplicación (lo que el usuario ve) lo podríamos definir a través de las siguientes preguntas:
-
- ¿Me guía fácilmente a través de las tareas que necesito hacer?
- ¿Me ayuda a ser más eficiente?
- ¿Los resultados que proporciona son fiables?
- ¿Si el usuario se equivoca tiene un manejo de errores?
Y por el lado interno (lo que los desarrolladores ven):
-
- ¿El código fuente es claro?
- ¿El código esta dividido en modulo claros?
- ¿Es fácil la comprensión del código?
Estos ejemplos de calidad no son una lista exhaustiva, pero son suficientes para aclarar un punto importante. Si soy un cliente o usuario de la aplicación, puedo saber si la interfaz de usuario es buena o no. Un directivo puede saber si una aplicación hace que su personal sea más productivo. Los usuarios y clientes se percataran de los defectos, especialmente si corrompen los datos o hacen que el sistema no funcione durante un tiempo. Pero los clientes y los usuarios no pueden percibir la arquitectura del software.
De modo que un desarrollador o una persona con los conocimientos técnicos necesarios, sí puede darse cuenta de cómo esta la arquitectura, ver si el código es claro, entendible y más, de una aplicación.
Pero, ¿Importa la calidad interna de una aplicación?
A primera instancia parece no ser importante para los clientes y usuarios, ya que ellos pueden ver y evaluar la calidad externa de la aplicación y corroborar si les ayuda o no a sus procesos, sin darle mucha importancia a la parte interna.
De tal forma que los usuarios y clientes pueden ver qué hace que un producto de software tenga una alta calidad externa, pero no pueden diferenciar entre una calidad interna más alta o más baja. Pero, ¿realmente importa la calidad interna? Imaginemos que la empresa X y Apliint desarrollamos la misma aplicación, ambas aplicaciones hacen las mismas funciones, cuentan con interfaz y experiencia de usuario agradable y ambas casi no tienen ningún error. La única diferencia es que el código y estructura de la aplicación de la empresa X esta desorganizada y la de Apliint esta muy bien organizada y a parte de todo esto el costo de la aplicación de la empresa X es de $10,000 USD y el costo de la aplicación desarrollada por Apliint es de $14,000 USD.
Dado que el cliente nunca ve este código fuente y no afecta el funcionamiento de la aplicación, ¿Por qué pagaría $4,000 USD adicionales por el software de la empresa Apliint?. En términos genérales, esto debería significar que no vale la pena pagar más dinero por una mayor calidad interna.
Visto de otra forma es que tiene sentido intercambiar costo por calidad externa, pero no hace mucho sentido intercambiar costo por calidad interna. Dicho esto un usuario puede juzgar si quiere pagar más para obtener una mejor interfaz de usuario, ya que puede evaluar si la interfaz de usuario es lo suficientemente agradable como para que valga la pena el dinero extra. Pero un usuario no puede ver la estructura interna de la aplicación, y mucho menos juzgar que es mejor. Entonces ¿Por qué pagar más por algo que a simple vista no tiene ningún efecto? Y ademas ¿Por qué un desarrollador debería de dedicar su tiempo y esfuerzo a mejorar la calidad interna de su trabajo?
La respuesta clave es: La calidad interna facilita la mejora y crecimiento continuo de la aplicación.
Cuando se desea agregar una nueva función a una aplicación, la primer tarea es investigar y comprender cómo es que funciona determinada parte de la aplicación, como se relacionan con los datos y que se necesita para agregar esta característica.
Tratándose de una cosa: Entender el código existente. Y si este no cuenta con una buena estructura la lógica se hace compleja ya que puede enredarse, los datos pueden ser difíciles de seguir, los nombres utilizados para referirse a cosas pueden haber tenido sentido para una persona hace meses y la lista de problemas sigue. Todas estas son formas de lo que los desarrolladores denominan cruft: la diferencia entre el código actual y cómo sería idealmente.
El costo adicional de agregar funciones se vuelve cómo pagar intereses. Ya que revisar el código para corregir errores y/o agregar nuevas funcionalidades se convierten un un dolor de cabeza ya que un cambio complejo puede llevar llevar semanas o inclusive meses.
¿Vale la pena pagar un costo extra por la entrega de un software de alta calidad?
La respuesta es…¡Por supuesto! Siempre y cuando la aplicación este bien estructurada interna y externamente. Ya que una aplicación podrá lucir muy bonita, intuitiva, funcional, y más, pero si la estructura interna esta mal hecha, a la larga traerá consigo demasiados problemas a las organizaciones, clientes, desarrolladores e inclusive a los mismos usuarios que en un momento les ayudaba la herramienta, ya que al momento de tratar de hacer crecer la aplicación o corregir errores, será muy complicado, costoso y llevara más tiempo de lo normal, para entenderla y hacerla crecer.
De tal forma que, no solo una buena calidad de software se refleje por fuera sino que también por dentro, a fin de que la aplicación pueda crecer de una manera correcta y de una forma más rápida.
Y mejor aun si una aplicación es creada desde un inicio tanto por fuera como por dentro con una buena calidad, a la larga traerá consigo más beneficios y reducción de costos, aunque de momento requiera una inversión más grande al principio.