Introducción a las Metodologías Ágiles III

Abril 26th, 2010 por Roberto Andrés

Roberto Andrés

Roberto Andrés

Además nos encontramos con un problema humano importante. Los diseñadores de los sistemas de software se han formado habitualmente por experiencia desde puestos de desarrolladores, en ocasiones compartiendo ambas tareas hasta que en su progresión a diseñadores puros deben dedicarse por completo a esa faceta, no teniendo tiempo para programar. Nosotros hemos cambiado con el tiempo, pero invariablemente las herramientas de desarrollo y los sistemas sobre los que se implantan estos han cambiado también e incluso más rápidamente que nosotros. Por un lado habremos perdido de vista todos estos cambios tecnológicos a la vez que también la proximidad e incluso en ocasiones el respeto por aquellos que programan.

No vamos a ahondar en estas cuestiones, pero todos sabemos que están presentes y que crean tensiones dentro del equipo.

 Aun así, vamos a suponer que seremos capaces de manejar estas relaciones del equipo de trabajo (sin romperlo!), aún así tendremos el problema de los requerimientos cambiantes.

Lo más sorprendente de estos requerimientos cambiantes es que a día de hoy alguno de los miembros de casi cualquier equipo de desarrollo se sigue sorprendiendo de que surjan estos requerimientos cambiantes ya que todos sabemos que están ahí desde el comienzo de los tiempos. Hasta Dios diseño el mundo en 6 días y desde entonces no ha parado de detectarle errores y ponerle parches.

Poniéndonos de nuevo serios, estos cambios se producen por múltiples factores; una falta de comunicación o una comunicación incorrecta en el equipo de desarrollo, falta de entendimiento del problema o simplemente en la mayoría de los casos a un cambio de la lógica de negocio, cambio que se da más veces de lo prevista y a la que ninguna técnica de diseño puede anticiparse. Por otra parte, la existencia de cambios previsibles y nuestro deseo de anticiparnos a ellos, pueden devenir en mayores problemas que aquellos que queremos prevenir.

De esta manera se establecen los Métodos Ágiles como métodos orientados principalmente al equipo de trabajo y no al proceso en sí,  de manera que intentamos generar orden en el caos a la vez que no perdemos nuestro precioso y escaso tiempo en generar documentación excesiva y en ocasiones inútil.

A partir del año 2001 los miembros más destacados de este movimiento se reunieron y adoptaron el nombre de Metodologías Ágiles, a la vez que formaron la Alianza Ágil para promover estos tipos de desarrollos, creando un manifiesto y unos principios como base para la estandarización de estos tipos de diseño, que recogen la esencia de la Metodología:

Manifiesto por el Desarrollo de Software Ágil

Estamos descubriendo mejores maneras de desarrollar software haciéndolo y ayudando a otros a hacerlo. A través de este trabajo hemos llegado a valorar:

  • Individuos e interacciones sobre procesos y herramientas
  • Software funcionando sobre documentación exhaustiva
  • Colaboración del cliente sobre negociación de contrato
  • Responder al cambio sobre seguir un plan

Esto es, mientras en los artículos de la derecha hay valor, valoramos más a los de la izquierda.

Los doce principios:

  • Nuestra mayor prioridad es satisfacer al cliente con la liberación oportuna y continua de software valioso.
  • Le damos la bienvenida a los requisitos cambiantes, aun ya avanzado el desarrollo. Los procesos ágiles utilizan el cambio para la ventaja competitiva del cliente.
  • Liberar software funcionando frecuentemente, de un par de semanas a un par de meses, de preferencia en la escala de tiempo más corta.
  • La gente de negocios y los desarrolladores deben trabajar juntos diariamente durante todo el proyecto.
  • Construir proyectos con individuos motivados. Déles el ambiente y soporte necesario, y confíe en que harán su trabajo.
  • La manera más efectiva de intercambiar información en el desarrollo es la conversación cara a cara.
  • El software funcionando es la medida primaria de progreso.
  • Los procesos ágiles promueven el desarrollo sustentable. Los patrocinadores, desarrolladores y usuarios deben ser capaces de mantener un paso constante indefinidamente.
  • La atención continua a la excelencia técnica y al buen diseño mejoran la agilidad.
  • La simplicidad –el arte de maximizar la cantidad de trabajo a no realizar– es esencial.
  • Las mejores arquitecturas, requisitos y diseños emergen de equipos auto organizados.
  • A intervalos regulares, el equipo reflexiona sobre cómo ser más efectivo, entonces ajusta su desarrollo acordemente.

En el próximo artículo profundizaremos en las principales características de las Metodologías Ágiles.


Publicado en General | Sin Comentarios »

Interesarse por “los otros”

Diciembre 2nd, 2009 por IOS

Mario Garcimartín

Mario Garcimartín

El título de este capítulo puede inducir a error. Que nadie piense que estoy preparando las normas de comportamiento de una ONG. Lo que pretendo, modestamente, es establecer pautas de conducta.

Los otros no son sólo los próximos: hijos y pareja, padres y hermanos, amigos y vecinos; pueden ser también rivales y competidores, colegas y jefes, clientes y proveedores. Estamos obligados a tratar con todos, y probablemente nuestra educación nos permita hacerlo dentro de estilos generalmente aceptados.

Pienso, que no hay soluciones exactas para mejorar nuestras relaciones personales, pero hay una premisa: “es imprescindible que nos preocupemos de los demás”.  La famosa frase “hola, que tal estás”, encubre siempre una obligatoria dosis de hipocresía, que tarde o temprano se delata a si misma. No debemos renunciar a las cortesías habituales, pero debemos exigirnos diariamente un mínimo de sinceridad cuando sentimos las desgracias de otros o nos alegramos del éxito ajeno. Hay que tomar conciencia de que nuestras felicitaciones y nuestros pésames no sean meramente protocolarios.

Una de las habilidades mas difíciles de encontrar (al menos para mí) es la “Empatía”.  Igual que otras muchas, forma parte de la propia personalidad. Se es o no empático de la misma forma que se es moreno o rubio, pero con voluntad puede y debe adquirirse y perfeccionarse. La empatía es la capacidad de ver los asuntos como los ve el otro, desde su posición y circunstancia. No es preciso asumir su punto de vista, pero si comprender por qué piensa así. En cualquier negociación, las personas empáticas tienen ventaja, han recorrido un largo camino antes de que la parte contraria haya terminado de defender sus posiciones.

Para perfeccionar nuestra empatía, (sea ésta mucha o poca)  debemos interesarnos por la persona que tenemos enfrente; conocer sus aficiones, entender sus necesidades y objetivos. Pongámonos realmente en el lugar del otro o intentémoslo, al menos, con “sinceridad”. Pienso, que con este gesto generoso, estaremos ocupando su terreno, jugando sus cartas, viendo el problema desde más ángulos. En definitiva, siendo más eficientes.

Quiero aquí hacer una observación, la empatía no debe confundirse con la “identificación”  ni, menos aún, con la “imitación”. Hay quien por hacerse perdonar el hecho de ser diferente, adopta sin darse cuenta gestos y entonaciones del interlocutor. De hecho, un par de veces durante mi vida profesional, he visto la metamorfosis realizada en la persona; adoptando las mismas posturas, voces y gestos. El empático no pierde su personalidad, simplemente entiende a la persona y valora el porqué de sus reacciones para poderle contestar adecuadamente.

Al interesarnos por los demás estamos procurando nuestro propio beneficio. No es altruismo lo que hace progresar al mundo; gracias al deseo de obtener un beneficio por parte del panadero y del lechero, gracias a su egoísmo, podemos contar todas las mañanas con leche y pan, a tiempo y en un lugar accesible.

En cualquier caso, cuidado con pretender ganarlo todo en la transacción, porque podemos quedarnos sin interlocutor. El “da y recibirás”, debería ser una norma permanente de las personas. Hay que dar algo a cambio, en toda transacción, y no solamente en las negociaciones mercantiles o políticas. La norma del “da y recibirás” es aplicable siempre, y muy especialmente cuando se trata de relaciones personales.

Es difícil obtener la distancia existente entre nuestras aspiraciones y lo que realmente podemos conseguir, y aún más entre lo que querríamos alcanzar y lo que, en justicia, debería alcanzar la parte contraria. Entran aquí en conflicto nuestra ambición y nuestra capacidad de empatía. Yo pienso que una buena táctica sería: “Conceder primero, plantarse, y esperar la contrapartida para dar una nueva concesión, o replegarme a una posición previa hasta que el contrario abandone la posición de fuerza”.

Al hablar anteriormente de la empatía, se me ha olvidado comentar algo que considero muy importante: “La ética profesional”. Interpretar las emociones ajenas sin ninguna referencia moral, sólo puede serle útil a un tahúr durante una partida de póquer.

Cuando al ver a una persona en una situación ridícula sentimos la desagradable sensación de la tan famosa  y tan malinterpretada “vergüenza ajena”, sólo estamos evidenciando que sentimos por el otro, que su dolor también es el nuestro. Nada de esto sería posible si no sintiéramos afecto por nuestros semejantes. Por consiguiente, pienso que es muy importante utilizar la ética desde la misma empatía.

Y ya para finalizar, me gustaría dar un último repaso a uno de los aspectos que conformarían (bajo mi punto de vista) el “todo para el interés hacia los otros”, junto con la empatía y la ética: la verdad. ¡ Señores !, “la mentira no paga”. Me viene a la mente la educación que recibían los jóvenes persas; eran ejercitados en tres artes: montar a caballo, disparar con el arco y ….. no mentir. La mentira y la traición, siempre son acompañadas por el desprecio. Si las personas con las que trabajamos son de nuestro interés, “la mentira no tiene objeto”, ni siquiera para bromear. Puede que, debido a determinadas circunstancias, nos veamos obligados a ocultar la verdad, pero nunca, nunca debemos mentir. Desde luego, para mí, prefiero negarme a contestar. No seamos como los políticos: que cuando son entrevistados, “dicen brillantemente  lo que están dispuestos a decir, con absoluta independencia del contenido e intención de la pregunta”.

Saludos


Publicado en General | 1 Comentario »

Introducción a las Metodologías Ágiles II

Diciembre 1st, 2009 por Roberto Andrés

Roberto Andrés

Roberto Andrés

Evidentemente y atendiendo a estos puntos de partida casi todos, sobre todo los programadores, se podrán ver interesados o atraídos por ciertas características de estos métodos. En este artículo no se pretenden exponer las virtudes, pros o contras de estas metodologías ágiles, ni tampoco justificar o explicar los posibles problemas encontrados a lo largo de la implantación de proyectos pasados o futuros, sino simplemente realizar una recopilación de la existente literatura al respecto de estos métodos menos conocidos, a la vez que desde mi doble punto de vista como diseñador y desarrollador, exponer alternativas a los métodos que se llevan usando desde hace ya más de 30 años. No nos engañemos, Ken Beck, uno de sus creadores y principales valedores lo puso en marcha para rescatar el proyecto C3 de Chrysler a finales de los 90 y este proyecto tuvo que ser finalmente cancelado, luego podemos casi asegurar que no se trata de la panacea que arregle todos nuestros problemas, pero evidentemente encontraremos algunos puntos que nos serán fácilmente identificables como útiles para su aplicación en nuestros proyectos.

Como ya comentábamos, estos métodos suponen principalmente un choque entre dos estilos; el diseño evolutivo/adaptativo y el diseño planeado/predictivo.

Esencialmente, evolutivo significa que el diseño del sistema crece conforme se implanta el sistema; el diseño es parte del proceso de programación y conforme el programa evoluciona el diseño cambia. Habitualmente esto se convertirá en un desastre; el diseño en estos casos se reduce a una serie de decisiones puntuales tomadas sobre la marcha que irán inevitablemente complicando la posibilidad de mantenimiento del código a medio y largo plazo. Conforme el diseño se deteriora, igualmente se deteriora la capacidad de cambio y con él se facilita la generación exponencial de errores que cada vez serán más difíciles (y costosos) de eliminar. Estas son principalmente las complicaciones del típico “codifica y corrige” al que en gran parte nos hemos acostumbrado los programadores. Los teóricos de la metodología denominan a este fenómeno como la Entropía del Software.

El diseño planeado al contrario, se basa en prácticas extraídas de la ingeniería. Si queremos construir por ejemplo un edificio, no podemos empezar a poner ladrillos a lo loco sino que realizaremos ciertos estudios, esquemas, códigos y diagramas utilizando diversas técnicas matemáticas y de estructuras, tras lo cual podremos abordar su construcción o encargársela a otra empresa para que lo construya.

En software todo debería funcionar de manera similar. Los diseñadores no pensamos en programar ya que solo lo estamos planeando, se piensa en los problemas con anticipación, y por ello utilizamos diferentes técnicas que dejan de lado los detalles de programación de bajo nivel para dedicarnos a un nivel más abstracto. Al igual que en el edificio estamos convencidos de poder diseñar un software a imagen y semejanza de una lógica de negocio y que podemos pasarlo después a los programadores o bien a otra compañía para que construya dicho software.

Así llevamos ya cerca de 30 años y aunque a priori parece mejor que el sistema de codificar y corregir, nuestra experiencia sabe que esto no siempre es así.

Sabemos que es totalmente imposible en un sistema de una complejidad media el haber pensado en todos los problemas que se necesitan tratar al programar y que aparecerán inevitablemente problemas que pondrán al diseño en entredicho, además no contaremos ni con un plazo suficientemente amplio para la realización del proyecto a la vez que tendremos unos márgenes comerciales más ajustados.

Normalmente en estos casos se realizará un cambio rápido en el diseño por la presión de tiempo a la que casi seguro estaremos sometidos, provocando con esto de nuevo el crecimiento de nuestra famosa Entropía, siendo en ocasiones obligados a lanzar el software incluso con un conjunto en teoría conocido de defectos y deficiencias. El software es lanzado con esos defectos conocidos porque el valor del software en un determinado nivel de calidad (teóricamente) compensa el impacto de los defectos y deficiencias conocidas.


Publicado en General | Sin Comentarios »

Introducción a las Metodologías Ágiles

Noviembre 26th, 2009 por Roberto Andrés

Roberto Andrés

Roberto Andrés

Las Metodologías de Diseño fueron creadas para imponer un proceso disciplinado en el de por sí caótico proceso de desarrollo de software con el fin de hacerlo más predecible y eficiente. De esta manera, a lo largo de los años se han venido diseñando métodos de diseño, en donde los últimos exponentes han sido UML, RUP, Métrica, etc,… 

Aún así y como ya sabemos, todas estas metodologías conllevan una ingente cantidad de pasos, etapas, documentación y ‘burocracia’ asociada, que retrasan considerablemente el proceso de desarrollo, siendo en ocasiones muy difícil de seguir escrupulosamente todos estos pasos consiguiendo en ocasiones su abandono o su seguimiento con laxitud a lo largo del proceso, siendo este mayor cuanto más crítico debería de ser su seguimiento. 

En este punto surgen los Métodos Ágiles, dentro de los cuales encontramos entre otros XP (Xtremme Programming) , SCRUM, Agile Unified Process y FDD (Feature Driven Development), intentando ser un punto medio entre las metodologías altamente burocratizadas y la ausencia total de método que nos podría abocar a un caos absoluto. Estas metodologías suponen grandes cambios  en los métodos habituales siendo alguno de los más controvertidos el rechazo a un esfuerzo significativo en el diseño previo, en favor de un estilo más evolutivo en el que sin disminuir la calidad si reduzcamos la documentación, pasos, procesos y tiempo de desarrollo necesarios para la consecución del proyecto. 

En próximas entregas analizaremos estas metodologías, como comienzo para su posible evaluación y su integración total o parcial dentro de la gestión de proyectos.


Publicado en General | Sin Comentarios »