Desarrollo Ágil: Preámbulo

Oct 01, 2008 @ 03:47 pm by CaDs

Ágil es una palabra de moda en el mundo del desarrollo de software si bien, esta metodología como tal, no viene diciendo nada nuevo.

Varios evangelistas y gurús se han alzado como portadores de esta “nueva” manera de construir software y diversas técnicas han surgido al rededor de este movimiento (con certificaciones y todo), afirmando ser la solución para todos los males.
En mi humilde opinión todo esto es (o debiera ser) mucho más simple.

Este es el primero de una serie de posts que voy a escribir a cerca de cómo entiendo la metodología ágil para el desarrollo de software.

Quiero dejar claro que no me considero ningún evangelista, ni ningún gurú, pero considero que puede resultar interesante y que cojones, me gusta hablar del tema ;)

Todo este buzz de desarrollo ágil viene inspirado por este manifiesto:

  • Valorar más a los individuos y su interacción que a los procesos y las herramientas
  • Valorar más el software que funciona que la documentación exhaustiva
  • Valorar más la colaboración con el cliente que la negociación contractual
  • Valorar más la respuesta al cambio que el seguimiento de un plan

Lo cual fue tan revolucionario porque se da de lleno con las prácticas habituales en el desarrollo de software.

Recuerdo poco antes de salir de la universidad, cuando comencé a hacer prácticas para sacarme de encima esos créditos de libre configuración, que me llevé un severo desencanto en lo referente a mi futura profesión.
No había nada de planificación, todo se hacía deprisa y corriendo. A nosotros los becarios nos dejaban a nuestro libre albedrío, con poco más que un manual de actuación, unas pocas charlas sobre lo que necesitaban y una máquina para trabajar.
Ah!, y todo tenía que estar listo en 2 semanas.
No importaba como, no importaba la calidad y sobre todo no importaban las personas. Si te tenías que quedar haciendo horas extra (siendo becário!!!) pues te quedabas y punto.

A lo que voy es que generalmente, las llamadas “Empresas de Consultoría de Software”, en la mayoría de los casos no entendían el Software. Eran expertos en hacer dinero con el software (habitualmente subcontratando personal) dando lugar al llamado “Mercado de Carne“, en donde no importa lo que hagas, ni si estás bien o no. Lo único que importa es la diferencia entre:

a) El dinero en el que podamos venderte
y
b) El dinero que te damos a ti.

Si a - b es lo suficientemente lucrativo, entonces te contrataban. Si no entonces es que no habías pasado las pruebas psicotécnicas y demás…

Podría contar mil historias relacionadas con el mercado de carne madrileño, pero no viene al cuento.

Lo importante es que la llamada “revolución ágil” hacía una llamada al cambio.

Las personas son más importantes que los procesos y las herramientas.

Hazle entender esto a cualquier jefe de proyecto de la consultora Fulanez…

Ágil significa que un equipo de desarrollo de software, es el principal activo y como tal, las personas que conforman dicho equipo son lo primero. Todo lo demás viene a consecuencia de dichas personas. Y eso creo que nunca será suficientemente matizado:

Los programadores programan!

Si tu compañía vende “código”, ya sea en forma de servicios o de productos o de lo que sea… cuida de la gente que genera ese código.
Tiene sentido no?

Como ya escribí anteriormente, es difícil enseñarle trucos nuevos a un perro viejo, y es que como se suele decir “bad habits die hard”

En grandes compañías de software hay toda una serie de jerarquías, estándares y procedimientos establecidos que, en mi opinión, sólo sirven para mantener las cosas a raya.

Si nos abstraemos un poco y nos enfocamos en lo que es la estructura a nivel de corporación, es difícil percibir la diferencia entre una compañía que genera sofware y otra que vende lavadoras.
Y esto no sería grave si el software fuera como una lavadora, pero afortunadamente no lo es.

Según lo veo yo, el software es algo vivo. Algo que uno crea pero que, llegado el momento, cobra vida propia y comienza a demandar cosas en las que jamás habríamos pensado inicialmente. Y lo genial del Software es que podemos proveer soporte para esas necesidades de manera relativamente sencilla!
Una lavadora podrá tener más o menos programas, pero no dejará de ser una lavadora.

Esta diferencia fundamental radica que el software es, por así decirlo, un “producto” que reside más en el plano de las ideas, que en el plano físico, y tratar de controlar este tipo de productos usando viejas metodologías bien conocidas en otras industrias, en mi humilde opinión es un craso error.

Os diré qué es el infierno para mi:

  • Programar algo usando especificaciones escritas en piedra.
  • No poder mostrar tu trabajo al cliente a medida que lo desarrollas para saber si es eso lo que quiere.
  • Después de haber trabajado en algo durante meses, que el jefe de turno me diga que hay que tomar otra alternativa.
  • No poder avanzar en un proyecto porque “los jefes y el cliente” se encuentran discutiendo re-negociando los términos del contrato.
  • No poder programar algo chulo y que sé que le va a proporcionar valor agregado al cliente, porque no se encuentra en el documento de especificación.
  • Asistir a aburridas reuniones en las que los “los jefes y el cliente” se la pasan discutiendo quién tiene la culpa del retraso en el proyecto.
  • Que el manager de turno nos diga que tenemos que trabajar más horas porque “vamos” con retraso.
  • Tener que llevar traje y corbata al trabajo :)

Si alguno de vosotros ha trabajado en un proyecto de este estilo seguro que entiende a lo que me refiero, los que no… no importa como trate de explicarlo, nunca podré llegar a expresar con palabras el estrés y sobre todo la frustración que eso genera.

Por qué uso una metodología ágil?

  • Puedo participar en el diseño de manera directa, dando mi opinión y modelando las tareas que van a terminar dando forma al proyecto.
  • No más Proveedores vs Clientes. Prefiero Proveedores + Clientes, mucho mejor.
  • Puedo enseñar periódicamente lo que estoy haciendo al cliente, de manera que él puede decidir si vamos por el buen camino o no, y sobre todo, puede inspirarse y darse cuenta de lo que realmente quiere.
  • Si la cosa no funciona, si hemos escogido un camino que resulta no ser el bueno, es mejor caer cuanto antes (el principio “fail fast”). Si lo que estoy haciendo no es lo que el cliente quiere, prefiero haber gastado una semana a varios meses de trabajo.
  • Prefiero pactar un número de iteraciones con el cliente, que un contrato escrito en piedra y lleno de cláusulas. Si mi trabajo gusta a mi cliente, y si ve el avance en el proyecto, acordamos más iteraciones. Si no, es mejor buscar otro proyecto u otro cliente, que establecer una relación de “te odio pero te necesito”.
  • Puedo colaborar con un cliente ofreciéndole ideas y opciones en las que él no había pensado y enseñárselas en un pequeño demo. Si le sirve y si le gusta, podemos pasar esas ideas a la lista de cosas que hacer en sucesivas iteraciones.
  • Mi cliente puede usar su producto, aquello por lo que está pagando, desde el primer momento! Y creo que esto, desde el punto de vista de alguien que está invirtiendo un montón de dinero en algo es fundamental.
    Ofrecer la posibilidad de “jugar” con el producto a mi cliente desde el final de la primera iteración y desde ese momento recibir su feedback, es algo impagable.

El desarrollo ágil ofrece diversas técnicas para llevar a cabo estas y muchas otras prácticas, generando unos resultados bastante menos estresantes, menos frustrantes y sobre todo más divertidos y con el tiempo iré contándoos las que yo uso para trabajar.

3 Comentarios »

  1. Vale, pero una pregunta :

    Llegas a un cliente que no te conoce (tal vez alguien le ha dado referencias tuyas, le has conocido tomando cervezas, o le has echado morro y te has plantado en su puerta) y te plantea una necesidad que tu te crees poder proporcionar….
    cómo le haces la oferta económica ? le vas a decir que ya ireis viendo semana a semana cuánto le cobras ? cómo se va a embarcar en un proyecto sin saber cuanto tiene que aprovisionar ?
    Obviamente tiene que haber una relación contractual donde se delimiten todas estas cosas.
    Agil me parece una buena metodologia para proyectos internos pero no te puedes basar solo en ella para ir a un cliente a desarrollar algo personalizado.

    IMHO creo que el método Agil confunde al técnico haciendole creer que puede substituir a un jefe de proyecto sólo porque vas a hacer entregas por iteracciones. Creo que lo que suele faltar en todos estos proyectos es un buen jefe de proyecto con método y experiencia. Me atrevo a recomendarte (si no lo has hecho ya) que le eches un ojo por ejemplo a PRINCE2

    La diferencia con la lavadora es que ya es un producto acabado con una funcionalidad especifica donde hay muchos modelos. Si tu software es de este estilo (instalar y usar) no hay diferencia, pero si como planteas me vas a hacer una lavadora a mi gusto pues yo creo que no se puede comparar.

    A mi siempre me ha gustado mas la comparacion con construir un edificio : un edificio siempre es un proyecto único, aunque sea copiar el de al lado. Porqué un edificio sí se construye en un año y un maldito programa no termina nunca ?

    Un saludo.

    p.d.
    ahora eso sí, lo que cuentas del mercado madrileño es que lo has clavado.

    Comentario por jorge — Octubre 3, 2008 @ 3:13 am

  2. Debo decir que me alegra ese comentario, es interesante cuando alguien comenta algo con buenos argumentos y plantea un buen debate.
    Parte del próximo artículo que quiero escribir plantea algunas maneras de negociar un proyecto con un cliente, pero puedo adelantar algo aquí.

    Siguiendo tu propio razonamiento. Llego a un cliente que no me conoce de nada, y me he plantado delante de él usando alguna de las opciones que mencionas.
    Qué motivación o seguridad tiene ese cliente a la hora de embarcarse con mi empresa en un proyecto a largo plazo? Invertiría miles de dólares o euros en un proyecto de 6 meses, 1 año… etc?

    Considero que una metodología ágil, bien aplicada y comprendida, soluciona este escoyo inicial.

    Cuando uno negocia un contrato con un cliente, se puede hacer de diversas maneras. Lo habitual es pactar un número de iteraciones.

    Cada Iteración como tal consta de varios días, nosotros usamos iteraciones de una semana, pero hay equipos que usan iteraciones de 2 o 3 semanas. (Iteraciones más largas no son realmente recomendables ya que en el caso de fallar algo, o tomar otro rumbo, tirar a la basura el trabajo de 4 o mas semanas duele mas).
    Pongamos el caso de iteraciones semanales.
    Esa iteración consta de 5 días laborables de 8 horas cada día. Ni más ni menos.
    Y tu eres libre, en función de tu experiencia y trayectoria, de fijar el precio / hora.
    Eso es relativamente flexible, pero esta aproximación nos da un acercamiento más o menos directo e intuitivo de como puedes fijar el costo de una iteración.
    Tu pactas con tu cliente un número de iteraciones a $X.XX/iteración y el cliente decide si lo compra o no.
    Cuál es la ventaja de este acercamiento?
    El cliente, si no te conoce, puede decidir arriesgar unos miles de dolares, ver cómo se desempeña y ver si el proyecto es realmente viable en 2, 3 o 4 semanas en lugar de tener que invertir cientos de miles de dólares y no ver resultados finales hasta 6 meses después.

    IMHO creo que este acercamiento, cuando es entendido por los clientes (y eso es otra historia bieeeen distinta) es beneficioso para ambas partes.
    - Por un lado el cliente, invirtiendo menos dinero, tiene una idea de cuál es la velocidad real a la que tu equipo puede proporcionar resultados. No vendemos motos, vendemos “working software”
    - Y por otro lado el equipo decide si el proyecto es realmente viable, si es capáz de llevarlo a cabo y les resulta interesante.

    La transparencia es una de las premisas del desarrollo ágil, y ahí choca de lleno en muchas ocasiones con las prácticas habituales en las grandes corporaciones.

    Yo, como cliente, preferiría tener mi software en un servidor de pruebas (por ejemplo) para jugar con él a medida que se construye e inspirarme para ir modelando lo que realmente quiero, a tener que reunirme cada x tiempo con un señor (aka jefe de proyecto) y que me cuente como van las cosas sin poder verlas realmente.

    Y efectivamente, tal y como sugieres ágil no usa jefes de proyecto (jaja y por la palabra que usaste para definir a los programadores -técnico- intuyo que debes trabajar en algún cargo similar).
    En lugar de un jefe de proyecto, es mucho más útil la figura del “Product Owner”
    Pero el comentario ya está quedando muy largo e igualmente eso va a ser material para el próximo post ;)

    Comentario por CaDs — Octubre 3, 2008 @ 11:31 am

  3. jejejeje, lo espero impacientemente …

    (ya te digo : 15 años de “tecnico”)

    Comentario por jorge — Octubre 4, 2008 @ 2:14 am

RSS de los comentarios de esta entrada. TrackBack URI

Deje un comentario