archivo

Archivo de la etiqueta: Sun Tzu

Partamos de la base y asi lo defiendo sistemáticamente en mis artículos de que todo proyecto de desarrollo de software es complicado (como es lógico se trata de una generalización), ya sea porque de partida es así (se han establecido condiciones iniciales que no se ajustan a la realidad del trabajo a realizar), porque la incertidumbre y riesgo que rodea al proyecto se materializa y porque este proceso de ingeniería es inherentemente complejo.

Ahora bien, dentro de ese ambiente de incertidumbre, riesgo y complejidad se pueden producir muchas casuísticas que definirán finalmente la dificultad que ha tenido la realización del proyecto.

Realizar diez proyectos consecutivos con éxito no es casualidad, ahora bien, eso no quiere decir que el aprendizaje obtenido en los mismos sea superior al que ha fracasado o no ha tenido tanto éxito en dos proyectos mucho más complejos. Tal vez en el futuro se tornen los papeles y sea ahí donde la experiencia adquirida marque la diferencia y el que ha fracasado triunfe.

Lo anterior requiere que se aprenda de los errores tanto de los propios cómo de los que no se han podido controlar, ya que de esta forma en el futuro se podrán prever más situaciones de riesgo y/o actuar de mejor forma contra ellos.

Sun Tzu, vuelve a dejarnos una reflexión muy interesante sobre esto: “Prever una victoria que un hombre ordinario puede prever, no es el espíritu de la excelencia. No importa si triunfas en la batalla y eres aclamado universalmente como “experto”, pues levantar una hoja caida no requiere tener gran fuerza, distinguir entre el día y la noche no es prueba de gran visión, oir un trueno no es muestra de oído agudo”.

No lo asegura. No lo puedes asegurar. Desde que empiezas hasta que terminas pueden pasar muchas cosas y un buen número de ellas, además, no dependerán de ti y no podrás controlarlas. Con una buena gestión del riesgo, con una metodología y esquemas de trabajo flexibles podrás solventar muchos problemas pero no podrás hacer milagros.

Nos pagan por desarrollar software, por ser profesionales, por intentar el mejor acabado posible de nuestros productos, pero no nos pagan para hacer imposibles.

Podemos tener mucha experiencia y conocimientos, conocer el negocio, conocer el cliente, ser muy metódicos en la aplicación de buenas prácticas y sin embargo no sacar adelante el proyecto.

Hay una cita de Sun Tzu que nos puede servir para reflexionar sobre este asunto, en ella habla de que puede depender de nosotros estar lo más preparados posible para conseguir el éxito en un proyecto (la victoria), ya que podemos conocer qué hace falta para alcanzarlo pero que, sin embargo, hay otros factores que no podemos controlar y que se pueden interponer entre el objetivo y nosotros: “La invencibilidad depende de uno mismo, pero la vulnerabilidad del enemigo depende de él. De esto se deduce que quien es experto en la guerra puede hacerse a si mismo invencible, pero no es seguro que sea capaz de hacer que el enemigo sea vulnerable. Dicho de otra forma: uno puede saber cómo vencer, pero esto no significa necesariamente que vaya a vencer”.

Para que un proyecto de desarrollo de software se lleve a cabo con éxito no hay recetas, solo una serie de buenas prácticas, condiciones de partida y contexto que disminuyen el riesgo de que salga mal, sin embargo la incertidumbre a la que están sometidos provoca que todo se pueda ir al traste si no se gestiona de manera adecuada los cambios que se producen o si estos son demasiado sensibles y constantes.

Sun Tzu, enumera cinco casos en los que puede predecirse la victoria, en cada uno de ellos se puede buscar una analogía con el desarrollo de software (teniendo en cuenta que no predicen el éxito, pero sí suponen una buena base para que las cosas salgan bien): “Hay cinco casos en los que puede predecirse la victoria:

1.- El que sabe cuando puede luchar y cuando no, saldrá victorioso.
2.- El que comprende cómo luchar, de acuerdo con las fuerzas del adversario, saldrá victorioso.
3.- Aquél cuyas filas estén unidas en un propósito, saldrá victorioso.
4.- El que está bien preparado y descansa a la espera de un enemigo que no esté bien preparado, saldrá victorioso.
5.- Aquel cuyos generales son capaces y no sufren interferencias por parte de su soberano, saldrá victorioso.”

Estas son las analogías:

1.- Estudio de la viabilidad del sistema / Gestión del riesgo.
2.- Conocer las características del sistema de información a desarrollar, del entorno tecnológico, del cliente, etc…
3.- Stakeholders implicados y con enfoque a un objetivo común que supera a otros objetivos individuales (o que por lo menos tienen el mismo peso).
4.- Establecer unas condiciones de partida adecuadas para realizar el proyecto: presupuesto, plazos, metodología, conocimiento y aceptación de la metodología y estrategia de desarrollo.
5.- Equipos de proyecto bien dirigidos y coordinados.

El ciclo de vida en cascada tiene como consecuencia que las primeras versiones utilizables del producto software se dilaten en exceso en el tiempo. El mismo problema lo podemos tener en enfoques iterativos e incrementales si se tarda en tener una primera versión operativa de algún módulo o componente del sistema (más allá de los esqueletos andantes).

Cuanto menos tiempo pase en que el usuario (o el cliente) empiecen a ver el resultado de los trabajos, mejor, ya que no pierden el enfoque en el proyecto. Cuanto menos tiempo pase en obtener su feedback, más pronto se podrá tener un producto acorde a sus expectativas.

Sun Tzu, pensaba algo parecido: “Una victoria rápida es el principal objetivo de la guerra. Si la victoria tarda en llegar, las armas pierden el filo y la moral decae. Si las tropas atacan ciudades, su fuerza se desgasta. Cuando un ejército se implica en una campaña prolongada, los recursos del estado disminuyen rápidamente”.

Una de las causas que puede dar lugar al fracaso en un proyecto de desarrollo de software consiste en no dedicar tiempo a hacer una evaluación o gestión inicial del riesgo. Afrontar un trabajo sin tener en cuenta ese factor te puede meter en un campo minado, cuando lo mismo se podía haber elegido otro camino o, por lo menos, si se adivinan los problemas que puede haber, tienes recursos para intentar salir con éxito del mismo.

Otra de las causas y sobre la que he escrito bastantes artículos, consiste en evitar no solo Death March Projects, que digamos que son la situación extrema, sino en establecer unas condiciones de partida que proporcionen un contexto a partir del cual un proyecto tenga posibilidades de ser ejecutado con éxito (presupuesto y plazos adecuados, stakeholders implicados de verdad, conocimiento y reconocimiento de la estrategia y/o metodología que se va a seguir para realizar el proyecto, etc…).

Una cita de Sun Tzu que complementa a otra de este mismo y sobre la que ya he tratado en el artículo: “Sun Tzu. El proyecto y las condiciones necesarias para la victoria“, es la siguiente: “Si las estimaciones realizadas antes de la batalla indican victoria, es porque los cálculos cuidadosamente realizados muestran que tus condiciones son más favorables que las condiciones del enemigo; si indican derrota, es porque muestran que las condiciones favorables para la batalla son menores. Con una evaluación cuidadosa, uno puede vencer; sin ella, no puede. Muchas menos oportunidades de victoria tendrá aquel que no realiza cálculos en absoluto”.

Los lectores que hayan tenido a bien aguantarme en los casi tres años que llevo en este blog habrán notado diversos cambios en mi forma de enfocar los proyectos, sus problemáticas, etc…, sin embargo hay algo que se mantiene constante en mi forma de trabajar y de entender el trabajo entre personas o equipos de trabajo. La confianza.

Una vez leí en un libro, no recuerdo tal, por eso no lo cito, que quién te la ha dado una vez es posible que se haya equivocado, pero quien te la da dos veces, posiblemente te la dará una tercera. Cuando la leí, no le di mucha importancia, pensaba que era otra más de esas citas grandilocuentes de las que gustan a los autores adornar sus obras. Sin embargo, haciendo una reflexión sobre la misma, haciendo un recorrido histórico y puesta en práctica posteriormente, no está muy lejos de la realidad.

Sun Tzu, consideraba que toda guerra se basa en el engaño. Sin embargo, si se quiere sacar un trabajo colaborativo hacia adelante, no se puede hacer en un ambiente de guerra.

Para que un proyecto vaya por un camino que lo pueda llevar a alcanzar sus objetivos (hablo de camino, de bases, porque lo único que se puede asegurar es que el contexto es el adecuado) es necesario que todas los stakeholders dirijan su atención y consideren un objetivo que alcance las expectativas puestas en él, pero para ello es fundamental que todos ellos tengan confianza en el resto.

Eso en un primer nivel, porque después dentro de cada equipo de trabajo se necesita también una relación de confianza y profesional entre sus integrantes. Un equipo sólido y unido es más fuerte, eso lo sabemos todos, aunque en la realidad lo olvidemos con demasiada frecuencia.

Son muchos años los que llevamos habitando este planeta. Muchas páginas la que tiene nuestra historia. Es cierto que cada día se descubren cosas nuevas, eso nos permite avanzar como civilización (aunque, a veces, no tengamos nada claro en qué dirección), pero también es verdad que otras muchas llevan inventadas muchos años.

Ya he ido comentando que para que un proyecto de desarrollo de software salga adelante, debe ser algo antagónico a una guerra, sin embargo, en términos de organización y estrategia, hay ciertas prácticas que sí que pueden ser comunes.

Al fin y al cabo, los proyectos son llevados a cabo por equipos de personas (un ejército), coordinados o dirigidos por un gestor (un comandante), que necesitan enfocar sus objetivos individuales a un objetivo más general, para lo cual es necesario establecer una cultura que permita a cada uno ver más allá de su ego (la política), unas reglas que automaticen comportamientos, que definan acciones, roles, en diversas situaciones (la doctrina) y tener en cuenta que las actividades se realizan en un contexto que puede variar de manera sensible a lo largo del tiempo (el clima y el terreno).

Así lo cuenta Sun Tzu: “La guerra es un asunto de importancia vital para el Estado; un asunto de vida o muerte, el camino hacia la supervivencia o la destrucción. Por lo tanto, es imperativo estudiarla profundamente.

Hay que valorarla en términos de cinco factores fundamentales, y hacer comparaciones entre diversas condiciones de los bandos antagonistas, de cara a determinar el resultado de la contienda.

El primero de estos factores es la política; el segundo, el clima; el tercero, el terreno; el cuerto, el comandante; y el quinto, la doctrina.

La política significa aquello que hace que el pueblo esté en armonía con su gobernante, de modo que le siga donde sea, sin temer por sus vidas ni a correr cualquier peligro. El clima significa la noche y el día, el frío y el calor, dias despejados o lluviosos, y el cambio de las estaciones. El terreno implica las distancias, y hace referencia a dónde es fácil o difícil desplazarse, y si es campo abierto o lugares estrechos, y esto influencia las posibilidades de supervivencia. El comandante ha de tener como cualidades: sabiduría, sinceridad, benevolencia, coraje y disciplina. Por último, la doctrina ha de ser comprendida como la organización del ejército, las graduaciones y rangos entre los oficiales, la regulación de las rutas de suministros, y la provisión de material militar al ejército.

Estos cinco factores fundamentales han de ser conocidos por cada general. Aquel que los domina, vence; aquel que no, sale derrotado”.