Ajedrez - antoniomartel.com

Archivos de Categoría: Blog

Programar sin ego (II): el equipo de 10 programadores

Hablábamos la semana pasada de cómo entregar tu trabajo para ser revisado, curado, y hasta vapuleado por tus compañeros de equipo, logran grandes piezas de código. Líneas de texto que formarán parte de módulos capaces de resistir casi una década sin generar errores.

Vuelvo esta semana a comentar sobre el concepto de egoless programming de Gerald Weinberg y otro de los ejemplos reales de su libro: el incorruptible equipo de 10 programadores en una empresa aeronáutica.

Se trataba de un equipo que rechazó mudarse cuando su empresa anterior cerró sus instalaciones en la zona para moverse a otro lugar del país. Aunque tenían buenas ofertas individuales, ellos decidieron irse solo con quién los contratase a los diez a la vez.

Fue una el departamento de desarrollo de una empresa de fuselajes de avión la que los contrató y allí continuaron trabajando un tiempo. Cuando el director de desarrollo de esta empresa se encontró en una conferencia con el antiguo mánager de este grupo, le preguntó extrañado: «¿De dónde sacaste a esta gente? ¿Tienes a más gente como ellos? ¿Cuál es su secreto?». Le explicó que siempre que necesitaba que algo se hiciese bien y a tiempo, solo tenía que encargárselo a uno de estos diez. Deben ser algún tipo de genios, exclamó.

Nada había de particular en ellos, le contó, una de ellas era una recién graduada en italiano, otro había enseñado matemáticas en un instituto, un tercero era un ingeniero profesional y otra más se graduó en empresariales, trabajando después como secretaria ejecutiva y contable.

No eran seres sobrenaturales, simplemente, cuando uno de ellos recibía un trabajo, los diez trabajaban sobre él y lo revisaban entre todos hasta dejarlo perfecto. Cuando trataron de explicarle sus métodos, su nuevo mánager entendió que solo uno o dos hacían todo el trabajo y protegían al resto, que quedaban escondidos detrás de los genios de verdad.

Este director no fue tan obtuso como para llegar a disolver este grupo, pero no supo ver la eficacia de estas técnicas, y mucho menos aplicarlas al resto de sus 300 programadores. Un tiempo después estos diez programadores se volvieron a mover, otra vez en bloque, a una empresa más comprensiva con sus métodos.

Apuesta por los pull request, el pair programming, collective ownership, peer reviews y por los tests por todo el equipo. Es una de esas inversiones a largo plazo que se verán recompensadas cuando poco a poco empiezas a salir del caos, las prisas y de las llamadas de clientes enfadados por un bug en producción.


Si quieres saber más sobre egoless programming, echa un vistazo a mi post de la semana anterior: Programación sin ego.


Referencias:

  • The Psychology of Computer Programming por Gerald Weinberg, Nueva York, Van Nostrand Reinhold, 1971.

Programar sin ego

Gerald Weinberg, en su libro The Psychology of Computer Programming, nos habla de la Egoless Programming o Programación sin ego. Se refiere con este término al hábito de no considerar el código que hacemos como solo «nuestro» y de nadie más, sino artefactos que pertenecen al equipo y que seguramente contienen errores y que pueden ser muy mejorables.

Es una disonancia cognitiva habitual la de no reconocer nuestros propios fallos, y considerar nuestros programas como verdaderas genialidades. Si alguien encuentra un bug, lo negaremos rotúndamente y echaremos la culpa al análisis que estaba mal hecho, al cliente que no nos dijo que lo quería así o que alguien «tocó» nuestro código.

Weinberg cuenta la historia de alguien llamado Bill al que, consciente de poder tener un mal día, pidió a su compañera Marilyn que revisara el importante trozo de código que acababa de escribir. Marilyn fue capaz de encontrar 17 bugs. Pero para ella esto no era suficiente, sabía que donde se habían encontrado 17 errores, seguramente podría encontrarse alguno más. Entregó una copia a otros compañeros, y entre todos, aún encontraron 3 errores más.

Este código estuvo en producción durante 9 años sin que ningún nuevo error fuese nunca encontrado. Bill, lejos de sentirse herido por las tremendas correcciones hechas a su software, contaba divertido la historia a todo el que la quería oir: le habían encontrado 17 errores en 13 líneas de código!!

Además, ahora no solo Bill sabía cómo funcionaba ese trozo de código, Marilyn y los otros compañeros entendían también de qué iba y cómo mejorarlo cuando las inevitables modificaciones llegasen. El equipo al completo estaba al tanto de esa librería, y además de ser una pieza limpia de errores, cualquiera podía integrarse con ella o ampliarla, si fuera necesario.

Por esto funcionan prácticas como las peer reviews, tests por otros miembros del equipo de desarrollo o el pair programming. Tendremos un código más caro, y lento en producirse, pero más fiable y seguro. Más económico a la larga. Menos estresante también: no será tan habitual las sesiones maratonianas un viernes hasta las 2 de la mañana intentando encontrar un bug o las llamadas de clientes por una caída en producción.


Referencias:

  • The Psychology of Computer Programming por Gerald Weinberg, Nueva York, Van Nostrand Reinhold, 1971.

Yo gano si tu pierdes

Solemos verlo así, como un juego de suma cero, pero en raras ocasiones lo es. Lo hacemos con casi todo en la vida, el dinero que ganamos, las amistades que tenemos o los méritos que recibimos o dejamos de recibir.

Pensamos que, si nosotros nos llevamos 100 en un acuerdo, pero por su colaboración con nosotros, nuestros partners se llevan 150, es que hemos salido perdiendo, hemos negociado mal o nos han engañado. Saldríamos mucho más contentos si nos hubiésemos llevado 80, pero nuestros partners solo 60.

No se trata de llevarte el trozo más grande de una tarta (dejando solo migajas para los demás). Se trata de que todos ganen en el acuerdo actual, para que sigan contando contigo en las tartas y contratos que vendrán. Ahora estamos cegados con el proyecto que tenemos delante y no podemos ver más allá de las cifras del trimestre y el balance anual, pero después de este negocio, vendrán otros y luego otros más. Queremos participar en todos, aunque no sea con el trozo de tarta más grande, ¿no?

Intenta hacer la tarta más grande para todos. Busca acuerdos, sinergias y ventajas en la colaboración. Preocúpate de ganar tú, pero piensa también en lo que ganarán los otros. Intenta que ganen lo más posible. Con una buena disposición, serás el primero en llamar cuando haya otro negocio a la vista.

Lo mismo sucede con los clientes, haz que ganen mucho contratándote. Entrégales un gran producto y no racanees en exceso con lo que te piden. Recuerda que si ellos ganan mucho con el acuerdo, tú también lo harás. Si tú pierdes 20 haciendo ese esfuerzo extra, pero ellos ganan 100, tú también terminarás ganando.

El teléfono no parará de sonar cuando hayas acabado el contrato. Serás el primero que tendrán en cuenta cuando quieran buscar a un proveedor de nuevo. Se crean más contratos, y se abren oportunidades que de otra manera irán hacia otro lado o no se crearán. Nadie decide dedicar dinero porque solo augura problemas, discusiones o chapuzas en el trabajo. Ten siempre presente que después de este proyecto deben haber más, este no es el último que vas a hacer.

Tampoco son un juego de suma cero los elogios en el trabajo o el reparto de méritos. Si premian a un compañero de tu equipo por su gran trabajo, también ganas tú. Si tu equipo ha hecho una labor estupenda, pero nadie te menciona, sigues ganando aún más. Los elogios y las buenas consideraciones, si son sinceras, no se gastan, no se pierden, solo se multiplican. Solo pueden sumar.


Referencias:

  • Curso de Coursera Successful Negotiation: Essential Strategies and Skills de George Siedel.

De nuevo en Kindle Flash

Amazon ha escogido de nuevo uno de mis libros en formato electrócnico para su promoción Kindle Flash. El próximo martes, 30/6, el libro Gestión práctica de proyectos con Scrum va a ser enviado en una newsletter, junto a otros 3 o 4 libros en español, a todos los usuarios de Amazon suscritos.

Estés suscrito o no, el libro estará solo durante las 24 horas del martes con un 70 u 80% de descuento. Anímate a comprarlo, normalmente no participan ahí libros de gestión, software o informática.

Y si lo compras, no lo dejes luego entre tu lista de lecturas pendientes, léelo cuando tengas un rato. Son solo unas 120 páginas que se leen casi del tirón y que seguramente encontrarás muy entretenido.

Te dejo en la imagen un enlace a Amazon España, pero puedes encontrarlo también en Amazon México y Amazon.com (aunque solo participará en la versión española de Kindle Flash).

antoniomartel.com

Empezar por lo más fácil significa acabar por lo más difícil

Lo hacíamos desde nuestra época de estudiantes. Teníamos un montón de cosas por repasar y deberes por hacer. Desde Dibujo a Matemáticas, pasando por Lengua o Sociales. Desde luego no empezábamos por los complejos ejercicios de Química que siempre nos resultaban tan difíciles. Cogíamos primero los sencillos problemas de la clase de Ética que siempre aprobábamos con nota.

Esto tenía un claro inconveniente: las horas pasaban muy rápido y con alegría dedicadas a hacer muy bien lo que nos gustaba y resultaba fácil, pero pronto se nos hacían las 9 de la noche. Ese era el momento de comenzar, ya sin fuerzas ni capacidad de concentración, con las páginas de la 298 a la 315 del libro de ejercicios de Matemáticas.

Procrastinábamos como hacemos ahora en el trabajo. Nos engañamos manteniéndonos ocupados haciendo las tareas más sencillas y de recompensa fácil. Pensamos que, de esa manera, nadie puede decirnos nada, estamos trabajando mucho.

Vamos postergando las tareas ingratas y con alta incertidumbre. Las sencillas las tenemos resueltas muy pronto. Que hay 10 pequeños errores que corregir, no hay problema, para mañana estarán resueltos todos. Que hay que lidiar con ese complejo problema que ya nos tuvo 3 días atascados con poco avance, quizás mejor la semana o el mes que viene, cuando tenga tiempo suficiente. El caso es que ese momento nunca llega y el cliente comienza a desesperar sin una resolución a su caso.

Si se trata de un proyecto en el que estamos trabajando, tardamos en abrir el melón de los asuntos serios, los que necesitan de análisis y revisión cuidadosos. Para el resto no hay problemas, comenzamos rápidos con ellos. Así entrenemos nuestro tiempo y nuestra conciencia. Después de todo estamos trabajando duro en el proyecto y sin tiempo que perder.

Para cuando ya no haya más remedio que atajar los problemas graves o las tareas complejas, ya se habrá consumido casi todo el tiempo del proyecto. Le habremos dicho además al manager que está finalizado al 90%. Al fin y al cabo, todas las tareas están resueltas (excepto esas dos o tres que estamos siempre evitando)

¿Y si vemos que en esas labores con alta incertidumbre había problemas escondidos? ¿Y si no podemos resolverlos? ¿Qué hacemos ahora con el presupuesto y el tiempo del proyecto consumidos?

Ataca los problemas desde el inicio. Nos producirá rechazo y nuestra mente tenderá a evitarlos. Tendremos que dar malas noticias y comunicar que nos enfrentamos a problemas. Tendremos que decir que solo llevamos un 10% del proyecto completado, cuando ya hace meses que comenzamos. Siempre será mejor esto que autoengañarnos, con avances irreales, comunicar un optimismo infundado, o lo que es peor, fracasar del todo.


Si te gustaron estos contenidos, probablemente te gusten también los de mi último libro con Anaya: Gestión de proyectos – Agilidad en la práctica. Puedes encontrarlo en Amazon, la Casa del Libro, la FNAC o en las librerías cerca de tu casa.

This image has an empty alt attribute; its file name is unnamed1-1.png
Libro Gestión de proyectos: Agilidad en la práctica de la colección Manuales Imprescindibles de Anaya Multimedia

Referencias:

  • Quality Software Management: Systems Thinking de Gerald Weinberg.

Suscríbete