Me considero perfeccionista y durante el tiempo que me ha tocado iniciar en varios proyectos, suelo tener dudas cuando me toca elegir cierta tecnología(s) para desarrollar y hacer ese proyecto realidad.
Cabe mencionar que en los últimos años han salido múltiples tecnologías que cumplen un mismo fin con diferentes diseños, implementaciones, patrones, lenguajes, etc. Por ejemplo, hace años lo común era utilizar jquery para interactuar con un sitio web, era el rey y nadie lo quitaba de ahí. Al día de hoy que publique esto, hay cien mil frameworks (Sarcásticamente), tecnologías, librerías que hacen lo mismo y el problema recae en los líderes, para tomar la decisión correcta de que “elegir”, que es “mejor” y más “sano” para los intereses de un proyecto por desarrollar.
Aquí entra la maldita deuda técnica, que es básicamente:
“Una tecnología que queda a deber a los requerimientos de software”
Lo explico en un ejemplo, hace un tiempo tuve un proyecto con ionic, el desarrollo de mi equipo fue genial dado que la app era productivamente estable durante el tiempo que iba creciendo con nosotros. Cierto día se pidieron algunos requerimientos extra sobre la manera de tomar fotografías (que era parte del core business).
Nos dimos cuenta que el manejo nativo de la cámara en ionic es fatal, no se tiene mucho control sobre ciertos escenarios y otros termina desbordando la memoria como en este issue https://github.com/apache/cordova-plugin-camera/issues/665 que fue cerrado pero en los dispositivos que utilizaban en produccion seguia el problema.
Había un problema grande: “el requerimiento no podía ser cumplido”, reanalizando los parámetros del mismo, dimos con una solución que exigía a los usuarios ejecutar un par de clics más, que ciertamente no fue del agrado de todos (Entendiblemente).
Era eso o desarrollar un puente nativo en Java con un transpilador para hacer conexión a un plugin de ionic y empezar a conectar cables, ese sería en el caso hipotético que no tuviera problemas de ejecución, lo cual era costoso.
Así que nos dimos cuenta que teníamos una “deuda técnica”.
Como este caso he pasado por similares, lo cual resulta negativo para el cliente, gerentes, el desarrollo y sostenibilidad de los requerimientos. Siendo críticos, no hay que elegir la tecnología a la ligera, por que sea lo más novedoso, lo más grandioso, lo más usado, hacerlo así, podría traer pérdidas y proyectos al fracaso.