0:00:06.080,0:00:11.840 El software rara vez funciona como se pretende mientras se escribe, las cosas van mal, lo sabemos. Un comportamiento 0:00:11.840,0:00:16.800 estándar en algunos desarrollos de software es: ver el error, aplastar el error y acabar con él. 0:00:19.280,0:00:24.560 Por el contrario, una de las cosas que he observado a lo largo del tiempo es que para las personas expertas el error, o 0:00:24.560,0:00:28.960 más ampliamente las cosas que van mal o salen mal durante el desarrollo de software, es una oportunidad: 0:00:28.960,0:00:34.400 para entender mejor, para cuestionar las suposiciones, para detectar la falta de comunicación o los conceptos erróneos, 0:00:34.400,0:00:38.960 para tropezar con la visión. Así que las personas expertas no tienen miedo al error, sino que están atentas. 0:00:39.760,0:00:45.360 A menudo esperan a eliminar el error, sino que se preguntan: "Qué raro, ¿por qué pasa esto? De hecho, 0:00:45.360,0:00:50.720 el error se considera una aporte útil en el curso del desarrollo progresivo. Esta charla pretende 0:00:50.720,0:00:58.320 resumir algunas de las ideas sobre cómo las personas expertas y los equipos de alto rendimiento aprovechan esa oportunidad. 0:00:58.320,0:01:03.280 Llevo unos 30 años estudiando a las personas expertas y a equipos de alto rendimiento -en el trabajo, 0:01:03.280,0:01:07.200 en la industria- para articular sus estrategias y prácticas, 0:01:07.840,0:01:13.520 y en efecto actúo como un espejo o una lente, reflejando y enfocando. Lo que más me interesa 0:01:13.520,0:01:18.320 es articular lo que realmente hacen los/as desarrolladores/as de software exitosos/as, no dictarles lo que 0:01:18.320,0:01:25.840 deben hacer. Y espero que la charla tenga alguna resonancia con tu experiencia. 0:01:28.160,0:01:33.600 La investigación en ingeniería del software considera predominantemente el error de forma retrospectiva, basándose en el análisis 0:01:33.600,0:01:38.960 del software y del funcionamiento, normalmente de proyectos masivos, generalmente en el contexto de los defectos que quedan 0:01:38.960,0:01:43.680 en el código y que deben ser corregidos o de los fallos del sistema de software que surgen de una colección de 0:01:43.680,0:01:49.760 defectos más pequeños. Nosotros hemos adoptado una visión más ecológica del error durante el desarrollo de software. 0:01:51.840,0:01:57.600 La literatura psicológica ofrece el concepto de error activo: estos errores humanos durante una 0:01:57.600,0:02:04.480 tarea que toman la forma de deslices de acción, como errores tipográficos, o lapsos de memoria o atención, o 0:02:04.480,0:02:10.800 errores cometidos en la formación y ejecución de intenciones durante la resolución de problemas, es decir, malas decisiones. Para 0:02:10.800,0:02:17.200 recuperarse, una persona debe saber que se ha producido un error, debe identificar tanto lo que se ha hecho mal 0:02:17.200,0:02:22.160 como lo que debería haberse hecho, y luego debe entender cómo deshacer los efectos del error. 0:02:22.160,0:02:27.760 Así pues, los errores activos pueden ser detectados en el acto, o pueden ser detectados más tarde durante las comprobaciones 0:02:27.760,0:02:34.080 y evaluaciones estándar, por obstáculos al progreso, por señales del entorno o por resultados 0:02:35.040,0:02:40.560 inesperados. Así pues, la detección y recuperación de errores se desarrolla en el curso de la resolución progresiva de problemas. 0:02:41.120,0:02:45.600 Entonces, ¿qué es lo que hacen los expertos y los equipos de alto rendimiento que les da mejores resultados? 0:02:48.560,0:02:52.640 Las personas expertas prestan atención a las lagunas. En lugar de limitarse a buscar lo que esperan, 0:02:53.280,0:02:58.160 prestan atención a la información y a las señales que pueden alertarles de algo inesperado, 0:02:58.160,0:03:01.680 de algo que no funciona. Prestan atención a los espacios entre las cosas, 0:03:02.400,0:03:07.520 por ejemplo, a las interfaces, a las interacciones entre componentes, a la integración con otros sistemas, 0:03:07.520,0:03:12.880 a los conceptos del dominio ocultos tras los tipos de datos estándar. Prestan atención a lo que no se muestra, 0:03:12.880,0:03:16.960 a lo que falta, ya sea en el diseño o en la información o en la herramienta de razonamiento 0:03:16.960,0:03:21.280 que están utilizando, y esta atención a las lagunas promueve la detección de defectos. 0:03:23.760,0:03:28.160 Mientras que muchas personas buscan evidencia de que las cosas funcionan como se espera, 0:03:28.160,0:03:32.080 las personas expertas de los equipos de alto rendimiento están más dispuestas a las evidencias contrarias y, 0:03:32.080,0:03:36.800 de hecho, sus prácticas les impulsan a buscarlas. Buscan pruebas, se preguntan por qué, 0:03:36.800,0:03:43.360 hacen partícipes a los/as usuarios/as, descorrelacionan, obtienen y contrastan diferentes perspectivas. 0:03:43.360,0:03:47.680 Así que se desafían a sí mismas: cuestionan sus supuestos, sus modelos, sus diseños, 0:03:47.680,0:03:51.520 a través de mecanismos como el escéptico en la esquina o la depuración por parejas. 0:03:52.640,0:03:57.200 Buscan la falsificación: no se limitan a preguntarse "¿Cómo voy a saber si esto es correcto?", 0:03:57.200,0:04:01.120 sino que también se preguntan "¿Cómo voy a saber si esto es incorrecto?" y "¿Cómo voy a saber si una 0:04:01.120,0:04:06.080 alternativa es correcta?". Y lo que es más importante, entienden que el código lo lee la gente, 0:04:06.080,0:04:14.160 y escriben comentarios sobre lo que no está en el código, es decir, sus intenciones y suposiciones. 0:04:14.160,0:04:18.960 Entender algo rompiéndolo es una forma de análisis habitual en muchas ramas 0:04:18.960,0:04:23.920 de la ingeniería: introducir errores o fallos deliberadamente puede ser una forma de obtener información sobre 0:04:23.920,0:04:29.600 el funcionamiento de un sistema. Las personas expertas tienen experiencia en hacer eso intencionadamente, para probar su sistema, 0:04:29.600,0:04:34.240 también ven las roturas inesperadas como una analítica potencial, y aprovechan la oportunidad para utilizarlas. 0:04:39.520,0:04:45.040 En lugar de eliminar los fallos lo antes posible, las personas expertas reflexionan sobre el problema 0:04:45.040,0:04:50.160 y el modelo de solución. Reconocen que un pequeño fallo puede ser una señal de algo más. 0:04:50.160,0:04:53.520 En lugar de descartar los fallos simples como errores de principiante o una de esas cosas, 0:04:54.080,0:04:56.560 miran a su alrededor para detectar si hay una historia más completa, 0:04:56.560,0:05:01.280 con lo que a menudo detectan otros problemas más profundos, como fallos de diseño o conceptos erróneos. 0:05:03.440,0:05:07.120 Así, las personas expertas no se limitan a arreglar el fallo -el único-, sino que se alejan 0:05:07.680,0:05:12.000 y buscan los demás fallos que lo acompañan. Tienen en cuenta las dependencias y reflexionan 0:05:12.000,0:05:16.400 sobre la estructura del código para comprender si el fallo forma parte de un panorama más amplio. 0:05:19.040,0:05:23.280 Y todo esto forma parte de la reevaluación del panorama y de la ampliación deliberada del espacio de búsqueda, 0:05:23.280,0:05:29.280 una forma de examinar las barreras, comprender las limitaciones, revelar las suposiciones, mirar más allá 0:05:29.280,0:05:34.160 de los problemas inmediatos y, por tanto, admitir potencialmente más soluciones potenciales o ampliar 0:05:34.160,0:05:39.520 la definición del problema de forma que proporcione una visión y supere los defectos. Y lo hacen 0:05:39.520,0:05:43.520 periódicamente a lo largo del proceso de diseño y desarrollo, no sólo al principio. 0:05:44.400,0:05:49.840 Ahora bien, esto está en desacuerdo con muchas metodologías de desarrollo de software que suelen preocuparse por la convergencia 0:05:49.840,0:05:55.280 hacia una solución. Y por eso, a veces, los equipos de alto rendimiento se alejan de una metodología. 0:05:55.920,0:05:59.680 Este asunto de tomar distancia y reflexionar sobre el panorama es crucial. 0:05:59.680,0:06:05.840 Todos conocemos ejemplos en los que el software cumplía las especificaciones, pero éstas eran inadecuadas. 0:06:08.240,0:06:13.760 Quienes desarrollan software no trabajan en un mundo ideal -lo sabemos-, sino en un entorno 0:06:13.760,0:06:19.360 dominado por demandas conflictivas y presiones de tiempo, por lo que los fallos se entienden en el contexto 0:06:19.360,0:06:25.760 del uso del software. El triaje eficaz tiene que ver con una evaluación de la relación coste-beneficio del impacto relativo del 0:06:25.760,0:06:31.680 fallo frente al coste de solucionarlo. Los fallos que no son importantes suelen tolerarse o aplazarse. 0:06:32.400,0:06:37.680 Brian Randall engloba esto en su concepto de fiabilidad. Su definición deja espacio 0:06:37.680,0:06:43.440 para las imperfecciones en el código si éstas no afectan a la fiabilidad del software. Por tanto, 0:06:43.440,0:06:49.280 la tolerancia consiste en gestionar el error técnicamente, pero también en gestionar el error socialmente: dejar 0:06:49.280,0:06:54.480 advertencias de compilación en el código como recordatorio, documentar el aplazamiento y su justificación. 0:06:57.440,0:07:02.240 Del mismo modo, se ha demostrado que los/as desarrolladores/as a veces hacen concesiones para que 0:07:02.240,0:07:07.680 el trabajo siga. avanzando. Sus estrategias pueden incluir opciones subóptimas deliberadas, calculadas para 0:07:07.680,0:07:14.240 servir a las necesidades inmediatas pero que permiten mejoras progresivas. El compromiso deliberado sugiere 0:07:14.240,0:07:18.880 que el/la desarrollador/a gestiona activamente el problema a lo largo del tiempo, aplicando soluciones pragmáticas 0:07:18.880,0:07:24.000 incrementales según sea necesario para avanzar en el programa de trabajo más amplio. Esta estrategia 0:07:24.000,0:07:29.840 permite al/la desarrollador/a explorar el problema a lo largo del tiempo y, en última instancia, encontrar la mejor solución. 0:07:32.480,0:07:37.600 Pero además de esto, las personas que programan tienen redes de seguridad, y una de ellas es la depuración por pares. 0:07:37.600,0:07:42.880 La depuración en pareja es algo que hacen la mayoría de los equipos de alto rendimiento y de lo que no se 0:07:42.880,0:07:48.880 habla mucho. Se sientan juntos y hablan a través del código, a menudo emparejando deliberadamente a personas de 0:07:48.880,0:07:52.800 niveles de experiencia teóricamente diferentes o que conocen diferentes partes del código base. 0:07:52.800,0:07:57.360 Esto aporta una nueva perspectiva al código, difunde el conocimiento del código entre el equipo 0:07:57.360,0:08:02.000 y tiende a exponer las suposiciones, los conceptos erróneos y los errores de comunicación. 0:08:04.240,0:08:07.760 Personas Expertas: las personas expertas reflexionan sobre sus herramientas y sobre su código. 0:08:09.200,0:08:13.200 ¿Cómo se puede verificar que una herramienta de análisis hace lo que debe hacer? Pues bien, los expertos 0:08:13.200,0:08:18.400 hacen jugar a los métodos entre sí para aumentar las probabilidades de detección: por ejemplo, incorporando 0:08:18.400,0:08:24.080 errores al código para probar el conjunto de pruebas. Los expertos abordan las limitaciones de las herramientas combinándolas o intercambiándolas 0:08:24.080,0:08:28.880 entre ellas; citando a un desarrollador, a menudo es una mezcla de diferentes formas de 0:08:28.880,0:08:33.760 pensar la que te da la respuesta. Por tanto, la multiplicidad de técnicas y herramientas implica más formas de pensar, 0:08:33.760,0:08:38.960 pero también requiere una mayor carga cognitiva, y eso exige una coordinación inteligente. 0:08:38.960,0:08:44.000 Así que la selección no es arbitraria: los equipos prueban herramientas, evalúan sus méritos y reúnen conjuntos de herramientas 0:08:44.000,0:08:50.960 que se ajustan a su cultura de desarrollo y abarcan diferentes perspectivas. En resumen, 0:08:50.960,0:08:56.320 los expertos utilizan prácticas disciplinarias sistemáticas que están socialmente arraigadas y reforzadas. 0:08:59.120,0:09:03.360 Y lo que es más importante, al existir una cultura disciplinada, son capaces 0:09:03.360,0:09:07.840 de confiar en el equipo para detectar los deslices, dando así a los individuos la libertad de experimentar. 0:09:08.480,0:09:12.000 Un estudio de los equipos de alto rendimiento deja claro que la interacción 0:09:12.000,0:09:18.640 entre los desarrolladores es crucial, ya que desempeña un papel fundamental tanto en el fomento de la creatividad y la innovación 0:09:18.640,0:09:24.240 como en la gestión eficaz de los errores y la incorporación de la práctica sistemática y el rigor. Así, la cultura de equipo 0:09:24.240,0:09:29.600 que aprovecha tanto los puntos fuertes individuales como las múltiples perspectivas proporciona la red de seguridad. 0:09:33.600,0:09:38.560 Este enfoque de los errores tiene una advertencia, y es que la atención se centra en solucionar el error 0:09:38.560,0:09:42.880 en lugar de solucionar la culpa. La cultura del equipo es importante: encarna la mentalidad 0:09:42.880,0:09:47.760 que ve el error como una oportunidad, que abraza múltiples perspectivas, que 0:09:47.760,0:09:52.720 refuerza prácticas como el triaje o el juego de métodos entre sí o la programación en parejas, 0:09:52.720,0:09:56.640 que desafía rutinariamente la comprensión y las suposiciones. Esto ayuda a fortalecer y desarrollar 0:09:56.640,0:10:00.480 el equipo, así como a mejorar el software. Pero, de manera diferente, 0:10:01.040,0:10:05.200 la experiencia en software no se produce por accidente. Hay... estas son prácticas que puedes 0:10:05.200,0:10:10.320 entender e invertir en ellas haciendo espacio en tu cultura organizacional invirtiendo 0:10:10.320,0:10:15.120 tiempo para esta mentalidad, este tipo de prácticas, estos diálogos, estás haciendo espacio para 0:10:15.120,0:10:20.720 que la experiencia funcione y crezca y para que el desarrollo de software a nivel experto sea posible. 0:10:20.720,0:10:31.840 Así que, tal vez, trata esto como una oportunidad para reflexionar sobre su práctica. Gracias por escuchar.