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.
This talk has been presented at TechLead Conference 2023, check out the latest edition of this Tech Conference.
FAQ
Siv Levy es un ingeniero que ha trabajado en Wix durante los últimos cinco años y medio. Además, es DJ mezclando música oscura de los años 80 y techno, y voluntario como paramédico de primeros auxilios.
Wix es una plataforma para construir sitios web que ofrece funciones para una variedad de usuarios, desde desarrolladores avanzados hasta principiantes, facilitando la creación de una presencia en línea efectiva para negocios.
Siv ha iniciado varios nuevos productos en Wix para diferentes tipos de usuarios, incluyendo usuarios de la empresa y usuarios internos, enfrentando desafíos y incertidumbres en el proceso.
Siv utiliza las habilidades y metodologías de toma de decisiones rápidas y críticas, adquiridas como paramédico, para mejorar los procesos de decisión en su campo de software, aplicando entrenamientos y protocolos similares.
La Teoría de Juegos es un campo matemático que estudia cómo maximizar la ganancia en situaciones de conflicto entre dos o más agentes. Siv la utiliza para mejorar el proceso de toma de decisiones en el desarrollo de software, enfocándose en no considerar las situaciones como juegos de suma cero.
Siv recomienda identificar si un problema es reversible y cuán rápido se puede detectar un error. Promueve la reducción de drama y ego en las discusiones, y sugiere consultar a un 'jurado' imparcial si no se alcanza una decisión en un tiempo razonable.
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
Short description:
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
Short description:
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
Short description:
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.
ser cambiado. No lo sé. Así que déjenme llevarlos a otro aspecto de mi vida. Además de programar, también soy paramédico. Me ofrezco como primer respondedor y estoy listo para ser despachado 24 horas a la semana a las 7 para cualquier incidente médico cerca de mí, según mi ubicación y disponibilidad, por supuesto. ¿Por qué les cuento esto? Porque cada semana tomo decisiones de vida o muerte. Literalmente. Y les diré algo sobre las lesiones traumáticas fatales. Realmente tienes solo unos segundos para tomar decisiones difíciles. Entonces, ¿cómo puedo tomar decisiones de vida y muerte en segundos o minutos? Y en cosas no importantes, ya saben, no importantes, me permito discutir una y otra vez y perder tanto tiempo. Ahora, sé lo que están pensando, ya saben, no es lo mismo. ¿Verdad? Pero, y probablemente tengan razón. Pero, ¿qué pasa si puedo usar las mismas habilidades y metodología de toma de decisiones en el campo médico y aplicarlas en el campo del software en el que trabajo? Veamos en qué se basan mis decisiones. Así que tengo mi entrenamiento y protocolos, ¿de acuerdo?, en cada campo. Siempre uso mi experiencia pasada, ¿de acuerdo? Cuanta más experiencia tenga, mejor. Y miro hacia adelante al objetivo principal. ¿Cuál es el objetivo principal que quiero lograr aquí? La principal diferencia entre los dos casos es el hecho de que los sistemas basados en software son virtuales, ¿de acuerdo? Por naturaleza, el requisito siempre está cambiando. Todo el tiempo. Y no es como cualquier otro producto que enviamos de la fábrica a la estantería y ya está. Así que la verdad desnuda aquí es que solo en retrospectiva sabes si tomaste una buena decisión o no. En cualquier otro campo de ingeniería, así como en la ciencia médica, el requisito es constante, mientras que en el software, está cambiando constantemente. ¿De acuerdo? Después de darme cuenta de estos principios, pasemos a la segunda fase. La segunda fase en una discusión es saber cómo dejar de lado las cosas estúpidas, ¿de acuerdo? Y sé que para algunas personas, algo estúpido puede ser lo más importante y viceversa, pero realmente estoy tratando de reducir el nivel de drama. Entonces, si la otra persona propone la mejor práctica A, y yo propongo la mejor práctica B, ¿entonces qué demonios importa? Ambos queremos lo mejor y eso es lo importante. Quiero decir, cualquier decisión que se tome es mucho mejor que perder tiempo y seguir discutiendo entre nosotros. De acuerdo. Sin embargo, tenemos esta pequeña cosa llamada ego. De acuerdo. Y este ego nos lleva a lugares tan bajos como las tabulaciones versus los espacios. Veamos algunos ejemplos en mi próxima diapositiva.
4. Spaces vs Tabs Argument
Short description:
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.
Vamos. Oh Dios mío. Tus compañeros de cuarto tienen razón. Realmente odias los espacios. No, no, no, no, no lo odio. No es un odio fuerte. La verdad es que tengo una ligera preferencia por las tabulaciones, pero eso es solo porque soy meticuloso y porque prefiero la precisión. Bueno, no quiero pelear aquí. Pero si realmente te importa la precisión, usa espacios, pero como sea. Una vez que pasa por el compilador, es lo mismo, ¿verdad? Sí, sí, técnicamente sí. Supongo que simplemente no entiendo por qué alguien usaría espacios en lugar de tabulaciones, si al final es lo mismo, bueno, ¿por qué no usar simplemente tabulaciones? Porque podría verse diferente en las computadoras de otras personas. Las tabulaciones crean tamaños de archivo más pequeños. De acuerdo. Dirijo una empresa de compresión. Créeme, he dedicado mi vida a minimizar los tamaños de archivo. Es lo que hago. No entiendo por qué alguien usaría espacios en lugar de tabulaciones. Quiero decir, ¿por qué no usar Vim en lugar de Emacs? Yo las uso en lugar de Emacs. Oh, Dios, ayúdanos.
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
Short description:
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
Short description:
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.
Y la decisión es tuya para tomar. ¿De acuerdo? Esto significa que eres el asesor del equipo. ¿De acuerdo? Puedes proporcionar más ideas basadas en tu experiencia real. Y si no tienes experiencia con un problema o tema específico, entonces no eres mejor que el desarrollador más junior en la sala. ¿De acuerdo? Por ejemplo, tengo más de diez años de experiencia y nunca he lidiado con la recolección de basura. Por lo tanto, no tengo aportes en este tipo de discusión sobre el rendimiento de la recolección de basura. Y en otros casos donde el problema no es tan crítico, como la calidad del código o las convenciones de código, organizamos una reunión semanal para que el equipo sugiera y discuta esos temas. A veces, esta reunión se convierte en una reunión de desahogo, una discusión sobre otros temas. Siempre tratamos de hacerla con algunas bebidas para que el ambiente sea agradable. Y, ya sabes, si nadie propone ningún tema, entonces la reunión se cancela para esta semana o para este mes. Realmente ayuda a coordinar las cosas. Estamos a punto de terminar esta sesión. Así que quiero finalizar cuáles son las reglas del juego aquí. Sé rápido. Adopta un proceso más rápido y sigue tu intuición. Recuerda que no estás en un juego de suma cero. ¿De acuerdo? Todos ganan aquí. Todas las propuestas son correctas de alguna manera, y solo necesitas entender cuáles son los compromisos. Y sin ego, ¿de acuerdo? Deja tu ego afuera. Los jugadores con ego nunca ganan. Y trata de mantener la racionalidad, ¿de acuerdo? Aporta un punto de vista racional, ¿de acuerdo? Sé técnico. Aporta los datos. Usa los datos para tus argumentos. Y llama a un jurado, ¿de acuerdo? Deja que alguien más decida. Siempre es mucho más fácil. Y mantén la profesionalidad, ¿de acuerdo? Recuerda que cuando discutes con... estás discutiendo sobre asuntos profesionales con algunos de tus colegas, debes mantener la profesionalidad, ¿de acuerdo? No te lo tomes personal con ellos. No les digas qué hacer, ¿de acuerdo? De manera autoritaria. No les digas qué pueden o no pueden hacer. Y, ya sabes, a veces las personas piensan fuera de tu caja. Y eso es simplemente porque no encaja en tu caja o no llegas al fondo de sus pensamientos. No significa que no sea una buena idea. Y la última regla general es considerar que estás en una primera cita, ¿de acuerdo? En una primera cita, dejas de lado las cosas no importantes, o de lo contrario no tendrás una segunda cita. Así que deberías hacer lo mismo aquí en el trabajo, ¿de acuerdo? Solo considérate en una primera cita. Sé un caballero. Sé educado, y mantén la calma. Eso es todo. Gracias. Soy Ziv Levy. Tengo mucho más para compartir. Estaré encantado de conocerte y charlar contigo. Siéntete libre de contactarme también en Twitter, underscore Ziv Levy. Gracias.
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
This Talk discusses scaling front-end applications through principles such as tearing down barriers, sharing code in a monorepo, and making it easy to delete code. It also emphasizes incremental migration, embracing lack of knowledge, and eliminating systematic complexity. The Talk highlights the use of automation in code migration and the importance of removing barriers to enable smoother code migration.
This Talk discusses the importance of refactoring in software development and engineering. It introduces a framework called the three pillars of refactoring: practices, inventory, and process. The Talk emphasizes the need for clear practices, understanding of technical debt, and a well-defined process for successful refactoring. It also highlights the importance of visibility, reward, and resilience in the refactoring process. The Talk concludes by discussing the role of ownership, management, and prioritization in managing technical debt and refactoring efforts.
Microfrontends are considered as a solution to the problems of exponential growth, code duplication, and unclear ownership in older applications. Transitioning from a monolith to microfrontends involves decoupling the system and exploring options like a modular monolith. Microfrontends enable independent deployments and runtime composition, but there is a discussion about the alternative of keeping an integrated application composed at runtime. Choosing a composition model and a router are crucial decisions in the technical plan. The Strangler pattern and the reverse Strangler pattern are used to gradually replace parts of the monolith with the new application.
The Talk discusses the importance of effective communication and collaboration in cross-cultural teams. It emphasizes the impact of culture on communication and performance evaluation. The speaker highlights the differences between low-context and high-context communication styles and the need to understand cultural nuances. It also explores the challenges of giving feedback in multicultural teams and suggests ways to improve communication and create a feedback culture. The influence of language on communication and the importance of transparency and honesty in feedback are also discussed.
This Talk covers advanced patterns for API management in large-scale React applications. It introduces the concept of an API layer to manage API requests in a more organized and maintainable way. The benefits of using an API layer include improved maintainability, scalability, flexibility, and code reusability. The Talk also explores how to handle API states and statuses in React, and provides examples of canceling requests with Axios and React Query. Additionally, it explains how to use the API layer with React Query for simplified API management.
Transicionar de un rol de contribuidor individual a una posición de liderazgo, especialmente en la industria tecnológica de ritmo acelerado, es enormemente desafiante. La mayoría de los nuevos líderes no reciben ningún tipo de capacitación en los primeros 10 años de sus nuevas responsabilidades.Nuestro completo masterclass está diseñado para ayudar a los nuevos y emergentes líderes tecnológicos a comprender sus nuevos roles y adquirir las habilidades para convertirse en líderes seguros, felices y efectivos.
Una Guía para Desarrolladores sobre Cómo Comunicar, Convencer y Colaborar Efectivamente con los Stakeholders Es una historia tan antigua como el tiempo: la colaboración entre desarrolladores y stakeholders de negocios ha sido durante mucho tiempo un desafío, con una falta de comunicación clara que a menudo deja a ambas partes frustradas. Los mejores desarrolladores pueden comprender profundamente las necesidades de sus contrapartes de negocios, comunicar efectivamente la estrategia técnica sin perder a la audiencia no técnica y convencer al negocio de tomar las decisiones correctas. Trabajando en una consultoría, he fallado y tenido éxito en arquitectar y “vender” visiones técnicas, aprendiendo muchas lecciones en el camino.Ya sea que trabajes en una empresa de productos, seas consultor/freelancer, o quieras aventurarte más allá de ser solo un desarrollador, la capacidad de convencer y comunicar claramente con los stakeholders puede diferenciarte en la industria tecnológica. Esto se vuelve aún más importante con el auge de GenAI y el mercado de desarrolladores cada vez más competitivo, ya que la resolución de problemas y la comunicación efectiva son clave para posicionarte.En esta masterclass, compartiré ejemplos del mundo real, tanto buenos como malos, y te guiaré a través de poner la teoría en práctica mediante dojos.
Integrarse a un nuevo proyecto puede ser difícil, sin importar tu experiencia y antecedentes. Pero puede ser especialmente desafiante para los nuevos desarrolladores recién salidos de la escuela o de un bootcamp de programación. Basándose en su experiencia personal como graduado de un bootcamp y consultor de JavaScript, esta charla discutirá consejos y estrategias para que los gerentes ayuden a los nuevos desarrolladores de sus equipos a familiarizarse con un código desconocido, para que puedan tener un impacto más rápido y efectivo.
Comments