...cabar, cabar, cabar.
Y cosas de la vida, resulto que salio un proyecto con esa empresa de la que no pude hablar hace años. Esta vez la cosa era mas ambiciosa, en vez de solo 150 personas de nuestra empresa era un total de 1200 repartidas por todo el mundo, y de diferentes empresas, claro esta.
El caso es que se habian planteado realizar una implementacion desde cero, usando Domain Driven Desing, para organizar los distintos dominios que surgieran de rehacer las 70 aplicaciones distintas que tenian en una sola plataforma, abierta, donde cada dominio fuera operado por un conjunto de squads de manera independiente, exponiendo unas apis en un portal para que el resto de dominios se comunicaran con lo que necesitaran. Estos squad operarian el desarrollo, despliegue y mantenimineto aprovechando las herramientas que ellos mismos estaban desarrollando para un multi-cloud. Tambien se le daba bastante peso al testing, usando Karate. El stack tecnologico seguia siendo el mismo que hace años, evolucionado a las versiones mas amigas, de las librerias java, con spring boot, y eso si, una arquitectura hexagonal.
El caso es que arranque se dio bastante bien, dentro de lo posible, conseguimos arrancar el flujo completo de desarrollo, desde la definicion del API con OpenApi, su generacion de codigo automatizada, la implementacion de la logica, una persistencia con h2 en memoria (porque aun no teniamos la infra disponible para las bbdd) y todo ello con una arquitectura clean, como la que generaban los artefactos de ejemplo, incluso automatizamos las pruebas automaticas de las apis con karate y conectamos los resultados con x-ray, todo ordenadito y en menos de un mes y medio, incluso nos conectamos con su kafka para emitir eventos.
La definicio de los dominios no iba tan fina, y menos el que nos habia tocado a nosotros. De hecho era un poco anemico, pero bueno, estabamos listos para lo que nos echaran, el equipo estaba engrasado y listo para el trabajo, solo tuvimos que buscar reemplazo para el QA Lead (que no terminamos encontrando) porque el segundo qa (al final eramos 2 squad) daba cumplia con el trabajo que se esperaba (y como tampoco habia mucho, pues nada) y incluso tuve que hacer las pruebas de Tech Lead, pero entre unas cosas y otras habian pasado ya casi 3 meses, y resulto que el codigo no era hexagonal.
Asi que tras la tercera (o cuarta) refactorizacion de las APIS para cumplir con los requisitos del dominio (en su refactorizacion constante) tuvimos que abordar la refactorizacion del codigo de nuestro dominio (anemico, no hacia casi nada) para que fuera hexagonal, y los agregados tuvieran la logica que se esperaba de ellos en un diseño hexagonal. Y como parece que no tenian muy claro si los agregados tenian que ser inmutables o no, y entre el puente de diciembre y que nuestro responsable se fue la semana de vacaciones, casi nos dieron navidades para que nos aprobaran la refactorizacion. Un poco antes me entere que no di la talla para tech lead, 4/5 en la entrevista tecnica y 7/10 en la prueba tecnica.
Sobre la entrevista solo dire, que tras descubrir hace años la concurrencia en Go, siempre me toca refrescar la concurrencia en Java. Y sobre la prueba tecnica, solo dire que si te interesa mires aqui. No dire nada sobre que tras realizar la prueba tecnica un sabado por la mañana y parte de la mañana del domingo, despues de comer mi algoritmo no tiraba, y tras muchas vueltas y ya antes de ir a dormir, opte por hacer que funcionara, cambiando...
Y tampoco dire nada que tras la prueba tecnica, fue cuando empezaron a mirar el codigo del micro, y a empezar a decir que no era hexagonal y ponerle pegas... en fin, no voy a decir nada de eso.
Porque resulto que antes de navidad, en la cual habian pedido que no se tomaran vacaciones, mas alla de los dias festivos, nos dieron por aprobado el refactor, y de paso, en paralelo implementamos el patron outbox que pedian, con su propia libreria, para el envio de eventos de dominio... pero o sorpresa, a la vuelta de navidad, nos indicaron que prescindian de nuestros servicios. Tampoco dire nada que el dominio se habia quedado fuera del MVP de mediados de enero (para el que no podiamos coger vacaciones) y que lo habian retrasado, el que la definicio se hubiera retrasado seguro que no tuvo nada que ver, el caso es que estabamos fuera. Eso si, las semanas que faltaban hicimos la transferencia como unos señores y terminamos todo lo que nos mandaron.
En resumen, se junto XXX y se junto YYY, pero yo no te voy a decir nada :D saca tus conclusiones si no te crees todo lo que te cuentan.
...aprovechando para ordenar ideas
Tras recibir aquella llamada insperada, puede aprovechar para hacer recap tecnologico, y asi surgio este proyecto, con la idea de buscar la manera optima de implementar algoritmos que resuelvan problemas especificos. Ante ese reto, aproveche para montar un monorepo, con Bazel, con codigo en Java, Go, y Python. Ademas como lo habia montado en Github, aproveche para hacer un action en Go, y ademas empezar aprender Python, y asi empezar a allanar mi camino al Machine Learning.
...¿que es lo que es esto?
Ese mes, ademas puede hacer, por fin, un curso interno de Data Architecture, unas 25 horas intensas en la que aprendi sobre arquitecturas de Data, como hacer adquisicion, tratamiento, clasificacion y metadatos, todo un repaso al mundo del BigData, que era algo con lo que me habia cruzado en casi todos los proyectos en los ultimos años, pero como proveedor de datos, no como arquitecto que los tiene que recuperar.
...y esto de que esta hecho por dentro
Y parece que le cogi el gusto a la formacion, tras la reorganizacion interna en mi empresa, ahora estaba en el area de Marketing, y las herramientas que se usaban aqui eran de Adobe (tambien SAP pero esas no me tocaron) en concreto Adobe Campaing, definicion de Journeys publicitarios, acccion sobre el prospect, para impactarle sobre el target escogido, envio de comunicaciones (mail o sms o push...) y medicion del impacto, con un grupo de control para ver la efectividad de la campaña. Antes, durante y despues, tambien tuve la oportunidad de hacer pequeños estudios de Alfresco, utilidades open source de marketing (como ListMonk) y tambien puesta al dia con Liferay (que ya lo conocia de otro proyecto), ademas me puse un poco a tono con React. Vamos, que se abria ante mi un mundo de tecnologias, nuevas y no tan nuevas.
...entrevista en ingles
Y otra cosa curiosa que paso en este periodo, fue que termine mi curso de conversacion en Ingles, unas 40 horas, pero no fueron suficientes, para pasar el corte con un cliente Aleman, que necesitaban a gente que supiera Go (por fin un proyecto con Go) pero mi nivel de ingles no fue suficinete para que me aceptaran, el caso es que hice la entrevista y todo, y les gusto mi curriculum, pero mi nivel (para el dia a dia) no les parecio suficiente, si que pillaron a otro que no sabia nada, pero por lo menos hablaba Aleman.
...aprendiendo hindi
Esa esperiencia me llevo a redoblar mis esfuerzos en conseguir "fluency" en mi ingles, abri algunos frentes nuevos e intensifique otros, y a parte de empezar a aprender un tercer lenguaje de programacion (Python) me dije, porque no aprendo un tercer idioma, y estuve a punto de ponerme a aprender Aleman, pero me dije... mejor el Hindi, que son mas, y son muy buenos en informatica. Y ahi me tenies, aprendiendo, poquito a poquito, Hindi, ya veremos donde me lleva este camino.