¿Te has encontrado alguna vez en una situación como esta?
-Daniel, el cliente nos pide que demos prioridad a la corrección de estas fallas, así que pausa el desarrollo de la nueva funcionalidad y luego lo retomamos.
-¿Seguro? Yo podría finalizar el desarrollo esta misma tarde y luego tomo las correcciones…
-Definitivamente: interrumpe el desarrollo que ya lo retomaremos al finalizar las correcciones.
Viví esta conversación, o alguna similar, muchas veces en mi vida, y todas ellas estuvieron seguidas por otra conversación en la que me preguntaban la razón por la cual, si solo me faltaban un par de horas de desarrollo antes de cambiar de actividad, «ahora resulta que te estás tomando todo el día para finalizar el desarrollo».
Bueno, pues resulta que existe una explicación tan básica, que muchas veces es difícil de creer: las personas no somos multitareas (al menos a la hora de producir software).
El proceso necesario para almacenar un flujo de información en el cerebro de un desarrollador, requiere que se realice un paso a paso de todos los puntos de ejecución de un programa. Esta memoria no es permanente, si se interrumpe con otra actividad, con seguridad que se extraviarán algunas piezas críticas de información del flujo que se estaba analizando, lo que obligará a que se tenga que reiniciar la comprensión paso a paso de todos los puntos de ejecución (a veces desde cero).
Tomemos este ejemplo del flujo que podría llevarse en la mente de un desarrollador, el cual pudo haber tomado unos 30 o 40 minutos en construirse por medio de repetir varias veces un proceso paso a paso:
- Ingresa un objeto de tipo Persona
- Se valida el tipo de identificación
- Si es una cédula (o DNI, dependiendo del país), implica que la persona tiene más de 18 años
- Cuando se tiene un número de teléfono físico asignado, se puede realizar una consulta de las demás fuentes para saber si este teléfono cuenta con algún reporte.
- Si el reporte sale de las fuentes A, B y C, entonces se puede tomar el número de documento, si y solo si se es mayor de edad
- Si el reporte proviene de la fuente X, solo podríamos tomar el ID de búsqueda para realizar una nueva búsqueda en la fuente Y o Z y revisar si se cuenta con la autorización.
- Pero si es un menor de edad, se toma la solo la fuente W y se debe almacenar el código de autorización
Si en este momento se llega a interrumpir el proceso, haciendo que el desarrollador realice un análisis similar a un proceso diferente, en el momento que retome este flujo, su mente habrá olvidado una buena porción del análisis que ya había realizado, comenzará a mezclar con los pasos del segundo flujo, y terminará posiblemente buscando una manera de validar si una persona es mayor de edad en los datos retornados desde la fuente A, B o C.
Lucho Salazar tiene un excelente gráfico que ilustra el costo de la multitarea respecto al porcentaje de tiempo/trabajo perdido debido al cambio de actividades. Las barras rojas corresponden precisamente a ese reproceso necesario en la mente de todo desarrollador para descartar el análisis de la tarea que acaba de terminar y retomar el análisis que ya se había logrado hacer de la presente tarea.
Y este efecto de cambio de tareas no solo obedece a cada vez que se cambia de una tarea de desarrollo a otra, cualquier cambio de actividad va a generar un deterioro en la productividad: llamadas, reuniones, interrupciones de compañeros o de superiores, entre otros. Mientras más demorada, con más contenido, o con mayor necesidad de análisis sea la interrupción, mayor será el desperdicio en la productividad de un desarrollador de software.
Así que piénsalo dos veces de ahora en adelante: ¿esa interrupción, o esa reunión que parte la jornada de trabajo en dos, es realmente necesaria? ¿O podría fácilmente ser reemplazada por un mensaje o por un correo que se pueda leer cuando no te encuentres en medio de un análisis complejo?