Cuando hablamos del termino puro “arquitectura” hablamos de un concepto abstracto en el que generamos un diseño, una proyección y una construcción, como si de una casa se tratase y estuviéramos realizando los planos antes de comenzar a colocar los ladrillos, el tema es justamente esto, cuando estamos haciendo la casa, debemos considerar muchos puntos que son de suma importancia y si no los consideramos desde el inicio luego llevarán mucho más tiempo que el estimado, como por ejemplo, se debe considerar por donde pasa y cómo la electricidad, el agua, las columnas, ventanas, puertas, el aire, el sol, los diferentes suelos, materiales de construcción, etc.
En el caso tecnológico es exactamente lo mismo, no es solo la arquitectura del diseño de la aplicación que estamos pensando desarrollar, hablamos de seguridad (dentro de la seguridad tenemos: Infraestructura de red, autenticación, autorización, encriptación de datos) , comunicaciones, el framework que vamos a utilizar, (si no tenemos uno, debemos diseñar uno y considerar cada uno de estos puntos de forma específica y ser especialistas en cada uno de los temas), o contratar a varios especialistas ;-), porque aunque parezca mentira el tema esta justamente allí, no existe ninguna escuela o universidad que nos enseñe a diseñar, configurar, programar, administrar, contratar, liderar y ejecutar proyectos de tecnología para todas las tecnologías y sus diferentes capas, como así también el conocimiento que se necesita en cada uno de los temas debe ser el máximo y actualizado al último día para aprovechar las ventajas tecnológicas y su relación de forma integral, por eso muchas veces cuando leo las búsquedas que se realizan indican la falta de conocimiento en general acerca de las especialidades técnicas de los consultores y las diferentes capas de tecnología necesarias para la realización de un proyecto y/o actividad.
Siempre se debe considerar la diferencia entre realizar proyectos de tecnología sobre herramientas conocidas (realizar un paso a paso de lo que ya sabemos) o realizar proyectos de innovación, sabemos lo importante que es el “time to market” hoy en día, sin embargo para proyectos de innovación los tiempos que se manejan son diferentes, debido a que no solo cada una de las personas debe hacer su trabajo como lo conoce, sino que debe incluir un tiempo para aprender acerca de las nuevas tecnologías (esto extra de sus actividades dentro del proyecto), y hay que agregar que este tiempo de aprendizaje es diferente para cada una de las personas por eso siempre debe considerarse una prueba de concepto como parte del plan de proyecto.
Debemos utilizar o crear una metodología que cumpla con los pasos/documentos más importantes para el tipo de proyecto que se va a ejecutar y para las diferentes industrias, la metodología debe considerar desde el cómo se va a plasmar la información que el cliente nos brinda, hasta como vamos a dejar los documentos de la configuración(si la hay y elegimos un producto conocido aceptando que nos adaptaremos a él), sumando el desarrollo de agregados o nuevas funcionalidades, (mockups para las pantallas, documentos de mapeos de información para la lógica de integración entre la pantalla, el sistema fuente con patrones simples y compuestos y otros documentos especificando como guardar la información, por ejemplo hoy en día estaríamos hablando de Big Data y bases de datos no estructuradas (MongoDB, Couchbase, etc).
El armado del equipo es muy importante y debemos basarnos en tres pilares para seleccionar la gente que hará el proyecto posible, gente con ganas de aprender es el número uno (de los que se aburren con facilidad, miran los primeros 3 o 4 minutos y luego miran alrededor a cualquier cosa que les llame la atención), el segundo pilar es que dentro del equipo exista el compañerismo y compromiso entre todos y por último tienen que ser personas con capacidades técnicas de alto nivel, si bien este punto es muy importante no es el más importante dado que si no tenemos un equipo para el proyecto, que va a tener muchas configuraciones, líneas de código y definiciones que deben implementarse en conjunto, (aun teniendo un framework de desarrollo cada quien puede hacer la tarea de forma muy diferente, sin embargo el producto final es uno), si una persona no se integra con el equipo la posibilidad de tener éxito decrece de forma estrepitosa.
Un punto a considerar cuando entramos en el mundo de proyectos de tecnología es entender nuestras características técnicas o especialidad, el que intenta abarcarlo y hacerlo todo, (todólogos en tecnología, si me permiten el neologismo) esta persona generalmente sabe bien uno o dos temas, pero suele hacer agua en otros, una frase muy común en este mundo es que si alguien sabe martillar cuando le demos algo que requiera rosca, seguirá martillando (porque es lo que sabe hacer), lo que quiero hacer énfasis con esto es que se necesita un equipo y bien preparado para la actividades que se van a realizar, bueno, bonito y barato no funciona en este caso.
Otro problema de suma importancia, contratamos consultores externos o los criamos en casa?, nuevamente debemos entender que la gente que se dedica a hacer proyectos de tecnología tiene más experiencia que la gente que se queda en una empresa realizando una tarea, aunque realice proyectos, generalmente los consultores trabajan en más de un proyecto a la vez y realizando diversas actividades (no todas relacionadas con su conocimiento de las herramientas, esto hace que inevitablemente a lo largo del tiempo y si se esfuerzan y no se rinden en el camino, puedan lograr ser buenos consultores, esto no necesariamente es directamente proporcional al estudio o experiencia en proyectos que tengan las diferentes personas, para hacer un resumen les digo que todo se debe a la ley de oferta y demanda, si la tarea a realizar es muy específica conviene tener consultores externos que posean las características necesarias y si hay mucha gente en el mercado que conozca las herramientas que queremos utilizar para desarrollar, no será difícil para nosotros hacernos con gente que trabaje dentro de nuestra empresa.
Por último, ¿hacia dónde vamos?, hace muchos años cuando comenzamos a realizar proyectos de tecnología, los equipos (hardware y software) que existían eran mediocres, la tecnología no estaba lo suficientemente avanzada y por lo tanto debíamos distribuir la información en silos (cajas), para poder obtener reportes de esta información de los diferentes sistemas que nos ayudara para entender como estábamos operando y entender también como operaba la empresa de forma analítica (meses u años atrás) y tomar decisiones basadas en esta información.
Hoy en día esto ha cambiado debido a los avances tecnológicos en la actualidad, los equipos con los que contamos tienen lo necesario para poder tener toda la información de la compañía en el mismo lugar y lograr de esta forma explotar la información ya sea analítica o transaccional desde el mismo lugar y sin afectar a la operación y evitando los problemas de toda la vida (las interfaces o conexiones entre sistemas, lógicas de transformación en el medio por problemas de estructuras de datos diferentes, problemas producidos por inconvenientes en las comunicaciones, etc.),
En resumen, podemos decir, que hoy en día debemos crear nuevos sistemas centralizados o al menos que posean estructuras de datos para cumplir con el proceso de negocio (Core de la compañía), si actualmente la información no se encuentra distribuida de esta forma debemos comenzar con un proceso pequeño pero significativo y creciendo paulatinamente pero siempre pensando de una forma holística e integral.
Las empresas parecen estar empezando a pensar en el futuro, sin embargo, de esto que estamos hablando no es el futuro, es el hoy…