Hoy quiero hablaros de cómo en el mundo del Business Intelligence, es importante tener en cuenta siempre los requerimientos iniciales, y no caer en el error de querer reaprovechar soluciones anteriores que, aunque brillantes en su escenario de partida, pueden llegar a ser desastrosas en un escenario distinto.
Una buena solución…
Hace años trabajé para un cliente que necesitaba una integración de datos para un proyecto en uno de sus clientes.
Al empezar el proyecto, les pedí que me hiciesen una descripción del escenario. La descripción fue clara y concisa. Un buen comienzo.
Seguimos con reuniones con las diferentes personas involucradas en el proyecto. Hablé con el jefe de proyecto, con los usuarios, con el departamento de sistemas, etc.
A partir de ahí, diseñé una carga de datos que satisfacía todos los requerimientos de su cliente. Tenía en cuenta tanto los requerimientos funcionales como técnicos, incluyendo los de rendimiento y seguridad.
El proyecto fue todo un éxito.
… no lo será para todos los posibles escenarios
Meses después, mi cliente contactó conmigo de nuevo para ver si podían reutilizar esa carga de datos para otro cliente suyo, con un proyecto, en principio, muy similar.
Mi respuesta inicial fue que la carga de datos posiblemente podía reutilizarse, ya que se trataba del mismo sistema origen y del mismo sistema final, pero matizando que se debían analizar los detalles del nuevo proyecto.
Mi cliente decidió no hacer ese análisis, asumiendo que las diferencias eran mínimas, obviando así los detalles del nuevo proyecto.
Para sorpresa de mi cliente, a medida que se acercaba la fecha de arranque del proyecto, empezaron a aflorar las sorpresas.
Se pasó de un requerimiento de carga diaria, a un requerimiento de carga de datos bajo demanda. Es decir, unas cargas de datos prácticamente en tiempo real. Eso supuso tener que modificar la carga de datos añadiendo una capa previa que pudiese detectar las peticiones de carga de los usuarios en tiempo real.
Una vez la solución estuvo en producción, afloró otro problema. El rendimiento de la carga de datos no era el esperado. El motivo es que los usuarios hacían un uso del sistema inicial de una manera completamente diferente a lo esperado. Por poner un ejemplo, observamos que los usuarios en vez de modificar unos pocos datos, recargaban los datos de todo el año en curso en cada ocasión. De esta manera el sistema debía eliminar todos los datos existentes de ese año y acto seguido, reinsertar todas esas filas que los usuarios habían generado desde el inicio del año. Y esta situación se podía dar simplemente por el hecho de modificar un solo registro de su base de datos. Por tanto, la carga de datos tenía que realizar un gran trabajo para poder hacer lo que en principio debían ser modificaciones simples, rápidas y eficientes durante las cargas de datos. Esto supuso la necesidad de crear una carga de datos totalmente diferente y adaptada a los nuevos requerimientos del sistema.
En este caso la reutilización del código fue un error. De hecho el error vino dado por no tener en cuenta los requerimientos iniciales de este segundo proyecto.
Conclusión
Al cambiar el escenario inicial, debemos plantearnos si la reutilización de una solución es correcta o no. Y para hacer esto es necesario realizar un análisis inicial.
Si asumimos que los escenarios son idénticos o que sus diferencias son mínimas, estaremos corriendo un riesgo que puede acabar en un sobrecoste para el proyecto.
Mi cliente aprendió la lección. Cuándo tuvieron que desplegar esa carga de datos en un tercer cliente, lo primero que hicieron fue tener reuniones con este cliente, para ver como utilizaban el sistema e identificar sus particularidades.
En ese caso, sí que acabaron reciclando o reutilizando una de las cargas de datos existentes. Y con éxito.