Por qué debemos evitar interrumpir a los Desarrolladores / Programadores Los desarrolladores trabajan en un "mundo" de abstracción que requiere de largos períodos de concentración ininterrumpida para ser productivos y evitar errores

by
on July 17, 2017
(18 min read)

Imagina que empezamos un nuevo proyecto tecnológico común: una página web, App para móvil, etc. Algo que con un equipo de desarrolladores y unos pocos meses podremos completar con buenos resultados, aunque necesitaremos a alguien que se encargue de: definición del producto, negociaciones y reuniones con el cliente o stakeholders de la propia empresa, estimaciones de tiempo, costes y presupuestos, documentación, asignación de recursos, contratación de servidores y otros servicios de terceros, creación de contenido y material, comunicación…

Please donate to keep this server up

Un error muy común es escoger a uno de los desarrolladores para que, además de desarrollar, se encargue de todas las demás tareas del proyecto.

Lo que a veces cuesta entender es que hay muchas diferencias entre un Desarrollador de software y tareas de gestión y administración. Por querer optimizar recursos y salir del paso, suele acabar pasando factura. Las diferentes especialidades trabajan codo a codo, pero son maneras muy diferentes de pensar y ejecutar.

Mentalidad de un Desarrollador

Los desarrolladores y programadores trabajan inmersos en la abstracción: símbolos, algoritmos, matrices de información multidimensionales, flujos de información intangible que forma hilos complejos de datos conectados… Y todo lo hacen en su pensamiento. El desarrollador necesita de una gran concentración para entrar en este “mundo” al que podemos comparar con construir una casa mentalmente desde cero:

Empezando por visualizar los cimientos y cada pieza de hormigón armado, la distancia entre ellas, su grosor, peso, dureza… Y subiendo con todos y cada uno de los detalles: todas las tuberías, paredes, cableado de luz y agua, las juntas, cada ladrillo, cada puerta y su marco, cada capa de pintura y punto de toma eléctrica, cada tornillo e interruptor, cada tubería desde su inicio a su fin con todas sus conexiones…

Y una vez lo tiene todo pensado, repensar varias veces si existe una manera más óptima: utilizar menos recursos para economizar materiales sin perder estabilidad, construirlo de forma más veloz para ahorrar tiempo sin perder seguridad, pensar en cómo podrá luego ampliarse sin complicaciones si se quiere añadir una planta más… Estas micro y macro optimizaciones las irá repensando constantemente durante todo el proceso de “construcción” de la obra.

Como decía, todo esto el desarrollador lo “dibuja” mentalmente, puede tomar apuntes, notas y pseudocódigo, pero al ser casi toda la información intangible y a su vez multidimensional, se hace muy poco viable e impráctico. Con lo que la mejor opción es almacenar mentalmente mucha información y tener una gran capacidad de concentración para poder moverse por todos los datos, analizando diferentes opciones, casuísticas y demás hasta encontrar con la mejor opción: más viable, más rápida, más escalable.

Os pongo un ejemplo rápido sobre un extracto de código (el lenguaje es JavaScript):

for ( currentDay = 1; currentDay < 8; currentDay++ ){
	for ( currentHour = 0; currentHour < 24; currentHour++ ){
		if ( checkCurrentDay+'-'+currentHour ).checked ){
			if ( slot.weekday === null ){
				slot.weekday = currentDay;
				slot.startTime = currentHour;
			}
			slot.duration = slot.duration + 60;
		}else if ( slot.weekday !== null ){
			schedule.push( slot );
			slot = {
				weekday: null,
				startTime: null,
				duration: 0,
			};
		}
	}
}

Este código de arriba es de una aplicación logística y nos sirve para calcular la disponibilidad semanal, hora a hora de un proveedor y guardarlo en “slots” (huecos) de tiempo para su y cálculo posterior. A su vez también optimizamos el espacio de almacenamiento en la base de datos y su procesamiento.

Traduciendo el código de arriba a nuestro idioma se resuelve en:

Creamos un contador de días para cada día de la semana, empezando por el Lunes y hasta el Domingo, haremos lo siguiente:
1. Creamos un contador de horas y lo ponemos a las 12 de la madrugada
2. Para cada hora del día, haremos lo siguiente:
	2.1. Si el proveedor ha seleccionado esa hora del día:
		2.1.1. Si no tenemos un slot activo en ese día creamos un nuevo slot en el día de la semana y la hora y lo dejamos en 0
		2.1.2 Ahora le sumamos una hora a ese slot
	2.2. Si no se ha seleccionado esa hora del día, terminamos con ese slot:
		2.2.1 Lo guardamos en la Base de Datos
		2.2.2 Reseteamos el slot
	2.3. Volvemos al punto 2 y seguimos con la siguiente hora hasta llegar a las 23h
3. Volvemos volvemos al punto 1 y seguimos con el siguiente día hasta llegar al Domingo

Todo esto el desarrollador lo está traduciendo en su cabeza a medida que lee o escribe código, sin apuntar nada. En este ejemplo os he puesto menos de 20 líneas de código de las más de 1,000 o 10,000 que suele tener un proyecto y que un programador debe leer, interpretar y memorizar en su día a día.

Un desarrollador efectivo tiene que ser todo lo contrario a multitarea (trabajar en varias cosas a la misma vez, por ejemplo: coger el teléfono, resolver una duda de un compañero, estar pendiente de si entra alguien por la puerta, etc.). Un Desarrollador trabaja en una sola tarea, pero una tarea enorme y que debe salir perfecta al 100%, no se acepta un 99.99%: los ordenadores no tienen compasión, no perdonan y si no les gusta algo lo cancelan sin dar otra oportunidad lo que suele causar errores y fallos que pueden ser catastróficos.

Interrupciones durante el desarrollo

Para que un desarrollador pueda hacer su trabajo, debemos evitarle a toda costa cualquier interrupción, por pequeña que sea. Ya que se encuentra en este “mundo” de información abstracta que requiere de largos períodos de concentración ininterrumpida.

Cualquier interrupción desmorona todo lo que estaba construyendo. Ponte en su lugar, imagínate que estás leyendo el código de arriba entendiendo línea a línea y memorizando lo que está pasando, por donde van los contadores, etc. De repente, alguien te interrumpe cuando vas por la mitad para preguntarte una duda, piensas la respuesta y le contestas, y cuando quieras continuar leyendo el código tendrás que volver a empezar desde el principio. Puede que seas muy inteligente y el ejemplo de arriba de parezca poco, pero imagínate un desarrollador que en vez de leerse las 20 líneas de código de este ejemplo se ha leído 1,000, y no de la traducción que te he puesto si no de código, que aunque lo entienda tiene que procesarlo.

Después de una interrupción como la de un compañero preguntando una simple duda, es muy común que un programador tarde de 23 a 33 minutos en volver a crearse su estructura de información mental para poder seguir con lo que estaba haciendo. Así que una simple distracción se pagará muy cara, y a veces no volverá a ser productivo hasta el día siguiente (más info aquí, aquí, aquí, aquí, aquí…).

Interrupciones y reuniones provocan una gran pérdida de productividad a los desarrolladores/programadores

Puede que no te lo diga, pero por muy paciente y educado que sea el Desarrollador, le estás tirando a la basura media hora de su tiempo, esfuerzo y sudor. Esto incrementa su frustración e irá acabando con su paciencia y humor. Programar es muy agotador mentalmente.

This is why you shouldn't interrupt a programmer

Interrumpir a un desarrollador cada media hora estamos desperdiciando su productividad enormemente. Tendiendo en cuenta el salario que cobra un buen programador y a su vez, la escasez de programadores, es una auténtica catástrofe ya que acabamos desperdiciando un día entero de trabajo y salario. Por suerte, hay muchas empresas que lo entienden y realmente valoran a sus desarrolladores, más abajo lo explico.

Además, cada vez que se interrumpe a un Desarrollador, estás creando un alto riesgo de que se generen errores en el código ya que quizás se olvida de un detalle que luego resulta fatal, y puede que nadie lo detecte hasta dentro de días o incluso meses y puede llegar en el peor momento y crear un desastre, véanse las noticias como cada semana ocurren hackeos, pérdidas de datos, caídas de páginas web y servicios…

Evolución del desarrollo a lo largo de los años

Cuando empecé a desarrollar páginas web a finales de los años 90 la profesión de hacer páginas web era la de “webmaster”, en la que básicamente alguien espabilado lo podía hacer todo, por aquel entonces todo era mucho más sencillo que hoy en día aunque es cierto que no teníamos ni un 10% de las posibilidades que tenemos hoy en día.

Desde entonces, la tecnología ha avanzado muchísimo, tanto que, por ejemplo, para llevar a cabo una empresa tecnológica con su página web y App para móvil necesitas varios expertos en estos perfiles:

  • Front-end Developer
  • Back-end Developer
  • Android App Developer
  • iOS App Developer
  • Database Developer
  • DevOps / Systems Administrator
  • IT Support
  • Quality Assurance / Testing

Y otras responsabilidades que, pese a no ser estrictamente de programación, van muy relacionadas y también se les suele dar:

  • Web, UI, UX, Graphic Designer
  • Project Manager
  • Scrum Master
  • Product Owner
  • Architecture Engineer
  • Chief Technology Officer

Cada título de esta lista es una profesión en sí, ocupan una jornada laboral y cobran muy bien. Por desgracia, la mayoría de desarrolladores acaba ocupándose de varias de ellas simultáneamente, mezclando dedicación y perdiendo productividad.

Aumentando la productividad de los desarrolladores

Para que los desarrolladores puedan realizar su trabajo con el máximo de productividad y el mínimo de errores deben llegar a un estado mental óptimo, como comentaba, sin interrupciones y con el mínimo de estímulos externos.

Dónde

Una oficina sin personas hablando entre ellas o al teléfono, sin música, en una silla y escritorio cómodos y con un ordenador y pantalla decentes, con una temperatura y luz agradable, que tengan profundidad visual para relajar la vista al pasar largos ratos mirando la pantalla.

Qué

Lo ideal es que tengan una sola especialidad de las mencionadas arriba y que trabajen en el menor número de proyectos simultáneos posible. Así evitamos la multitarea, las interrupciones y reuniones.

Cómo

Para que los desarrolladores trabajen al máximo de sus capacidades y hagan su trabajo más rápido y mejor, es importante que estén bien cuidados: han de estar descansados, sin estrés, ni preocupaciones ya que estas preocupaciones pueden entrar en su pensamiento y distraerlos de su trabajo.

Recuerdo el caso de cuando trabajaba en una de las mayores empresas de Reino Unido (que más tarde fue comprada por Amazon). Cuando  un desarrollador estaba distraído, cansado o poco atento, nuestro Manager lo detectaba y le decía tranquilamente, sin ningún problema ni reparo y con una sonrisa amigable, que se fuese a casa a descansar o atender sus problemas personales y volviese por la tarde o al día siguiente, sin afectar a su salario ni vacaciones.

Por un lado lo hacía para mitigar la baja productividad del Desarrollador y, por otro, para reducir código mediocre y/o con errores que muy probablemente más tarde pasarían factura al romperse y tener que replantear proyectos y fechas para arreglarlo (creando otra interrupción), o creando deuda técnica que tendría que rehacerse de nuevo el día que se necesitara programar por encima de ese código, o alarmas a las 4 de la madrugada porque “algo se ha roto”…

Incluso algunas empresas ya publicitan que son conscientes de ello y en su día a día evitan al máximo las interrupciones y los meetings:

Cuándo

Otro de los aspectos que a veces cuesta valorar para los poco tecnológicos son los horarios flexibles. Un día el desarrollador puede no ser nada productivo, y otro puede estar metido en “el estado de productividad” y dedicarle horas y horas de pura inspiración, rendimiento y lucidez y sacar adelante cantidades de trabajo espectaculares. Si tienes una política estricta de “8 horas al día”, te recomiendo que no la fuerces con tus desarrolladores, puede que a la hora de cerrar se encuentren en un momento súper-productivo y perderán esa inercia. O que puedan dormir unas horas más y venir descansados al trabajo, el sueño es un enemigo brutal de la concentración. Algunos desarrolladores incluso trabajan mejor de noche, hay muchos estudios que lo corroboran y yo mismo tengo temporadas que me va mejor trabajar mientras el mundo duerme.

O trabajar desde la tranquilidad, confort y silencio de sus casas, mis momentos más productivos son, sin lugar a dudas, cuando estoy solo en casa.

O en la empresa tener separado al equipo de Developers en otra sala lejos de  llamadas telefónicas, conversaciones, interrupciones, visitas, ruidos, música (si alguien quiere escuchar música se pone auriculares) o incluso olores.

Muchas empresas de desarrollo optan por tener espacios con sofás, zonas de descanso, juegos, comida, etc. Que lo tengan todo para minimizar aún más las distracciones de tener que relajarse o salir a tomar aire fresco o al restaurante a comer. Es algo que parece un gasto inútil pero que con desarrolladores buenos se nota y sale a cuenta. Muchas mentes brillantes acaban marchando de la empresa donde estaban para ir a otra con mejores condiciones donde se les valora más. Y eso sale caro ya que un Desarrollador, por bueno que sea, necesita meses para llegar a conocerse todo el código e infraestructura tecnológica y perderlo es una lástima.

Además, algunas empresas están empezando a ofrecer vacaciones ilimitadas para que los desarrolladores puedan “desconectar” completamente y volver frescos y al 100% libres de preocupaciones personales.

Interacción y equipo

Herramientas de comunicación

Si no tienes más remedio que interrumpir a un desarrollador, utiliza (siempre que no sea algo realmente urgente/crítico que no pueda esperar unos minutos) medios pasivos para comunicarte: déjale un mensaje en el chat o escríbele un email antes de llamarle o presentarte en su escritorio creando así la fatídica interrupción.

Facilítale la vida: ponle en situación desde cero y da detalles concretos. Piensa que quien programa está en un mundo paralelo de lógica abstracta y va a tener que “aterrizar” en el mundo real para atenderte y ponerse en situación de lo que le pides.

Si ves que alguien lleva auriculares, no le molestes, es una manera amistosa de decir “no me molestes, estoy concentrado”.

El papel del Scrum Master

En equipos medianos y grandes se suele tener una persona extra entre el equipo de desarrollo y el Project Manager, este es el papel del Scrum Master. ¡Su papel es el de evitar que el Project Manager interrumpa a los desarrolladores!

El papel del Quality Assurance

La concentración de los desarrolladores es tan importante, que incluso se suele contar con QA Engineers, que son, ni más ni menos, que personas dedicadas simplemente a testear y comprobar que todo lo que el desarrollador ha programado funcione correctamente, de este modo, mantenemos al desarrollador en su “mundo”, evitando aún más las distracciones al tener que testear a fondo que todo funciona tal y como ha planteado, aumentando así su tiempo útil y productivo.

Equipo desarrollador óptimo

Es cierto que muchas veces no nos lo podemos permitir con presupuestos bajos, y el PM acaba haciendo de SM también, es muy difícil y sacrificado porque existe un conflicto de intereses. Tiene que ser especialmente cuidadoso de respetar la concentración de los desarrolladores y a su vez apagar fuegos de otros lados.

En el gráfico anterior y resumiendo muchísimo:

  • Los Stakeholders son los que piensan en lo que necesita el producto final, pueden ser inversores, clientes o incluso los propios empleados y directores de otros departamentos.
  • El Product Owner se encarga de decidir qué funcionalidades y cambios son prioritarios.
  • El Project Manager se encarga de estimar timmings y recursos para poder entregar el proyecto a tiempo.
  • El Scrum Master ayuda al Project Manager a estimar mejor las tareas y ayuda a los Desarrolladores además de tener una visión más general a nivel tecnológico.
  • Los Developers se encargan de desarrollar y programar.
  • Los Quality Assurance se encargan de testear que todo lo que hacen los Developers funcione correctamente.

Me he dejado muchos detalles y roles, solo quiero dar una visión general de cómo se evita que los Developers tengan distracciones, ya que por desgracia, aún existen muchas empresas en las que los Stakeholders hablan directamente con los Developers y eso es fatal para su rendimiento y el éxito final de la empresa.

Simple Cloud Hosting Built for Developers

 

Artículos interesantes:
Créditos

El gráfico de la distracción está inspirado en un artículo en Inglés que leí hace muy poco y trata sobre cómo las reuniones afectan al desarrollo de software, no consigo encontrar la fuente.

Thank you for sharing the article

    
    

Xavi Esteve wrote this article on July 17, 2017 and published it in español, work and project management.

2 comments

  • Alex says:

    Me dejas tu teléfono para llamarte e interrumpirte cada día cuando me apetezca? :P jajaja te entiendo totalmente, me ocurre muchas veces tanto lo de necesitar horas para concentrarme como lo de ponerme de mal humor si alguien me interrumpe.. pero es cierto que es difícil en un equipo pequeño colaborar con el resto sin que haya ninguna interrupción.

  • Xavi Author says:

    Toda la razón Alex!
    En equipos pequeños es necesaria mucha interacción, sobretodo porque un Developer tiene muchos otros papeles (Project Manager, Product Owner, etc.). En ese caso lo mejor es educar al equipo para que sepa cómo interrumpir lo mínimo y en qué momentos (valorando si es una urgencia y/o usando comunicación no intrusiva: Slack, email, etc.).
    Un abrazo

Follow me for cool new products and interesting findings on graphic design, web development, marketing, startups, life and humor.


/*Twitter*/ !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); /*Facebook*/ (function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=28624667607";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk')); /*Google+*/ window.___gcfg = {lang: 'en-GB'};(function() {var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;po.src = 'https://apis.google.com/js/plusone.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);})();
Airbnb 30€ discount