...de como se gestiona a un equipo, con otros equipos y un cliente grande.
El siguiente proyecto, fue una experiencia en toda regla. Me metieron en el grupo de blockchain, empece con Quorum, a aprender sobre todo lo que era posible hacer... y aprendiendo de los que ya sabían como iba... y tras tres semanas, resulta que sale un proyecto para Telefonica con Hyperledger Fabric, y yo entro para hacer una pieza en java, que se encargara de leer unos csv y lanzar unas peticiones rest, y para ello había que usar Spring Batch.
Asi que empece de oyente en el proyecto, y conforme pasaban las semanas intentaba absorber todo el conocimiento que fluía a mi alrededor, ya sabes, aunque tu pieza este aislada, nunca esta de mas saber como van las demás piezas. Y asi, sin quererlo me encontré en el final del primer sprint con el proyecto casi por arrancar, y sin casi nada que mostrar al cliente, que era la grandiosa Telefonica.
Este era el típico proyecto donde se desembarcaba toda la artillería, pero falto de un poco de organización en alguna de las partes, y esa era en la que yo estaba, quedaba por montar el pipeline de Go, y principalmente por la gestión de dependencias (que ademas no iba a tener salida a internet). Vamos, lo típico que en mi local si funciona con el IDE, pero en el entorno no tengo ni idea de como hacerlo.
Y eso se junto con una bronca fuera de lugar... La verdad es que hay muchas maneras de inspirar a los demás, y como cuentan en este articulo, el responsable no tenia ninguna de esas aptitudes, sobre todo la de "Lead by example", y aquella bronca fue un claro ejemplo de como no enseñar con el ejemplo.
A partir de aquel momento, las cosas cambiaron, ademas, por diversos motivos ese responsable fue cada vez mas desapareciendo de la escena... hasta que al par de meses desapareció por completo, y allí me encontré yo solo, de "segundo de abordo". Me toco ponerme las pilas en GoLang, que resulto dar la casualidad de ser el segundo lenguaje del que quería convertirme en "experto (si es que existe eso)", y aunque a dia de hoy me tengo que parar a pensar si la definición del tipo va antes o después del nombre... me paro a pensar que es al revés de java porque el tipo no es tan importante como en Java :D, pero como Go tiene un juego de instrucciones muy pequeño, la verdad es que con poco se podia hacer mucho... y lo segundo con lo que me puse al dia fue con Hyperledger Fabric, empezando por como se iteraban los elementos de la red para hacer búsquedas... y para descubrir que luego se podían lanzar queries a la CouchDB, para lo que tendrías que tener indices... y tipos organizados... Ya os contare mas adelante.
...con nombre de mujer
Las soluciones de blockchain estaban un poco de capa caída, pero aquí se puso toda la carne en el asador. Como bien dijeron, se podia haber resuelto el problema de cualquier otra forma, pero con blockchain quedaba mejor (de cara al publico) y asi se podría "financiar". Y ademas, se le dio un nombre en clave al proyecto, un gran honor, todo proyecto que se precie debe tenerlo :D
Yo empece con una pieza en Java, pero pronto tuve que hacerme responsable de las piezas en Go y las de Fabric también. Me toco darle un poco de sentido al microservice-hell que se había montado a la primera de cambio, unificando el sistema de log, luego el de trazabilidad con Jaeger. Y entre medias, pasamos de recorrer la red (que el primer mes de desarrollo solo tenia miles de SKU, routers por ejemplo, pero que cuando esa cifra aumentara no seria factible, asi que pasamos a las queries en los smart-contract, queries contra CouchDb). Tendría que repasar las notas, que las tengo... creo que ya lo comente, pero anoto cada dia lo que hago, como una manera de poder consultarlo mas adelante si lo necesito, y sino recuerdo mal el siguiente gran hito fue el rendimiento, en algún benchmark inicial, donde el smc solo grababa 1 valor (o quizás ni eso) se quedo con que aguantaba 100 tx/seg y claro, no era lo mismo tener que llamar desde un smc a otro, para ver si la tx era permitida que no hacerlo, asi que metimos una cache para acelerar las llamadas entre smart-contract manteniendo el desacople. Y mas adelante, tuvimos que implementar las operaciones en batch, porque el tiempo de red también cuenta, no es lo mismo que (aunque de manera transparente) la sdk llame 20 veces con 1 elemento al peer, que lo haga 1 vez con 20 elementos. Y lo ultimo antes de eso... fue dividir los bloques grandes.. digamos 10.000 skus de golpe, en bloques mas pequeños para paralelizar el procesado en batch y conseguir responder antes de 10 minutos, operaciones batch en tiempo real.
Y en estas, de toda esa gente del principio solo quedaban los "tecnologos" del Industry 4.0 que se ponían impacientes porque la solución que trajo el dinero, lo mismo no era las mas optima para un cliente que no quería ser trazado, y hacia todo lo que estaba en su mano para tumbar la solución.
Pero finalmente, terminamos por salir a producción, una producción real, aunque siguieran existiendo sistemas paralelos que soportaban la operativa real, este resulto solo ser un sistema paralelo con blockchain.
Y a partir de ahi, pues siguieron saliendo retos que afrontar, la cadena de suministro seguía aumentando, y cada vez entraban mas casos y algún tipo de material (no serializado) que no se había considerado al principio, lo que obligo a usar la imaginación en el modelado de las entidades en la blockchain para soportar elementos que no tenían clave, solo una cantidad, y que ademas se quería mostrar el histórico de los movimientos de cantidades. Eso nos llevo a un overflow que hubo que rediseñar sobre la marcha. Entre medias, que recuerde asi rápido, algún leak de memoria en algún microservicio, y alguna otra cosilla. Pero también conseguimos salir de esa.
Y entre tanto, los responsables en Telefonica iban rotando, y tocaba enseñarle de que iba esto... y una de las ultimas piezas que quedaba por montar era el motor de reglas de negocio, que en principio iba a ser con Drools, pero visto que no iban a ser muchas, y que no las iban a modelar ellos, optamos por montar un Drools en Go, y la verdad es que nos salio bastante bien.
Y lo proximo, lo proximo fue el COVID, que nos obligo a volver a nuestras casas, pero como ya eramos un grupo bien engrasado, eso no fue un problema, y seguimos sacando releases, que ya cada vez requerían menos cambios en el core, y mas en la parte de reporting.
Por otro lado, apareció un nuevo actor, que se iba a encargar de montar la pieza que iba a dar soporte a una parte del flujo que a dia de hoy no existía, los técnicos y la retirada de materiales del hub y la instalación en casa del cliente. Y a estos también toco enseñarles, y cuando terminaron, pues nos quedamos con el mantenimiento y evolución de esa parte también.
Y la ultima release oficial fue para los almaceneros, para facilitarles el trabajo de pre-asignación de materiales de recogida, y aunque esta fue la que mas equilibrada estuvo a todos los niveles, incluso con test de aceptación y todo, termino por ser la menos usada, pero bueno, se facturo como las demás.
Y cada release, íbamos mejorando procesos, gestionando errores, haciendo herramientas para mejorar el dia a dia, vamos que no nos aburríamos, y aunque de blockchain cada vez menos, nos tocaba tunear el Postgresql para sacarle el máximo partido, montamos un sistema de reporting genérico que nada tiene que envidiar a un CristalReports o similar.
...tirando los precios e intentando contratar
Y bueno, pues casi 3 años después, parece que el dinero se acababa y como la cosa marchaba como la seda (visto desde fuera) el cliente recibió una oferta de mantenimiento que era muy economica, y cayo en la trampa... o cayo en la oferta, sin mas.
Y por nuestra parte, hicimos el traspaso de información mas completo que jamas se vio, hicimos como unas 60 sesiones mínimo, que dieron un total de casi 80 horas de videos contando cada detalle del proyecto, yo hasta me hice un mapa de todos los detalles técnicos de cada una de las piezas, y bueno, pues el tiempo pasaba y tuvieron que pedir una prorroga de un mes, para que siguiéramos dando soporte, porque los 3 becarios parece que no se hacían con las riendas.
Pero como ya he dicho antes, y sino lo digo ahora: "Uno tiene que preocuparse de lo que puede controlar, y eso es, el dar lo mejor de uno mismo en cada momento, y lo que no esta bajo tu control, pues nada..."
...como el que cambia cromos.
Y de repente un dia, cuando ya estaba claro que otro se quedaba con el mantenimiento (no tan claro el momento exacto del relevo) me comunican que para enero entro en otro cliente. Las cosas aquí van asi, hay que facturar, y hoy estas aquí y mañana allí. Lo único que pasaba es que yo llevaba 3 años en el mismo sitio, haciendo la rueda girar, y vaya si giraba.
Pero bueno, aproveche para tomar nota de los nuevos requisitos del nuevo proyecto, e ir poniéndome al dia.
...soledad y búsqueda del futuro.
Y supongo que, quizás por llevar 2 años trabajando desde casa (que tan a gusto oye) pero, se echa de menos ese contacto, y quizás mas que esos 2 años, los 4 que llevaba fuera de mi grupo matriz, que aunque en Accenture somos OneAccenture, pero bueno, muchos de los compañeros de los inicios emprendieron camino a otros lugares, y "Hoy no queda casi nadie de los de antes"
Pero bueno, tenia que hacer esta reflexión. Y aquí la dejo escrita por si llegas a ella.