Al menos deplegaban los viernes

Ayer mientras conducía pensé en lo complejo que es el tráfico. Iba a 100 km/h rodeado de coches, camiones y motos, y me pareció increible que lo normal no fuera estar constantemente chocándonos. Cada conductor tomamos decisiones impredecibles para el resto, cometemos errores, y aún y todo el sistema funciona más de lo que me esperaría.

En ese momento me acordé del software, de lo imperfectos y complejos que son los sistemas, y de que al igual que el tráfico, la mayor parte del tiempo funcionan. Justo entonces me vinieron algunas ideas relacionando estos dos mundos, que es lo que te vengo a compartir.

El trafico: un sistema complejo

El sistema es imperfecto

El tráfico no es perfecto. Los coches se estropean, las carreteras se deterioran, los conductores se equivocan y eso nos lleva a tener accidentes.

El software también es imperfecto: fallo de redes, software obsoleto, malas decisiones, y un largo etc. que nos lleva a que los sistemas no respondan adecuadamente, con consecuencias de diferente gravedad.

Y es que sí, los coches deberían fallar menos, las redes y las personas también, pero aceptemos de una vez que no hay perfección en un sistema complejo. Otros se van a equivocar, yo me voy a equivocar; lo máximo que podemos hacer avanzar hacia la excelencia, que nos permita reducir el número de errores y que estos tengan las mínimas consecuencias posibles.

Pero ¿podemos avanzar hacia la excelencia yendo a toda velocidad?

Voy a ir un poquito más rápido

Autopista, velocidad máxima permitida 120km/h. Bueno, como el radar no salta hasta 130km/h... voy a ir a 129km/h. Bueno, y ahora que tengo que adelantar a este que va a 128km/h, voy a ponerme a 135km/h... y mientras tanto voy a mirar esta notificación de WhatsApp...

La velocidad aumenta el riesgo de accidente y la gravedad de sus consecuencias ¿de verdad nos merece la pena llegar a casa 10 minutos antes a costa de perder la vida o que otros la pierdan?

En el desarrollo de software, aunque las consecuencias no son tan trágicas, la tendencia a querer ir siempre un poco más rápido, añadir otra tarea en paralelo, un nuevo deadline, etc. nos lleva a aumentar la probabilidad de consecuencias no deseables.

Empezamos con el clásico "ya que estamos...", y lo que acabamos es estando saturados. Y es que ¿nos merece la pena escribir software a una alta velocidad y paralelismo si por el camino nos estamos dejando la calidad, la eficiencia y la salud?

Adaptarse al cambio

En mi viaje de ida empezó a nevar de forma intensa. Ni me lo esperaba en esa ruta, ni llevaba cadenas. Sabía que en ese momento adaptarse al cambio podía significar quedarnos atrapados y esperar a los quitanieves. Al final la adaptación fue ir despacio durante 30 minutos. Llegamos más tarde a cenar, pero llegamos.

Carretera cortada, atascos, averías, enfermedad, mala meteorología entre otras cosas pueden hacer que esa ruta que Google Maps te indica con su precisa hora de llegada, se esfume en cualquier momento.

En los sistemas complejos como el software la certidumbre es una ilusión. Existe cierta probabilidad de certidumbre, que es lo mismo que decir que el resultado es siempre incierto 😅.

Está de lujo establecer un rumbo y empezar a caminar hacia él, pero al igual que la ruta que he aceptado de Google Maps se puede ir al garete, el diagrama Gant con todo diseñado y especificado de antemano también.

El coste de calcular y recalcular una ruta en Google Maps es de segundos ¿pero cuánto tiempo estamos tirando a la basura con horas y horas de trabajo intentando predecir lo impredecible?

La importancia del descanso

Cuando entraba a la ciudad, el tráfico cada vez era más denso, y las circunstancias cada vez más complejas. El coche de adelante pegó un frenazo, y tras un tiempo de reacción, frené contundentemente yo también para evitar la colisión. Me asusté, mi familia se asustó. Me pregunté si hubiera sido capaz de reaccionar a tiempo si ese día hubiera arrastrado fatiga de días anteriores.

Necesitamos cuidarnos, cada uno a sí mismo, y entre nosotros. Desarrollar software es intenso mentalmente, y una tarea que puede dejar tu cuerpo inmovil durante horas.

Factores como el estrés, la ansiedad, la fatiga, el malestar, el sedentarismo, la falta de desconexión, etc. hacen que no podemos construir un buen software de forma sostenible, y aunque lo consiguiéramos ¿realmente nos merece la pena?

La gente podrá decir de nosotros: Vivieron sufriendo, murieron pronto, pero al menos desplegaban los viernes.

Acabando el trayecto

Tras navegar la complejidad del tráfico, vuelvo al desarrollo de software con estas reflexiones:

  • Abrazar la imperfección de los sistemas complejos: Yo me voy a equivocar, otros se van a equivocar y las cosas van a fallar. Lo más que puedo hacer es mejorar cada día para que cada vez sea menos imperfecto, pero sin esperar la perfección.
  • Vigilar si estoy yendo demasiado rápido o abarcando demasiado, tanto yo mismo como el conjunto del equipo.
  • Adaptarme siempre a las circunstancias, y acordarme que una gran parte de las mismas no dependen de mí.
  • Cuidarme, cuidarnos
Dani Santamaría

Dani Santamaría

Staff Software Engineer

[🐦]

Comparte el artículo

{🐦}
Flecha

👷 Por aquí irán los comentarios y esas cosas. Mientras tanto puedes: