Product Crafter Emilio Carrión

No te vayas por las ramas

El arte de hacer foco

Los humanos somos despistados por naturaleza, nuestro cerebro tiende a irse por las ramas buscando el camino con menos resistencia y, a veces, nos perdemos en la inmensidad del bosque.

Perder el foco es algo común que nos pasa a todos (aunque a algunos en más medida que a otros, levanto la mano como el primero en perderlo siempre). Y es que perder el foco es por desgracia algo que se nos da demasiado bien. Por eso hay que practicar para no perderlo y trabajar para enfocarnos en nuestras tareas para hacerlas de la mejor manera posible.

Las consecuencias de perder el foco

Cuando perdemos el foco ocurre lo que científicamente se denomina “irse por las ramas”. Es un suceso complejo que requiere de una persona poco motivada con lo que está haciendo y de un estímulo lo suficientemente atractivo como para echar toda su productividad por un barranco.

Estás con una tarea rutinaria, limpiando algo de código, leyendo documentación de alguna librería que usas, actualizando alguna dependencia y… espera… ¿es eso un nuevo framework de javascript? Tienes que leerte toda la documentación ya y ponerte a jugar con él.

¿Ya tienes los cambios? —pregunta el tech lead.

¿Qué cambios?

Exacto. Te acabas de ir por las ramas 🌿.

Y es que perder el foco es desafortunadamente fácil. Y por desgracia no solo afecta a nuestra productividad como desarrolladores, cosa que hace que nuestros usuarios (y negocio) se pongan tristes. Sino que también afecta a la calidad de nuestro software.

Estás desarrollando una nueva funcionalidad. Te estás leyendo los requisitos y te das cuenta de que la tarea tiene bastantes cosas a considerar. Bueno, los usuarios necesitan todos esos requisitos y, afortunadamente, tienes buena memoria. Te pones a escribir los tests que cubren todos y cada uno de ellos, implementas los cambios para ponerlos en verde. Solo te quedan un par de requisitos por cubrir y… ¿Quién dices que ha traído una tarta? ¿El cumpleaños de Ana? Vamos a felicitarla…

He probado los cambios y no me están funcionando del todo bien… —te dice el product owner.

¿Cómo dices? —tú volviendo con el segundo trozo de tarta—. Si he cubierto todos los casos con tests…

Exacto. Te has vuelto a ir por las ramas 🌿.

Cuando desarrollas software tienes que enfocarte en lo que de verdad importa, resolver el problema que intentas cubrir. Para ello hay que hacer foco en los requisitos y en qué necesitan nuestros usuarios. Perder el foco e implementar el producto a medias hará que tus usuarios (y negocio) vuelvan a ponerse tristes (por segunda vez en el mismo artículo).

Y perdiendo el foco no solo afectamos a la calidad de nuestro software, sino que podemos impactar también en su complejidad y mantenibilidad (cosa que define los billetes que cuesta iterarlo y añadir nuevas funcionalidades).

Estás con tu equipo haciendo mob programming, realizando unas pruebas sobre una nueva forma de almacenar la información para hacer las consultas más eficientes. Estáis probando unas cuantas soluciones que más o menos os convencen, cumplen con lo que estáis buscando ya que reducen el tiempo de las peticiones lo suficiente y… ¿Qué has encontrado una nueva base de datos? ¿Qué podemos montar un clúster de nodos que nos hagan ganar un 10% de latencia? Vamos a montarlo pero ya…

¿Alguien sabe qué hace ese rack en la cocina? ¿Y dónde habéis estado estos últimos dos meses? —pregunta el CTO.

Exacto. Las ramas 🌿.

Formas de no perder tanto el foco

Como he comentado en artículos anteriores, en muchos sentidos desarrollar software es como cuidar de un jardín. Y ya que nos estamos yendo por las ramas, lo mejor es conseguirnos unas buenas tijeras de podar. Así que aquí algunos consejos y herramientas para perder menos el foco y hacer énfasis en lo que más importa:

  • Haz pasos pequeños: hacer pasos pequeños es esencial en el desarrollo de software. Reduce la complejidad, te permite iterar y obtener feedback de manera más frecuente y además te permite enfocarte. Si cada tarea que haces está bien acotada y tiene un tamaño manejable te será mucho más difícil distraerte con otra cosa.
  • Haz TDD: lo recomiendo en uno de cada dos artículos (y algún día escribiré uno sobre ello) pero es que hacer TDD es la piedra angular de todo el desarrollo que hago y es la herramienta más potente que conozco para hacer buen software. Además de hacerte centrarte en los requisitos que estás cubriendo, te permite hacer foco en una sola cosa: poner el maldito test en verde.
  • Haz una cosa a la vez: relacionada con las anteriores. Somos horriblemente malos haciendo más de una cosa a la vez. Las probabilidades de descarrilar cuando haces más de lo que puedes asumir son exponenciales con el número de tareas a las que le tienes que prestar atención. Por lo tanto, hagamos solo una en cada momento y nos iremos menos por las ramas.
  • Aprende a parar: esta es una habilidad que te enseña la experiencia y que es casi tan potente como hacer una sola cosa a la vez. Tenemos que aprender a parar, a comprender y aceptar que nos hemos pasado tres pueblos, y a ser capaces de darnos cuenta y no continuar.
  • Aprende a retroceder: además de parar tenemos que saber retroceder y aceptar que nos hemos equivocado. Y no pasa nada, echar marcha atrás puede ser una buena forma de salir del barro y reencarrilar nuestro trabajo. Nunca es tarde para volver a empezar.

Y finalmente unos consejos prácticos:

  • Implementa un tiempo de foco: si te cuesta concentrarte define un periodo de tiempo en el que estés con foco absoluto. Puedes ponerte con los auriculares y aislarte del resto del equipo o irte a una sala y ponerte a resolver una tarea que se te había atascado. Lo importante es tomar la decisión consciente de que, por ejemplo, la próxima hora vas a ser tú y esa tarea, nada más.
  • Implementa ese tiempo de foco en equipo: el foco no tiene por qué ser individual, práctica de la misma forma haciendo pairing o mob programming con el resto del equipo. Enfocaros en una tarea y haced el esfuerzo de no iros por las ramas hasta haberla terminado.
  • Aprende a decir que no: muchas veces la pérdida de foco no viene de nosotros sino del contexto que nos rodea. Aprender a decir que no o a aplazar cosas que no son tan importantes te ayudará a centrarte en la tarea actual. Así que la próxima vez que vengan a marearte con algo que puede esperar práctica diciendo amablemente que no. Cuando no necesites ese foco les ayudarás.
  • Establece rutinas: e implementa rutinas en tu equipo. Puntos de control donde reenfoquéis vuestros esfuerzos y volváis al camino correcto. Mi equipo de ingeniería, por ejemplo, hacemos syncs de 5 minutos todas las mañanas para centrar que vamos a hacer ese día. Este tipo de rutinas nos permite volver a tomar foco si lo hemos perdido y centrarnos en lo que importa.

Hacer foco es esencial para llegar a nuestras metas. No te vayas por las ramas y conseguirás lo que te propongas.

TL;DR

Perder el foco es lamentablemente algo muy común entre los desarrolladores de software. Nuestra mente tiende a dispersarse con facilidad, llevándonos a implementar requisitos a medias, afectar la calidad del código, aumentar su complejidad e incluso desviarnos por completo de los objetivos originales. Sin embargo, mantener un enfoque sólido es fundamental para hacer buen software y alcanzar nuestras metas.

La clave está en aprender a evitar “irnos por las ramas”. Hacer pasos pequeños, hacer TDD, hacer una sola tarea a la vez y saber parar y retroceder pueden ser buenas herramientas para conseguirlo.

Perder el foco puede llevarnos por caminos perjudiciales, pero siguiendo estas lecciones y aplicando disciplina, podremos evitar irnos por las ramas y mantenernos enfocados en lo que realmente importa: hacer software de calidad y alcanzar nuestras metas. Un enfoque sólido es la clave del éxito.