lunes, 2 de febrero de 2009

NNPP’s (net negative producing programmers).

torpe José M. Aguilar publica en Variable not found un muy buen resumen sobre NNPP’s (un término que hacía mucho que no escuchaba), con buenas referencias si es que queremos meternos más en el tema (y comentarios elogiosos hacia aquí, que agradezco).

Para detalles los refiero a ese post. Digamos, simplemente para poder seguir, que los NNPP’s son aquellos integrantes del equipo que rompen más de lo que construyen. Por ende su aporte al proyecto es negativo y de ahí el término.

Ah, por cierto que José hace justa referencia al nombre de este blog (los NNPP’s des-desarrollan software, van para atrás). Surgió en una etapa de odio en esta extraña relación que tengo con mi trabajo. Me sentía embroncado, muchas cosas parecían hacernos retroceder… sentía que estábamos involucionando… des-desarrollando. El primer objetivo del blog fue básicamente mi desahogo personal. Por suerte pasó y es por eso que “humor” es una de las principales etiquetas, en vez de “errores”, “fracasos”, “odio a todo lo que me rodea” o algo por el estilo.

Volviendo a los NNPP’s, me gustaría centrarme en aquellos que son programadores, y sobre todo en su relación con el equipo.

A muchos programadores les gusta pensar que hay que ser especialmente “inteligente” para programar y no dudan en tildar a un NNPP como “tonto”, tal vez para desentenderse del problema.

Ser especialmente inteligente ayuda a programar (lo mismo que a ser médico, maestro, plomero o arquitecto). Pero -y que me perdonen mis compañeros programadores- yo no conozco a ninguno especialmente inteligente (ni especialmente tonto). Conozco a programadores más o menos apasionados y con más o menos experiencia acumulada (viejos, bah). Lo esencial entonces, como para todo, es el esfuerzo. Y el esfuerzo viene de la mano de la pasión, del gusto por lo que se hace.

Si una persona es un poco lenta de entendederas eso implicará más tiempo y esfuerzo para tomar carrera, nada más. Si le encanta programar ese esfuerzo es un placer en sí mismo y las dificultades, lejos de desmotivar, entusiasman cada vez más. Cada pequeño avance invita al ir por el siguiente desafío.

Pero si esa persona no tiene vocación irá siempre cuesta arriba independientemente de su nivel de inteligencia. Y ese es un esfuerzo constante y penoso que no puede sostenerse por toda una vida. En algún momento estas personas o cambian de profesión o… bajan los brazos. Cuando pienso en NNPP’s pienso más bien en personas estancadas, desencantadas, impermeables -por falta de interés- a la experiencia y a las oportunidades de aprendizaje.

Un principiante puede tener una productividad negativa si miramos sólo el resultado en código. Pero si progresa e incluimos eso en la ecuación veremos que el balance resulta positivo. ¿O no repetimos hasta el hartazgo que para aprender hay que equivocarse? Esos errores tienen consecuencias –retrasan el proyecto por más que no lleguen al producto final- y al principio uno se equivoca mucho.

Así que veo en el origen del NNPP una serie de razones más bien de índole personal. Pero si prestamos atención a los resultados citados por Schulmeyer y que desarrolla José:

A fairly recent study of 250 heterogenous subjects examined four of the most frequently named causes of poor performance: lack
of job satisfaction, lack of identification with and involvement in the organization for which the programmer works, little
belief that professional behavior will result in reward, and the programmer's own lack of a sense of professionalism.

Involucran a la organización en la que el NNPP sobrevive más que a la persona misma. En vez de ir hacia la organización, yo quiero pensar en un mundo más pequeño: el equipo cercano al NNPP.

Más o menos motivados, los programadores sienten cierto aprecio por el resultado de su trabajo. De alguna manera han resuelto un problema, necesariamente con alguna dosis de ingenio y han hecho que algo funcione.

Imagínense admirando la prolijidad del resultado luego de haber pintado una larga pared. Viene un amigo y nos dice “mira, te quedó un espacio en blanco”, agarra una lata de pintura y la arroja con fuerza cubriendo el espacio en blanco, el piso, a nosotros…

No hace ninguna gracia que venga alguno y para corregir un pequeño detalle deje todo hecho un desastre. Y si encima lejos de corregir rompe…

Un equipo más o menos motivado tenderá a aislar si no a la persona por lo menos a su trabajo del resto de “su obra”. Esto neutraliza el efecto negativo del NNPP, lo ubica en un lugar donde, aunque a regañadientes, aporte algo y rompa poco. Es lo mismo que el equipo haría con un programador junior, pero ad eternum.

¿Entonces cómo es que el programador se vuelve un NNPP? Porque al resto del equipo tampoco le importa lo que suceda con el proyecto. Tal vez hacen mejor su trabajo, pero no se preocupan si otro viene y lo rompe. Al fin y al cabo ellos cumplieron ¿no?

Y es aquí donde entran las cuestiones organizacionales. Si tenemos un equipo en donde cada uno se preocupa solamente por su trabajo y no por el resultado global, donde nadie tiene demasiado aprecio por el producto que está creando o interés en el éxito del proyecto, permite el surgimiento del NNPP.

Para resumir: hay muchos NNPP’s en potencia dando vueltas por ahí, pero pero es la organización la que, usualmente con “políticas restrictivas, estresantes, opacas y poco motivadoras para su personal” los hace florecer.

6 comentarios:

José M. Aguilar dijo...

Hola, Andrés.

Gracias por tus reflexiones sobre los NNPP, en mi opinión muy acertadas.

Por cierto, el término "des-desarrollar" es realmente certero para estos casos. Gracias por permitirme utilizarlo :-)

Un saludo.
JMA.

lboisset dijo...

Algo he comentado en el blog de José M. pero veo que tú te centras más en la persona y luego en la organización y ahí quiero yo tocar ¿Cómo que junior? ¿Cómo que lentos? Un NNPP puede ser un gran experto que por su actitud, como mencionas, decide no cooperar.

Pero además existe el que si que está cooperando pero a su rollo. Me refiero al al experto que no "encaja" en el equipo, que sigue sus normas, por ejemplo todos usando C++ y STL y el colega con struct's en c puro.

Me refiero al caso del "líder" que resuelve ese problema de plazos de entrega y que luego le deja a todos el "marrón" de 2 añitos arreglando todo lo que quedó pillado con pinzas.

El valor neto a la fecha de entrega parece extremadamente positivo pero 2 años después ya no ¿verdad?

Probablemente, como también mencionas, este sea un problema de la organización que juntó al equipo o requirió ese "modelo" de desarrollo.

A alguien le suena la situación de esa estrella del equipo que se va (no, no hablo de futbol) y todos están acojonados, "no se puede ir, le necesitamos, es el mejor" Y durante los siguientes meses todos los defectos que salen son culpa suya. Quitar el 30% de excusa fácil.

En resumen, creo que como ambos decís NNPP están aquí pero no son sólo los que lo parecen, pueden ser ese compañero que el mes pasado si que era efectivo en el otro proyecto y ahora no está "enchufado".

¿no?

AcP dijo...

@Iboisset: Yo no catalogaría de NNPP a un experto (aunque se podría, creo que fuerza un poco el término). Si un NNPP fuera experto, sería antes un saboteador que un NNPP.

Esto es porque el ser experto en un lenguaje -en cualquier lenguaje-, implica que entiendes cómo funciona el desarrollo de software (si no no eres experto, eso lo define), por lo que sería imposible que tenga una producción negativa en cualquier proyecto.

Así, si eres experto en C y en bajo nivel, tal vez no puedas aportar mucho -al principio- si estamos haciendo un ERP en Visual Basic... pero seguramente estarás por encima del 0 de productividad. O por lo menos no harás nada y no romperás nada, simplemente indicarás que no sabes -todavía- cómo cumplir con los requerimientos.

Ser un NNPP es más que no cooperar o no poder o querer aportar. Es romper, deshacer. Si alguien piensa que un NNPP lo hace a propósito eso lo transforma en saboteador y no queda otra que el despido justificado, porque la confianza no se recupera de algo así.

El que coopera "pero a su rollo" también estará por encima del 0. Tal vez su código no sea el mejor, tal vez luego haya que tirarlo a la basura. Pero si es eficaz al menos habrá ayudado a superar una coyuntura, por lo que yo lo ubicaría "sobre el 0".

Lo mismo aplicaría al líder de tu ejemplo. Si supera la coyuntura, bueno, será "0.1". Cierto es que hay formas y formas de dejar las cosas y el aporte durará más o menos en el tiempo. No lo defiendo, simplemente no lo calificaría de "netamente negativo".

Por eso se asocia el término NNPP a un problema de falta de metodología o de experiencia ("junior" o "lento de entendederas"), a la que se le suma la incapacidad (que es realmente desinterés) de mejora o aprendizaje.

lboisset dijo...

Ya me suponía que quizá me salía del contexto.

Si quiero aclarar que no me refiero a un saboteador sino al caso de que un miembro del equipo no por inexperto sino por problemas de integración o cooperación realiza un trabajo que "localmente" en el espacio y en el tiempo es positivo pero en el contexto global del proyecto y a lo largo de la vida del producto puede acabar restando caso todo lo aportado.

AcP dijo...

El caso que mencionas es, por lo menos en mi experiencia, muy común.

Integrar a un programador a un equipo es un esfuerzo que debe ser consciente y aceptado por las tres partes: el programador, el resto del equipo y el que distribuye las tareas.

He visto cómo programadores (buenos programadores) quedan estancados en un proyecto sin que puedan ser "rescatados" por el equipo, ya que siempre por presiones de tiempo terminan asignado a la misma piedra "porque es el que más la conoce y el que terminará más rápido".

Así, si no se acepta cierto sobretiempo para que "la piedra" sea distribuida más equitativamente entre otros miembros (que necesariamente trabajarán más lento) es imposible.

¿Fin de la historia? Aburrido de promesas de cambio el programador se va, y la piedra termina distribuida a la fuerza entre los demás, porque no queda otra. Es decir que al final la cosa se distribuye pero nos quedamos sin (buen) programador.

AcP dijo...

Ahora que releo digo... ¿qué tiene que ver todo esto con lo que comentabas? Me he ido irremediablemente por las ramas...

Bueno, el "trabajo locamente realizado" es lo que llamo "la piedra" y... y... mejor me voy a dormir. Creo que esto último podría dar para un post aparte. Veremos.

¡Gracias por los comentarios!