/ agile

Sinfín Cynefin*. Le developer y el loop temporal

10 min read

Groundhog day o, como se conoció en Argentina (Sorprendentemente, en traducción literal), Día de la marmota, es una película de Harold Ramis (Caddyshack, Ghostbusters) protagonizada por Bill Murray. A pesar de haberse estrenado como una comedia romántica más, tomó el canon de film de culto, por sus connotaciones filosóficas y la memorable interpretación de Murray, fortalecida por un guión notable, sin fallas ni desaciertos.

En ella, el personaje principal vive el mismo día, 2 de febrero, una y otra vez, sin importar cómo lo termine. En ocasiones decide hacerlo abruptamente, suicidándose. En otras, tocan las 12 de la noche, mientras despierta una vez más en la misma cama, a la misma hora (Escuchando un programa radial que comienza al grito de: "Día de la marmota!"). Cabe aclarar que la memoria de la iteración anterior persiste, por lo que le resulta posible contar con las experiencias de sus acciones y actuar en consecuencia.

Siempre me fascinaron las películas que cuentan en su guión con irregularidades o particularidades temporales (Back to the future, Frequency, Happy death day, The butterfly effect), por esa posibilidad de aprender de los errores, de modificar el presente en base a la experiencia ganada ante los mismos conflictos ya resueltos alguna vez. Y no puedo evitar pensar lo siguiente: Los obstáculos ¿son siempre los mismos si los enfrentamos con conocimientos previos? La primera vez que enfrentamos un problema, ¿es igual a la siguiente?

Evidentemente, no. Ahora bien, el problema ¿es el mismo? ¿O es otro diferente, ya que, en definitiva, somos otre? ¿Podemos desvincular la calidad del problema de nuestra experiencia al enfrentarlo?

1.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu sonríe mientras se despereza. Programar esa frase en el Google Home para amanecer en este día fue un acierto. Despierta de buen humor y ni las noticias de un paro de transporte le perturban. Soleado día primaveral, ¡en unos días comienza el veranitooooo! Se pega una ducha. Toma la bicicleta y comienza el recorrido a la oficina. El vibrador del celu alerta repentinamente y se detiene a un costado de la bicisenda para leerlo. Son las 8 en punto. El Product Owner tiene novedades. Un ticket urgente requiere atención, urgencia usualmente relacionada con el dinero. Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email.

Ok, si bien se enfrentó un par de veces a esta situación, igualmente requiere análisis. Factible. Cuando llegue a la oficina se encargará.

Minutos después, café en mano, analiza el problema. ¿Cómo entrega el frontend los mensajes? ¿Cuál será el límite de caracteres permitidos? ¿Hay que validar en backend? El problema es complicado pero existe un orden, una relación causa consecuencia palpable. Aún así, no es algo trivial. Requerirá intuir en principio, degustar la situación, luego analizar el desafío para, finalmente, resolver con las conclusiones. Lu está tranquile, sabe qué hacer, sabe el orden de las acciones y sus consecuencias. Recibe dos strings, persiste dos strings. Solo requiere una migración. Un modelito que persista los datos que vienen en el controller. Y ya estamos.

El código está en producción en un par de horas. Usuaries de todo el país lo prueban y todo anda bien. Cliente contente. Empleadore contente. Lu contente. Se dedica a hacer algo de trabajo de gestión. Asiste a una clase de inglés. A media tarde, se corta la luz en la oficina. Vuelve a su casa y ve dos capítulos de The Mandalorian que tenía atrasados. Pasea los perros. Pide unas empanadas. A dormir la mona.

2.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu sonríe mientras se despereza. Programar esa frase en el Google Home para amanecer en este día fue un acierto. Despierta de buen humor y ni las noticias de un paro de transporte lo perturban. Soleado día primaveral, en unos días comienza el veranit... UN MOMENTO! Algo raro está pasando. Acelerade, incrédule, confirma el paro de transporte, revisa sus pasos, insiste en sentir el ambiente. ¿Esto ya pasó? ¿Deja vu? ¿Pesadilla? ¿Soñaba entonces o sueña ahora? Inmediatamente un par de películas le vienen a la cabeza. Impaciente, se sienta en el sillón sosteniendo el celular. Mira hacia su mano izquierda. Son las 7:59. Concentrade, expectante, la vista fija en los segundos. 57, 58, 59… El vibrador le hace dar un salto que le hace arrojar el celular al piso. Revisa el mensaje. Ahí está, como una daga en la línea del tiempo. Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email.

Obviemos su desconcierto, su delirio y su pavor. Lu es una persona pragmática y controlada, pero esto no es algo que pase todos los días, muy cerca del estado en el que la película de Harold Ramis, de la que es fan, cautiva en simultáneo a su protagonista y a sus espectadores. Aún así, aún en lo predecible de este suceso impredecible, pasan las horas en locura y desconcierto. Sin trabajo. Sin oficina. Sin paseo a los perros. Sin paz.

3.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu cavila mientras se despereza. Programar esa frase en el Google Home para amanecer fue medio corny, una tontería, al final. Escucha con desazón las noticias del paro de transporte y, mientras se baña, decide jugar a ver qué pasa. Según el guión inicial de Groundhog day, película a la que inevitablemente remite esta odisea, al protagonista le llevó 10000 días salir del loop del 2 de febrero, así que si la vida es un fiel reflejo de las películas, y está segure de que lo es, no se imagina resolver esto en mucho menos. Con un sentimiento de aburrimiento más que de revancha, sale andando en la bicicleta. En el mismo semáforo que hace dos días, (bah, ¿que hoy mismo? ¿que hoy hace dos iteraciones?) vibra el celular. Casi como un reflejo se aparta y lee. Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email.

Llega a la oficina. Esta vez, el problema es simple. No necesita ni siquiera analizarlo. Es como andar en bicicleta. De niñe analizó el mecanismo, la relación entre velocidad, equilibrio y constancia. Le llevó tiempo y práctica. Pero luego fue trivial y es algo, dicen les viejes, que une nunca olvida. Con esto es lo mismo. Aquí el problema es el mismo, literalmente el mismo, pero ahora es simple, la solución es trivial gracias a la experiencia. Categoriza el problema instantáneamente y responde con la conclusión obvia.

Termina muy temprano. Aprovecha para sacar algunos tickets atrasados, principalmente unos que posibilitan el uso de la aplicación en otras partes del mundo. Pregunta varias veces a varies compañeres de trabajo qué día es, por las dudas. Agotade ante lo inevitable, escucha sin sorpresa que el código está en producción. Usuaries de todo el país lo prueban y todo anda bien. Cliente contento. Empleadore contente. Lu no tan contente. A media tarde, como era previsible, se corta la luz en la oficina. Vuelve a su casa y no mira tele. Llama a su familia. Pasea los perros. Pide unas empanadas. A punto de dormirse, un mensaje inesperado le saca del sopor. (Esto es nuevo!) BUG - El checkout se rompe cuando algunos usuarios de Discord intentan enviar un mensaje a los sellers. Las compras fallan! Perdemos plata!

Mira el reloj, 11:59. Enciende la compu, workaholique como es. Y entonces, mientras espera el booteo...

4.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu maldice mientras se despereza. Odia tanto esa maldita frase en el Google Home que termina estrellado, derrotado contra el placard. Escucha con aburrimiento las noticias del paro de transporte. Mientras se baña, procura calmarse... Acostumbrade y vencide, sale andando en la bicicleta. Vibra el celular (Oh, ¡qué sorpresa!). Antes de leer el mensaje, sí,  Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email, lo recuerda: Algo pasó anoche, bah, hoy a la noche, digo, en la noche de la iteración anterior. Hubo un cambio, una situación inesperada, un bug.

Piensa en esto mientras llega a la oficina y se sirve un café. Algo se le escapó. El problema ya no es simple, seguro. Tampoco es solo complicado. No hay un orden, ni una relación directa entre causa y consecuencia. Hay algo que puede fallar, una complejidad asociada, cuyo síntoma es que algunes usuaries no pueden concretar la compra tras ingresar un mensaje. El problema ahora es complejo. Requiere testear, experimentar diferentes ejemplos y situaciones. Está claro que, debido a la interacción de les agentes del sistema, surgieron resultados no previsibles. Prueba, ejercita diferentes opciones. Finalmente, encuentra un posible inconveniente: los mensajes problemáticos incluían caracteres especiales, como árabes y rusos. Y, entonces, lo recuerda! En la iteración anterior terminó temprano. Eso permitió concluir otros tickets que hicieron que la aplicación estuviera disponible en otras partes del mundo. Wow. Por eso el mensaje a últimas horas no había ocurrido en la primera iteración! Tiene sentido en el sinsentido de este loop.

Termina el trabajo y deploya, justo antes de que se corte la luz en la oficina. Vuelve a casa y permanece atente al celular. 11:59 y ningún mensaje del Product Owner. Todo anduvo bien, tal vez ahora por fin…

5.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu llora mientras se despereza. Programar esa frase en el Google Home, para que lo despierte en este día, fue una maldición. ¿Cuándo va a terminar esto? Llama a su madre y a su psicólogo. Les comparte la situación. Su madre se preocupa. Evidentemente, la soledad le está afectando. Su psicólogo se relame pensando en la plata que le va a sacar debido a esta nueva digresión. A media mañana vuelve en sí. Decide persistir en el intento, cubierte por la esperanza de que, tal como ocurriera un par de iteraciones atrás, sus actos puedan ahora generar un cambio, romper la rueda en que se transformó su vida. Se pone el casco y baja con la bici decidide a hacer las cosas bien las veces que sea necesario. A esta hora, las 10 de la mañana, el tránsito es aún más espeso y peligroso que de costumbre. Recuerda el paro de transporte y cambia el recorrido a la oficina para ir por un lugar menos atestado de conductores furioses. Instintivamente para a un costado para leer el mensaje que, sabe, lo espera hace dos horas. Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email. Sonríe. Intenta retomar el recorrido y siente un temblor en la parte trasera.

Sí, claro. F##@$%%#k. Se pinchó la rueda.

Está a mitad del camino a la oficina. Tendrá que volver a su casa a dejarla. En microcentro nadie le va a parchar la rueda. Bueno, el problema del mail puede esperar, aunque le golpea el hecho de que tal vez, ahora sí, la resolución sea la definitiva. Este pensamiento gana importancia en su cabeza rápidamente y le convence. El problema del mensaje de los usuarios es algo a resolver urgente y no solo por la plata que pierde la empresa.

De pronto se arrebatan los razonamientos y recuerda un hecho que en las otras iteraciones era irrelevante. Se va a cortar la luz!!!!!

Caos total. Esto ya no tiene orden ni predicción posible. Si bien el problema es el mismo, ahora entra una variable que no había aparecido hasta el momento. Una variable que siempre debe ser tomada en cuenta pero que, según la situación, a veces se desprecia. La resolución del problema tiene su realidad personal como actor preponderante.

A ver. En esta circunstancia el problema es caótico. No hay forma de saber si podrá resolverse tomando las acciones obvias. Incluso, analizándolo. El paro de transporte hace que Lu no sepa en qué momento podrá estar frente a su computadora. El corte de luz acota el tiempo y no hay forma de saber si podrá terminarlo antes de ello. No solo depende de elle, depende también de su entorno, impredecible y aleatorio. Ni siquiera puede experimentar, debido también al tiempo acotado.

Pero puede actuar. Moverse. Una vez actúe, por ejemplo, yendo hasta su casa, dejando la bicicleta, podrá volver a sentir el problema y responder. Tal vez en ese momento (Si, digamos, se soluciona el paro y vuelve a tener la certeza de que llega a tiempo), el problema se vuelva complejo una vez más. O no. Debe actuar.

Lo hace. Cuando llega a su casa exhauste, el paro de transporte sigue vigente. No solo eso, se cortó la luz también en su departamento. Sube los 11 pisos con la bicicleta en el hombro. En medio de su living, agotade, se desmaya.

6.

Lunes. 7am. "♬ Hoy cobramos el aguinaldo! ♬". Lu se despereza. Programar esa frase en el Google Home para que lo despierte en este día ya es algo anecdótico. Baja a la panadería y compra media docena de medialunas, decidide a parar la pelota. Se sienta en el living con una taza de café recién hecha y se come la primer medialuna. Enciende su máquina personal e intenta hacer un resumen de los últimos días... no, de las iteraciones anteriores del día que recién comienza. Desde la habitación suena el rasguido gris del vibrador del celular. Son las 8 y, obviamente, Backend - Persistir los mensajes de compradores con cuenta en Discord al seller incluyendo su dirección de email.

Resumiendo, siempre el mismo problema, en diferentes iteraciones.

La primera, un problema complicado. Se llega a una conclusión esperada luego de un análisis, se requiere de cierto expertise, de migraciones y controllers, blah blah blah. La relación entre causa y efecto es clara, a pesar de un nivel de dificultad elevado. Siente, analiza, responde.

La segunda vez el problema es simple, obvio. Altamente predecible. La solución es mecánica y la relación entre causa y efecto, directa y concisa. Siente, categoriza, responde.

Si hubiera que definir un nivel de abstracción superior, se diría que estas dos iteraciones comparten ese tema de una expectativa de realización, de una certeza de resultado en base a acciones.

La tercera vez, complejidad. Hay que probar casos en base a una nueva evidencia. De pronto hay incertidumbre. Si bien se puede llegar a una solución, ingresan hechos fortuitos y desconocidos, que tras la prueba se aclaran. Experimenta, siente, responde.

La cuarta, bueno, Pandemonium! Caos total. Entra otra variable al mismo problema y agrega incertidumbre exponencial. No hay forma de saber si las acciones llevarán a un buen, o mal, puerto. No hay relación entre causa y efecto. Se requieren medidas urgentes y celeridad. Actúa, siente, responde.

Estas dos últimas comparten en una abstracción mayor, una idea de incertidumbre.

Y en esta iteración? El problema persiste inmutable, pero Lu decide dudar. No sabe dónde ubicarlo ahora (iba a decir hoy, pero…¿quién sabe qué significa la palabra hoy, en esta realidad iterativa?). Siente que no tiene suficientes datos. Y piensa: ¿No merece esto mismo un lugar en este esquema que acabo de pensar? Digamos, un lugar reservado al desorden, un limbo al que van los problemas que aún no han sido clasificados.

Garabatea entonces, en un cuadernito que usa para algunas anotaciones como la contraseña del wifi (y la del home banking, shhh, no le digan a nadie), un diagramita para aclarar las ideas.

Y entonces todo parece más accesible. Ubicar los problemas dentro de un esquema los vuelve más claros y, en consecuencia, relaja y armoniza la búsqueda de una solución. Si invariablemente tendrá que enfrentar este mismo problema una y otra vez por el resto de su existencia, de pronto este framework hará el infierno menos doloroso.

Siente que aprendió algo que puede usar. Tal vez, algún día aparezca una Andie MacDowell, o un Andrew McDoWell (como lo hiciera la heroína de la película de Harold Ramis) que le saque de este loop hacia el futuro, el futuro real. Pasa la tarde relajade, preparade y ágil. Disfruta de cada momento y, cuando llega la noche, vuelve a ver los capítulos de The mandalorian. Al fin y al cabo, no los ve hace varias iteraciones y estuvieron muy buenos. Antes que termine el segundo, cansade pero satisfeche, se acomoda en el sillón del living y, luego de confirmar que el aguinaldo está depositado en la cuenta bancaria, por fin se duerme.

7.

Martes. 7am.

(*) El framework Cynefin (del noruego: habitat) es un framework conceptual usado para ayudar en la toma de decisiones. Creado en 1999 por Dave Snowden mientras trabajaba para IBM Global Services.


Recibí nuestra Newsletter!

¿Querés estar al tanto de todo lo que pasa en 10Pines?
* Campo requerido

¿Qué te gustaría recibir?