Menos es más. Personas, problemas y herramientas

WP_20151225_001

Disclaimer: Este post no pretende ser divertido, ni entretener. Se trata de mis reflexiones más o menos estructuradas acerca de productos, gestión de proyectos, implantaciones de software, escalar procesos, mejorar organizaciones y en definitiva, cómo trabajar mejor.

Simplicidad

Cuantos más objetivos hay en un proyecto, más complicado es cumplirlos.

Cuantas más personas haya implicadas, más difícil es coordinarlas y más opiniones deben ser tenidas en cuenta.

Cuantos más largos son los periodos entre desarrollo y producción, menos feedback recibimos, menos útil resulta y por tanto más difícil es cumplir los objetivos del proyecto.

Cuanto mayor sea el presupuesto de un proyecto, mayor número de personas tendrán que implicarse en él y más objetivos necesitará para justificar su arranque.

Cuanto mayor sea el presupuesto gastado más difícil (políticamente) se hace cancelar un proyecto fallido o innecesario.

Con estas premisas, suposiciones o experiencia, podemos deducir que en los proyectos de software, menos es más, y por lo tanto tener claro estos consejos, best practices o máximas, para mejorar nuestros resultados:

  1. Focalízate en un único objetivo.
  2. Entrega un MVP lo antes posible al menor número de personas posible.
  3. Itera en base al feedback y amplía el alcance.
  4. Evita lastre, reduce la inercia: personas, presupuestos, objetivos, tiempo.

Variabilidad

Si puedes hacer algo siempre de la misma manera o buscando el mismo resultado, puedes llegar a perfeccionar tus procesos hasta el punto de acortar tiempo y coste cada vez que hagas lo mismo o busques el mismo resultado.

No importa lo complejo del proceso: siempre y cuando no varíe puedes automatizarlo, convertirlo en un hábito, en un acto reflejo. Eso significa que reducir la variabilidad conducirá a mejorar el resultado de tus procesos y por extensión de los proyectos que los requieran. También se deduce que la variabilidad afecta negativamente a los procesos y por extensión a los proyectos que los requieran.

Un proceso automático es un proceso optimizable (es repetible, medible, comparable y se puede cambiar) y uno que no necesita a nadie para realizarse por lo que además puede escalar (no importa si tienes que ejecutarlo 1 vez o 1 millón de veces). Si está completamente automatizado ni siquiera necesitas que nadie lo entienda por lo que tampoco requiere formación o esta es mínima.

Para reducir la variabilidad necesitas reducir opciones, simplificar: menos objetivos, menos personas, menos tiempo, menor coste, todo debe ser lo mínimo posible.

Para lidiar con la variabilidad restante, necesitas entender la naturaleza de esta, sus causas, y así tratar con esta en su origen, ya sea eliminándola, resolviéndola o minimizando su impacto.

Productos

Uno de los motivos por los que el software como producto dé en general mejores resultados que el software a medida (buy vs build) es que la variabilidad es menor. Se “estandariza” todo lo posible y el resto se deja fuera o se trata mediante integración, plug-ins, desarrollos, etc. Esto permite focalizarse en menos objetivos e implicar a menos gente.

Un producto de software resuelve un problema o conjunto de problemas bien definido mediante un número finito de funcionalidades que no puedes modificar a capricho y que siempre actúan de la misma forma (automatismos, estandarización). Esa limitación hace que escale mejor (por estandarización) y esté más optimizado que un desarrollo a medida (por ejemplo: se le hace más y mejor testeo).

Lo anterior deja de ser cierto cuando retorcemos un producto para adaptarlo a un problema para el que no está diseñado. Y pasa mucho, particularmente en productos complejos. Tampoco sucede en “productos” para un solo cliente, que se mire como se mire, son proyectos a medida.

Comprensión

Cuando al tratar de resolver un problema, o no tenemos éxito, o el problema reaparece, o se provoca una sucesión de efectos secundarios al “solucionarlo“, debemos darnos cuenta de que:

  1. No entendemos el problema.
  2. Hay más de un problema.

A partir de aquí tenemos dos opciones:

  1. Nos paramos a analizar los problemas.
  2. Lanzamos “soluciones” (tiempo y dinero de alguien) al problema hasta que estos desaparezcan.

La segunda opción puede no funcionar, o funcionar solo temporalmente o provocar una sucesión de problemas en cascada, así que voy a dar por hecho que continuamos por el camino de pararnos a pensar para entender el problema y elementos adicionales que no hayamos visto antes. Aquí corremos el riesgo de “parálisis por análisis” por lo que deberíamos intentar focalizarnos en objetivos que puedan producir feedback rápido.

Una vez entendido e identificado el problema y sus causas (variabilidad), deberíamos automatizarlo. Digo esto, porque la única forma de demostrar que hemos resuelto un problema es automatizarlo. De otro modo puede que solo hayamos resuelto un único caso particular de un problema. Esto no tiene nada de malo per se, pero no podemos escalar esa solución (aprovecharla en otros casos). También hay que intentar no retorcer los problemas para que nuestra solución sea válida, ni tratar de resolver todos los problemas posibles. Es complicado saber dónde parar para no generar burocracia y sobre-ingeniería.

Por todo esto, deduzco que tratar de resolver un problema (no un caso concreto) sin entender su naturaleza resultará en un fiasco, ya sea reconocido o envuelto en marketing. En el primer caso habremos aprendido algo, en el segundo solo habremos desperdiciado el tiempo y el dinero de un montón de gente.

Conclusiones

Si no entendemos el problema a resolver, tendremos que enfrentarnos a una gran variabilidad y por lo tanto emplearemos una gran cantidad de tiempo y recursos en algo que va a acabar mal, por lo que es mejor que vayamos preparando el marketing.

Esto aplica tanto a tratar de resolver nosotros el problema, como a comprar una herramienta o proceso que resuelva el problema. Este último caso es muy habitual y transcurre del siguiente modo:

  • Fulano tiene un conjunto de problemas que desconoce: X, Y, Z.
  • Mengano tiene un producto que resuelve un problema concreto X.
  • Fulano compra el producto de Mengano pero su conjunto de problemas no se resuelve.
  • A partir de aquí, pueden pasar dos cosas:
    1. Que Fulano se dé cuenta de que tiene problemas que desconocía y trate de aprender más sobre estos para resolverlos.
    2. Que se recurra al látigo, el marketing y cursos de formación para ñapear con el producto de Mengano hasta que la gente se canse o se acabe el dinero.

Si todo lo anterior es correcto, es posible que una forma de detectar cuándo no se entiende un problema en un proyecto de software sea observar lo siguiente (vago y subjetivo, pero identificable si se cuenta con experiencia):

  • Un numero amplio de objetivos.
  • Un número elevado de personas implicadas.
  • Feedback escaso y espaciado (implantación Big Bang).
  • Presupuesto elevado.

Mi última reflexión al hilo de todo esto es que me parece mucho más importante disponer de las personas adecuadas (con experiencia, buena actitud, cultura sana, curiosidad…) que cualquier tecnología. Quizá no sea una gran reflexión, pero creo que es importante recalcar de vez en cuando que la tecnología es la parte menos importante de cualquier proyecto o producto de software.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s