A medida que trabajamos para construir la mejor solución de ingeniería de software posible, nos encontramos con muchas decisiones que debemos tomar. A diario. A veces esto implica conversaciones muy activas y apasionadas, que a veces pueden tomar un camino negativo, creando un mal ambiente en el equipo. Además, es una gran pérdida de tiempo. Pero ¿qué pasaría si esas decisiones diarias pudieran ser mucho más fáciles y simples? En esta charla intentaré abordar y eliminar los puntos dolorosos de la toma de decisiones en la ingeniería de software y mostraré cómo ayudé a mi equipo a beneficiarse de un proceso de toma de decisiones más ligero.
La Teoría del Juego en la Toma de Decisiones de Software
Video Summary and Transcription
La charla de hoy trata sobre la Teoría del Juego de las Decisiones de Software, explorando cómo se puede aplicar la teoría del juego al desarrollo de software. El orador comparte consejos sobre cómo crear un ambiente de equipo productivo y una toma de decisiones efectiva. Enfatiza la importancia de dejar de lado las cosas no importantes y centrarse en lo que es mejor para el proyecto. La charla también aborda cómo manejar dilemas de codificación y toma de decisiones, sugiriendo estrategias como definir KPIs y consultar a un jurado neutral. El orador concluye enfatizando la importancia de mantenerse racional, presentar datos y mantener la profesionalidad en el desarrollo de software.
1. Introducción a la Teoría de Juegos de Decisiones de Software
La charla de hoy trata sobre la Teoría de Juegos de Decisiones de Software. Compartiré consejos sobre cómo crear un entorno de equipo productivo y tomar decisiones efectivas. Soy Siv Levy, DJ y paramédico de primeros auxilios. Sumergámonos en el mundo de la teoría de juegos y su aplicación en el desarrollo de software.
Hola, soy Siv. Gracias por unirse a mi charla hoy sobre la Teoría de Juegos de Decisiones de Software. Espero que puedan obtener algunos consejos sobre cómo crear un entorno de equipo más productivo mientras enfrentan los desafíos diarios de la toma de decisiones.
Un poco más sobre mí, soy Siv Levy. He estado trabajando en Wix durante los últimos cinco años y medio. También soy DJ, mezclo música oscura de los años 80 y techno. Pueden encontrar mis sets de DJ en vivo en YouTube, disfrútenlo. Y también soy voluntario como paramédico de primeros auxilios y ampliaré más sobre eso más adelante hoy. Para aquellos que no están familiarizados con Wix, Wix es una plataforma para construir sitios web para una variedad de tipos de usuarios, ya sea que sean desarrolladores avanzados o principiantes, Wix te ofrece excelentes funciones para tu negocio y presencia en línea. Así que soy parte del grupo de ingeniería de Wix. Es un grupo de ingenieros muy talentosos, pero también, como vemos aquí, muy diversos en muchos aspectos. Y saben, está bien porque después de todo, todos somos humanos. Dentro de mi trabajo en Wix, tuve la suerte de comenzar un nuevo producto de Wix. Lo he hecho varias veces y para diferentes tipos de usuarios, ya sean usuarios de la empresa o usuarios internos. Comenzar un nuevo producto desde cero es una gran aventura en realidad para cada desarrollador y conlleva muchos desafíos y también incertidumbre.
2. Introducción a la Teoría de Juegos
En estos momentos, las personas tienden a sentirse abrumadas y eso afecta directamente su juicio y su capacidad para tomar decisiones. Tomemos un momento y hablemos sobre la Teoría de Juegos uno a uno. La Teoría de Juegos es un campo matemático que trata de maximizar la ganancia o el beneficio en situaciones contradictorias entre dos o más factores, generalmente llamados agentes. Define una amplia gama de relaciones sociales y de comportamiento, así como la ciencia de la toma de decisiones lógicas en humanos, y también en animales y computadoras. Lo más importante que me gustaría que saquen de esta sesión es que no están en un juego de cero y uno.
En estos momentos, las personas tienden a sentirse abrumadas y eso afecta directamente su juicio y su capacidad para tomar decisiones. Tomemos un momento y hablemos sobre la Teoría de Juegos uno a uno. La Teoría de Juegos es un campo matemático que trata de maximizar la ganancia o el beneficio en situaciones contradictorias entre dos o más factores, generalmente llamados agentes. Define una amplia gama de relaciones sociales y de comportamiento, así como la ciencia de la toma de decisiones lógicas en humanos, y también en animales y computadoras. Lo más importante que me gustaría que saquen de esta sesión es que no están en un juego de cero y uno. Un juego de cero y uno es cuando uno gana y el otro pierde. Específicamente, hoy nos enfocaremos en el proceso de cómo tomar decisiones de manera efectiva y con suerte, con menos dolor involucrado. Todo esto me vino a la mente una vez que tuve una discusión con uno de mis colegas y esta discusión empeoró mientras más duraba y finalmente salimos de la habitación con muy malos sentimientos, mucha vergüenza y sin haber tomado ninguna decisión. Pensé para mí mismo, Dios mío, ¿cómo es posible que este tema tan poco importante necesite tanta atención? Quiero decir, es una total pérdida de tiempo. Algo debe
3. Making Decisions in Software Development
Además de programar, también soy paramédico. Cada semana tomo decisiones de vida o muerte. Utilizo las mismas habilidades y metodología de toma de decisiones en el campo médico y las aplico al desarrollo de software. La principal diferencia es que los sistemas basados en software están en constante cambio. En cualquier discusión, necesitamos saber cómo dejar de lado las cosas no importantes y enfocarnos en lo que es mejor. El ego a menudo nos lleva a perder tiempo y discutir sobre asuntos triviales como las tabulaciones versus los espacios.
4. Spaces vs Tabs Argument
Tus compañeros de cuarto tienen razón. Realmente odias los espacios. Tengo una ligera preferencia por las tabulaciones porque prefiero la precisión. Una vez que pasa por el compilador, es lo mismo, ¿verdad? No entiendo por qué alguien usaría espacios en lugar de tabulaciones. Las tabulaciones crean tamaños de archivo más pequeños. No creo que esto vaya a funcionar. No hay forma de que esté con alguien que use espacios en lugar de tabulaciones.
De acuerdo, uh, sabes qué, simplemente no creo que esto vaya a funcionar. Lo siento mucho. Quiero decir, ¿qué vamos a hacer, traer niños a este mundo con eso en sus cabezas? Eso no es realmente justo para ellos. Ni siquiera hemos dormido juntos. ¿Y sabes qué? Nunca va a suceder ahora. Porque no hay forma de que esté con alguien que use espacios en lugar de tabulaciones. Richard.
De acuerdo, sí, esto fue como una escena del gran programa The Silicon Valley. Entonces Richard aquí rompió con su novia por esta, ya sabes, antigua y estúpida discusión. Así que debes ser transparente con la otra parte, ¿de acuerdo? Tal vez incluso antes de comenzar a discutir el problema y definir si el problema es crítico o no. ¿Y por qué te duele tanto? ¿Por qué te importa tanto? De cualquier manera, intenta dejar tu ego afuera.
5. Handling Coding Dilemmas and Decision-making
Tomemos otro ejemplo, ¿de acuerdo? Estamos analizando dos formas de lograr la misma funcionalidad en el código. Los dilemas de codificación pueden llevar a discusiones apasionadas y conflictos en el equipo. Para reducir el drama, pregúntate si el problema es reversible y define KPIs para la toma de decisiones. Ten una estrategia de respaldo y establece un plazo para la toma de decisiones. Consulta a un jurado neutral si es necesario. La antigüedad no significa tomar todas las decisiones; significa ser un asesor del equipo.
Tomemos otro ejemplo, ¿de acuerdo? Veamos el siguiente código. Este código fue escrito hace solo unas semanas en mi equipo. Sí, mi equipo y yo no somos, ya sabes, inocentes. Y a veces tenemos los mismos problemas a pesar de que todos tenemos experiencia y llevamos trabajando juntos bastante tiempo. Pero aún así sucedió. Así que aquí estamos analizando dos formas de lograr la misma funcionalidad, que es llamar a una función, crear un elemento y obtener una nueva instancia de elemento como resultado. Mientras que la primera opción es llamar a la función y poner todos los parámetros uno tras otro, la segunda opción define una interfaz que tiene exactamente las mismas propiedades y el parámetro de solicitud dado para la función debe cumplir con esa interfaz. Ahora no tenemos tiempo para profundizar en cuál es mejor, así que no lo discutiré ahora. Pero probablemente estés familiarizado con este tipo de dilemas de codificación que a veces incluso surgen en un proceso de revisión de código. Y esos dilemas pueden llevar a una discusión apasionada que rápidamente se convierte en una pelea de equipo completa, ¿vale? Y eso es exactamente lo que sucedió en mi equipo hace unas semanas, y fue a través de Slack, ¿vale?, con más de 15 mensajes sobre este problema. Así que imagínate eso. Entonces, nuevamente, lo que quiero que saques de esta sesión es cómo detectar esos momentos y ya sea ganar el juego o evitarlo desde el principio. Lo que he encontrado que funciona para reducir el nivel de drama en torno a estos problemas es hacerme dos preguntas principales. Una es si esto es reversible, y la segunda es cuán rápido puedo darme cuenta de que cometí un error, ¿vale?, que tomé la decisión equivocada. Ahora, si el problema es reversible, ¿vale?, quiero decir, si la decisión que tomo e implemento en el código es reversible, entonces bien, problema resuelto, ¿vale?, no es necesario enfatizar una y otra vez esta misma discusión. Y si no es reversible, bueno, realmente dudo de eso porque no estoy familiarizado con casi ningún campo de software que no pueda cambiar el software mediante una actualización por aire o lo que sea. Lo segundo es definir un punto rápido, ¿vale? Necesitamos saber cuáles serán los KPI, qué nos indicará que tomamos una buena decisión, una decisión equivocada o también una buena decisión. Y también necesitamos tener una estrategia de retroceso. Significa que si consideramos dos o más enfoques y elegimos uno, y probablemente supongamos que podríamos querer cambiar a otro después, entonces necesitamos tener una estrategia de respaldo para que la transición sea, ya sabes, lo más fluida posible para los usuarios en caso de que se implemente la decisión y esté en producción. Otra lección que me gustaría compartir es que si el problema es crítico y no llegas a una decisión en 10, 20 minutos, tal vez un poco más tarde, pero, ya sabes, intenta limitar la discusión a un cierto plazo. Entonces, si no tomas una decisión dentro de este plazo, simplemente consulta al jurado. ¿Vale? Este jurado debería ser alguien con quien todos estén de acuerdo y aprecien sus conocimientos. Y por cierto, no debería ser el gerente o el líder del equipo o lo que sea. ¿Vale? No los pongas en esta incómoda situación donde tengan que elegir entre tú o alguien más del equipo. ¿Vale? No es su trabajo y es desagradable para todos. También quiero enfatizar algo sobre el nivel de antigüedad. Ser un senior en un equipo no significa que la decisión sea tuya para tomar.
6. Final Thoughts and Game Rules
Puedes proporcionar ideas basadas en tu experiencia real. Si no tienes experiencia con un problema específico, no eres mejor que el desarrollador más junior. En problemas no críticos, tenemos reuniones semanales para sugerencias del equipo. Sin ego, mantén la racionalidad, aporta datos, llama a un jurado. Mantén la profesionalidad y la mente abierta. Considera que estás en una primera cita en el trabajo. Sé educado y mantén la calma.