Articles

El trabajo es el trabajo

En el que los rendimientos disminuyen.

12 Ene 2020

Cada vez que he escrito o hablado sobre el diseño organizativo, me he arrepentido. Pero he vuelto a pensar largamente en ello, y esto es lo que tengo.

En algún momento, toda organización se da cuenta de que se está ralentizando. Las funcionalidades tardan más en llegar, la gente pasa cada vez más tiempo en reuniones y todo el mundo tiene pánico a la estimación y la planificación. Si hemos interiorizado la mierda esencialista de que «los jugadores B contratan a los jugadores C», tal vez nos pongamos nerviosos con el bar y la contratación. Si estamos ansiosos e inseguros, puede que nos volvamos religiosos sobre Agile o Scrum o lo que sea. Si somos propensos a los vuelos modernistas de fantasía, podríamos decidir gastar nuestras fichas de innovación tratando de interrumpir la industria de 200.000 años de antigüedad de conseguir que los humanos trabajen juntos. Si somos de los que hacemos nuestros ocho y golpeamos la puerta, lo apuntamos como el precio del éxito.

Estos enfoques rara vez dan resultados.

Nuestro letargo dogmático

La mayoría de las explicaciones sobre el éxito o el fracaso de las organizaciones son basura. Los relatos émicos -es decir, los que provienen de la organización- se limitan a aquellos conceptos y narrativas que existen dentro de la organización. Pueden servir estructuralmente como narraciones propias y fomentar un sentido de identidad y propósito dentro del grupo, pero como proceden del equivalente epistemológico de un pozo de gravedad, su poder explicativo fuera de esa organización suele ser terrible.

Si adoptamos la perspectiva etic -es decir, desde fuera de la organización- podemos ver que las explicaciones emic del éxito o el fracaso de una organización tienen contrafactuales fácilmente disponibles en otras organizaciones. Si las organizaciones ágiles y planas, las revisiones de código, los monorrepos, las oficinas abiertas, los sistemas tipográficos de lujo, etc. son realmente los factores causales que se supone que son, ¿por qué tantas organizaciones adoptan esas prácticas sin éxito? ¿Por qué hay otras organizaciones de éxito que carecen de esas prácticas? ¿Cómo podemos diferenciar entre las historias cum hoc, ergo prompter hoc y los factores causales reales?

Más importante aún, ¿podemos determinar la superveniencia de algún conjunto de factores sobre el rendimiento de la organización, no sólo en un contexto particular sino en todas las organizaciones posibles? Es decir, ¿existen verdades necesarias y a priori sobre el rendimiento de las organizaciones?

Como es lógico, las hay.

Si nos fijamos bien, una organización que trabaja es un proceso increíblemente complejo, dinámico, distribuido y paralelo. Tenemos muy buenas herramientas para entender las líneas generales de su funcionamiento, que se remontan al menos al comentario de Manabrea a Babbage en 1842 sobre su máquina analítica. Ahora bien, no pretendo haber desarrollado la psicohistoria y, dado lo difícil que es predecir el comportamiento incluso de sistemas dinámicos sencillos, un modelo totalmente predictivo del éxito organizativo parece ciertamente imposible.

Pero, al igual que Kant al intentar deducir las condiciones previas necesarias de la experiencia subjetiva en La Crítica de la Razón Pura, podemos esbozar los límites de lo que una organización es capaz de hacer y su dinámica a medida que crece. De la misma manera que el conocimiento a priori de que diez libras pesan más que cinco libras informa de cuánta mierda podemos esperar que quepa en una bolsa, modelar las organizaciones como procesos paralelos puede informar de la manera en que las diseñamos.

Lo que ocurre dentro de esos límites es una cuestión de ejecución y esfuerzo; lo que ocurre fuera de esos límites es imposible.

El techo es bajo

La capacidad de trabajo de una organización aumenta, como máximo, de forma lineal a medida que se añaden nuevos miembros.Cada nuevo miembro de una organización añade un número constante de horas de trabajo posibles al total de horas de trabajo posibles de los empleados existentes de la empresa. La Ley de Amdahl establece que, dada una tarea fija, una solución paralela que utilice NNN procesadores se ejecutará más rápido que una solución secuencial como máximo en un factor de NNN.

A medida que se añaden recursos paralelos, el tiempo total empleado en la parte paralelizable de la tarea se amortiza a cero; en cambio, el tiempo total empleado en la parte secuencial de la tarea nunca desciende por debajo de un valor mínimo. Esto es tan cierto para un grupo de personas que intentan escribir software como para un grupo de CPUs que intentan modelar el comportamiento de las estrellas en la galaxia. Nuestra intuición nos dice que las organizaciones más grandes muestran comportamientos superlineales, pero esto no puede ser literalmente el caso si la contratación es la única variable en la ecuación. Por lo tanto, nuestra única esperanza para la productividad superlineal reside en cambiar la tarea que se está ejecutando. Afortunadamente, la capacidad de trabajo no es lo mismo que la productividad.

Cuando una organización contrata a más empleados, el trabajo para mejorar la productividad debe ser una prioridad constante. Hay que desarrollar y poner en marcha herramientas, formación y servicios internos para garantizar que todos los miembros sean capaces de trabajar en problemas de impacto cada vez mayor. La búsqueda incesante de multiplicadores de fuerza es la única vía posible para lograr mejoras de productividad superlineales a medida que la organización crece.

Por último, hay que destacar que este límite lineal de la capacidad de trabajo es un techo, no un suelo. Hay muchos otros factores que actúan como un lastre para la capacidad de trabajo, y las mejoras en la productividad de toda la organización son fundamentales para mitigarlos.

El suelo es lava

Los costes de retención crecen de forma superlineal a medida que se añaden nuevos miembros. Las soluciones paralelas a las tareas rara vez son perfectamente concurrentes (y, de hecho, tales tareas se denominan con razón «vergonzosamente paralelas»), y a menudo requieren algunas secciones críticas secuenciales. La fila de CPUs o personas que esperan para entrar en una sección crítica puede modelarse como una cola, lo que nos permite utilizar la teoría de colas para entender cómo cambia el tiempo de ciclo de la cola a medida que aumenta su tamaño. Si modelamos la cola de una sección secuencial como una cola G/G/1G/G/1G/G/1, es decir, sin hacer ninguna afirmación sobre el proceso de llegada o la distribución del tiempo de servicio, pero asumiendo un único servidor de cola (es decir sólo una CPU o persona puede mantener el bloqueo), llegamos a la fórmula de Kingman para el tiempo medio de espera

E(Wq)≈(ρ1-ρ)(ca2+cs22)τ\mathbb E(W_q) \approx \left( \frac{\rho}{1-\rho}\right) \left( \frac{c_a^2+c_s^2}{2}\right) \tauE(Wq)≈(1-ρρ)(2ca2+cs2)τ

En particular, el tiempo de espera de una cola aumenta de forma no lineal con respecto a ρ\rhoρ (utilización) y de forma cuadrática con respecto a cac_aca (el coeficiente de variación de las llegadas) y csc_scs (elcoeficiente de variación de los tiempos de servicio). (Esta es la forma cuantificada de la intuición de que las colas están vacías o desbordadas.)

La no linealidad de esto debería hacernos reflexionar, ya que aumentar el número de personas que compiten por un recurso compartido es lo mismo que aumentar ρ\rhoρ. Si no se gestiona la contención de esos recursos, el crecimiento de la organización puede provocar un aumento catastrófico del tiempo de espera. En algún momento, añadir nuevos miembros puede hacer que la productividad global de la organización disminuya en lugar de aumentar, ya que el aumento del tiempo de espera debido a la contención es mayor que el aumento de la capacidad de trabajo. (Esta es la versión organizativa de los picos de latencia que vemos cuando los servidores se sobrecargan.)

Estos recursos compartidos no son necesariamente cosas físicas, como los baños o las impresoras; pueden ser digitales, como los archivos en un repositorio de código fuente o los tickets en un rastreador de errores, u organizativos, como las revisiones de código o las asignaciones de trabajo. Al igual que cuando se escriben aplicaciones altamente concurrentes, la creación de organizaciones de alto rendimiento requiere una búsqueda cuidadosa y continua de recursos compartidos, y el desarrollo de estrategias explícitas para mitigar su impacto en el rendimiento.

Una estrategia comúnmente aplicada, pero rara vez exitosa, es el uso de recursos externos -por ejemplo, consultores, agencias, aumento de personal- como una forma de evitar la contención de los recursos internos. Aunque los consultores pueden actuar con rapidez en un entorno de baja contención, la integración de su producto de trabajo en los recursos en disputa a menudo tiene el efecto de inflar los csc_scs (la variación de los tiempos de servicio, o el tiempo que se mantiene una sección crítica). Esto produce un pico cuadrático en los tiempos de espera, lo que aumenta la utilización, que a su vez produce un pico superlineal en los tiempos de espera (la teoría de las colas es muy dura), añadir baños a medida que se añaden empleados) y desarrollar una heurística sin estado para coordinar el acceso a los recursos compartidos (por ejemplo, agrupar a los empleados en equipos).

Como ocurre con las aplicaciones muy estratificadas, cuanta más distancia haya entre los que diseñan la organización y el trabajo que se realiza, mayor será el riesgo de que se produzcan puntos de contención no gestionados. Los métodos organizativos descendentes pueden dar lugar a subdivisiones que parecen esfuerzos paralelos cuando se enumeran en una diapositiva pero que, en realidad, son muy interdependientes y están interconectados. La dotación de personal de esfuerzos altamente secuenciales como si fueran totalmente paralelos conduce a la catástrofe.

El infierno es otra gente

Los costes de coherencia crecen cuadráticamente a medida que se añaden nuevos miembros.Trabajar en tareas complejas utilizando recursos paralelos (o con un grupo de personas) requiere comunicación. Un grupo de 333 tiene 333 diadas; un grupo de 444 tiene 666; un grupo de 555 tiene 101010; un grupo de NNN personas tiene N2-N2\frac{N^2-N}{2}N2-N posibles diadas. La comunicación punto a punto (es decir, hablar entre sí) puede modelarse como la activación de un subconjunto de esas diadas.

Aunque algunas organizaciones son más charlatanas que otras, esta comunicación es esencial para compartir información y coordinar la acción. Pero no es gratuita. La comunicación requiere tiempo. Si el porcentaje relativo de personas que necesitan hablar entre sí para conseguir algo se mantiene constante a medida que la organización crece (es decir, x%x\%x de todas las díadas), el tiempo total dedicado a la comunicación crecerá cuadráticamente a medida que la capacidad de trabajo de la organización crezca linealmente.

Podemos considerar las reuniones de grupo como una estrategia de agrupación para reducir el número de entidades implicadas en las comunicaciones punto a punto, pero la eficacia de esta estrategia depende en gran medida del solapamiento relativo de los grupos y de las estructuras de los mismos. El grado de solapamiento de los grupos es esencialmente el mismo factor que el porcentaje de diadas necesario para la comunicación. Si el tamaño de los grupos está acotado, el crecimiento de los costes de coherencia se reducirá en un factor constante, pero seguirá creciendo cuadráticamente. Puede ser tentador tratar de apostar por la coherencia y simplemente ensuciar, pero incluso las formas sutiles de incoherencia tienen enormes costes empresariales. La única estrategia escalable para contener los costes de coherencia es limitar el número de personas con las que un individuo necesita hablar para hacer su trabajo a un factor constante.

En términos de diseño organizativo, esto significa limitar tanto los tipos como los números de los grupos consultados en el proceso de la organización. Cada persona o grupo adicional en una matriz de asignación de responsabilidades aumenta geométricamente el área de esa matriz. Cada asignación de responsabilidad adicional en esa matriz aumenta geométricamente el coste de la coherencia organizativa.

También vale la pena señalar que estas comunicaciones entre pares no necesitan ser formales, planificadas o incluso bien conocidas para tener costes. Ni su manual del empleado ni su calendario son descripciones exactas de cómo se realiza el trabajo en la organización. A menos que la organización esté compuesta por zombis, los miembros de la organización estarán constantemente subvirtiendo el procedimiento operativo estándar para realizar el trabajo real. Incluso las hormigas improvisan. Una contabilidad precisa de estos costes ocultos puede desarrollarse a través de un análisis honesto, irreprochable y continuo del trabajo a medida que se realiza.

Principios de más allá del espacio y el tiempo

Mantenga el trabajo paralelo, los grupos pequeños y los recursos locales.

Cuando se presenta un conjunto de problemas que crecen de forma superlineal a medida que aumenta el NNN, nuestra mejor apuesta es mantener el NNN pequeño. Si la intención de la organización es aumentar la entrega de valor mediante la contratación de más personas, los esfuerzos de trabajo deben ser lo más independientes posible. Los líderes deben desarrollar prácticas y procesos para garantizar que los esfuerzos de trabajo que sus estrategias consideran paralelos sean realmente paralelos. Los recursos compartidos deben gestionarse de forma continua para evitar la contención y, siempre que sea posible, los recursos que necesita un grupo deben ubicarse en ese grupo (por ejemplo, si el trabajo implica mucho diseño, hay que asignar un diseñador a ese grupo). La doctrina de las armas combinadas no es sólo para los soldados.

Priorizar el desarrollo de multiplicadores de fuerza.

Si una organización está trabajando en gran medida en los mismos tipos de problemas que en años anteriores, es motivo de preocupación. Hay que dotar de personal a los equipos dedicados a las herramientas internas y darles la dirección explícita de crear herramientas y optimizar los procesos para ayudar a aumentar la productividad de sus compañeros. Si el porcentaje de la organización dedicado a mejorar su funcionamiento empieza a disminuir, pregúntese: ¿hemos alcanzado un máximo global o local? Apueste por las herramientas de alto rendimiento, pero tenga en cuenta si realmente ayudan o no.

Si es posible, divida los productos de trabajo en módulos independientes; si no, crezca lentamente y optimice.

Si su producto de trabajo -por ejemplo, código base, documentos, etc.- puede dividirse en módulos independientes, hágalo. La palabra clave es independiente. Cortar tu mierda en cien microservicios no te ayudará si todo el mundo tiene que cambiar diez de ellos para poder hacer algo. Algunos problemas no son particularmente susceptibles de partición; también son problemas que no se benefician mucho de los trabajadores adicionales. Si el problema es un punto fijo, hay que buscar formas de optimizar la proporción secuencial del trabajo. Sepa que si lanza cuerpos a ese problema, se producirá un clusterfuck.

Escala los esfuerzos organizativos a través de una cartera de productos sinérgicos.

La mayoría de las empresas inteligentes comienzan con un solo producto. Apuestan por su hipótesis de producto, ponen los huevos en una sola cesta y se lanzan a la piscina. Si tienen la suerte de conseguir la tracción, se duplican en esto. Se acabó. Una y otra vez. Una y otra vez. En algún momento, tienen varios batallones de personas dando vueltas, todos tratando de averiguar quién es el dueño de la interfaz de usuario del turboencabulador y si los nuevos marzelvanos serán totalmente antigráficos para el gran impulso de marketing de otoño.

Para evitar esto, los líderes de la organización deben mantener el desarrollo de una cartera de productos como objetivo explícito. Las ideas de características o productos que son complementarias a la estrategia comercial general de la organización pero que no coexisten de forma natural con el producto principal pueden desarrollarse como productos separados por equipos independientes. Tenemos pruebas de que los calendarios de desarrollo de software pueden acortarse, como máximo, un 25%; debería ser fácil elegir entre un solo producto en 18 semanas o dos productos en 24 semanas.

Los nuevos productos exitosos pueden integrarse de forma incremental con los productos existentes cuando tenga sentido, y las herramientas, bibliotecas y marcos de trabajo pueden ser desarrollados por equipos multiplicadores de fuerza para reducir tanto el tiempo de salida al mercado de los nuevos productos como los costes de mantenimiento de los productos existentes. Los nuevos productos que no tienen éxito pueden ser retirados del mercado a un coste mucho menor que las características de complejidad similar. Al fin y al cabo, eliminar una función de un producto implica los mismos costes de contención y coherencia que añadir una función. Es raro que una característica presente un coste de transporte mayor que el coste de su eliminación, de ahí la prevalencia de las características del Holandés Errante.

Como ejemplo concreto de la virtud de una cartera de productos, imagine que Amazon Web Services es un único producto, dotado de cien mil almas condenadas y encabezado por una interfaz de usuario que no es más que una serie de botones que le permiten aprovisionar y operar máquinas virtuales, bases de datos, lagos de datos, aplicaciones robóticas, aplicaciones de realidad aumentada, dinguses de IoT, y más. Una criatura así implosionaría por su propio peso.

En cambio, Amazon Web Services es una cartera de productos sinérgicos. EC2 tiene su propio conjunto independiente de características, desarrollado y operado por un conjunto independiente de empleados. Cuando sus necesidades pueden ser proporcionadas por otro producto de AWS (por ejemplo, el almacenamiento de imágenes de máquinas virtuales en S3, o el envío de métricas a CloudWatch), se introduce una integración entre productos. Esta estructura de productos hace posible la estructura organizativa altamente concurrente que permite a Amazon lanzar un gran número de nuevos productos cada año mientras sigue dando soporte y desarrollando los productos existentes. Los servicios que fallan pueden desaparecer o reducirse sin interrumpir el resto de la organización.

Mantener las matrices de asignación de responsabilidades pequeñas, dispersas y locales.

A medida que una organización madura, las funciones ad hoc suelen convertirse en equipos completos. Esta especialización es a menudo crítica para la creación de economías de escala internas, pero la formalización de nuevos grupos debe mantenerse bajo control. Cada columna de la matriz de asignación de responsabilidades amplía geométricamente el posible conjunto de interacciones necesarias; cada asignación de la matriz es un punto de coordinación que requiere espera. Cuando una matriz indica una relación de alto nivel de contacto entre dos grupos (por ejemplo, un grupo de ingenieros que trabajan en una función y los abogados que tratan de garantizar el cumplimiento legal de esa función), hay que tratar de reducir el coste de esa interacción colocando a sus miembros (por ejemplo, integrando a un abogado con los ingenieros), integrar a un abogado con los ingenieros).

Priorizar la distribución de información asíncrona sobre la sincrónica.

Una fuente importante de demanda de reuniones y actualizaciones de estado es el deseo de los líderes de la organización de estar al tanto de quién está haciendo qué. Este conocimiento de la situación es ciertamente importante, pero tratar de mantenerlo convocando reuniones, enviando mensajes a la gente en Slack y pillando a la gente en los pasillos es un importante lastre sistémico para la productividad de la organización.

Un modelo mejor para mantenerse informado de los desarrollos a medida que la organización escala es que los grupos publiquen actualizaciones de estado como parte de la cadencia regular de su trabajo. Los líderes pueden leer estas actualizaciones de forma asíncrona y, en caso de que sea necesario, iniciar una conversación sincrónica adicional para hacer preguntas, proporcionar comentarios, etc.

Las reuniones sincrónicas deberían reservarse para la colaboración de baja latencia en cuestiones complejas; del mismo modo, la colaboración debería reservarse para las reuniones sincrónicas.

Lo que ocurre dentro de los límites es importante.

El hecho de que conozcamos algunos de los límites del rendimiento organizativo y su dinámica no nos excusa de utilizar nuestra empatía para construir organizaciones humanas. Las empresas son grupos de personas a las que se les compensa por tener que pasar parte de su vida finita sin estar con sus parejas, hijos, mascotas o aficiones súper raras. Merecen ser miembros de organizaciones que honren ese tiempo asegurando que su trabajo tenga valor y significado. No hay un modelo matemático que nos guíe hacia ese objetivo.

Gracias a varios Fiascans por revisar este post. Cualquier error en este artículo es mío, no de ellos.