jueves, 13 de septiembre de 2018

Desarrollo Agil


El desarrollo Ágil es una relativamente una nueva tendencia en los procesos y procedimientos  de desarrollo de software, nacida en estados unidos en el año 2001 establecida por distinguidos y expertos desarrolladores de software, veteranos que tienen empresas propias de consultoría y desarrollo como Wingman Software, trains, coaches and consults worldwide, y prestan sus servicios a gigantes como google y facebook.

La tendencia agile se origino a partir de las experiencias propias vividas por los desarrolladores, que se percataron de una variada serie de áreas de oportunidad en los procesos tradicionales de desarrollo de software, es así como crearon un manifiesto, principios y proceso ágiles, el cual esta reforzado con diferentes técnicas(TDD,Units,automatización) y metodologías como xp y scrum. 

Si quieres conocer a los firmantes y autores del manifiesto ágil consulta autores del manifiesto ágil 

Manifiesto por el Desarrollo Ágil de Software

Estamos descubriendo formas mejores de desarrollar
software tanto por nuestra propia experiencia como
ayudando a terceros. A través de este trabajo hemos
aprendido a valorar:

Individuos e interacciones sobre procesos y herramientas
Software funcionando sobre documentación extensiva
Colaboración con el cliente sobre negociación contractual
Respuesta ante el cambio sobre seguir un plan

Esto es, aunque valoramos los elementos de la derecha,
valoramos más los de la izquierda.
Kent Beck
Mike Beedle
Arie van Bennekum
Alistair Cockburn
Ward Cunningham
Martin Fowler
James Grenning
Jim Highsmith
Andrew Hunt
Ron Jeffries
Jon Kern
Brian Marick
Robert C. Martin
Steve Mellor
Ken Schwaber
Jeff Sutherland
Dave Thomas

© 2001, los autores mencionados
mediante esta nota se autoriza la copia y
distribución de esta declaración a través de
cualquier medio pero sólo de forma íntegra.

Principios del Manifiesto Ágil


Seguimos estos principios:Nuestra mayor prioridad es satisfacer al cliente
mediante la entrega temprana y continua de software
con valor.
Aceptamos que los requisitos cambien, incluso en etapas
tardías del desarrollo. Los procesos Ágiles aprovechan
el cambio para proporcionar ventaja competitiva al
cliente.
Entregamos software funcional frecuentemente, entre dos
semanas y dos meses, con preferencia al periodo de
tiempo más corto posible.
Los responsables de negocio y los desarrolladores
trabajamos juntos de forma cotidiana durante todo
el proyecto.
Los proyectos se desarrollan en torno a individuos
motivados. Hay que darles el entorno y el apoyo que
necesitan, y confiarles la ejecución del trabajo.
El método más eficiente y efectivo de comunicar
información al equipo de desarrollo y entre sus
miembros es la conversación cara a cara.
El software funcionando es la medida principal de
progreso.
Los procesos Ágiles promueven el desarrollo
sostenible. Los promotores, desarrolladores y usuarios
debemos ser capaces de mantener un ritmo constante
de forma indefinida.
La atención continua a la excelencia técnica y al
buen diseño mejora la Agilidad.
La simplicidad, o el arte de maximizar la cantidad de
trabajo no realizado, 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 para a continuación ajustar y
perfeccionar su comportamiento en consecuencia.


En la practica ¿Porque dar mas valor a los elementos de la izquierda que a los de la derecha? 


Individuos e interacciones sobre procesos y herramientas



¿Cuantas veces? descubres mejores formas de hacer desarrollo y cuando las compartes escuchas las siguientes frases: 
"Debes apegarte al proceso", "Así se hacen las cosas aquí", "El director ya dijo", "El dueño no va a aceptar"  ,"Pues esta muy interesante y todo pero esto tiene que salir hoy".

Siempre es diferente un proceso de desarrollo de software que un procesos de manufactura de un producto finaal


Debido a esta diferencia, es mas importante la interacción entre todos los elementos que participan en el desarrollo del sistema, para tener una constante adaptación al cambio y generar mas calidad.

Software funcionando sobre documentación extensiva


La realidad es que nunca , de los nunca nadie jamas lee la documentación y mucho menos cuando es exagerada, y por asares del destino se encuentra des-actualizada, sin embargo por el miedo a la rotación de personal, las empresas se aseguran que se realice la documentación , aunque al momento de necesitar una modificación en el sistema decidan mejor re-hacer el sistema .

 La elaboración de la documentación es por cuenta del desarrollador, siempre es mas barato que el mismo la realice en jornadas laborales extensas, restando le tiempo y capacidad  para enfocarse en el desarrollo que es su actividad principal. 

Sin embargo por medio de técnicas TDD siempre la prueba automatizada es la documentación viviente y actualizada  de lo que hace el sistema, solo se debe hacer la documentación necesaria y de la forma mas simple posible.

Colaboración con el cliente sobre negociación contractual


¿Cuantas veces por medio de una simple pregunta te das cuenta de que el cliente no sabe ni lo que quiere?

¿Cuantas veces pasa que terminas a tiempo el sistema? pero no es lo que el cliente necesitaba. El cliente muy molesto te dice que no es lo que solicito y tu le respondes, esta en el contrato y tu lo firmaste, tener un cliente satisfecho es mas importante que  cumplir un contrato, y por medio de la colaboración con el cliente puede lograrse.Ademas esto no significa que no se elabore contrato.


Respuesta ante el cambio sobre seguir un plan


Es muy común en el desarrollo los cambios de ultima hora, y por eso se debe tener una actitud y capacidad de adaptación.


La dificultad de aplicarlas:

En la mayoría de las empresas es muy difícil implementar metodologías ágiles debido a que el desarrollo ágil es un proceso que inicia desde abajo en una jerarquía empresarial, es decir el equipo de trabajo (desarrolladores, scrum master, y product owner), deciden en base a los requerimientos priorizados, cuales serán los tiempos de entrega y que tanto se pueden comprometer a terminar un sistema. 

Estas estimaciones se le hacen conocer a gerentes, directores, clientes y a todos los interesados.Pero no lo aceptan, pues ellos se basan en indicadores(establecidos por ellos mismos, desconociendo N variables del requerimiento), por lo que de no haber una buena negociación es muy difícil llevarla a cabo. 

A pesar de que la tendencia agile lleva 17 años de aplicarse de forma exitosa y mostrando grandes resultados, muchas empresas siguen manejando las técnicas tradicionales(ISO,CMMI ) en cascada, o simplemente comprometiendo tiempos imposibles, porque el cliente así lo solicita o porque el gerente pide que se termine en un tiempo imposible y todo el equipo de trabajo no tenga mas remedio que tratar de conseguirlo, aunque siempre terminando el sistema con muy mala calidad, pues sabemos que la regla de la calidad es que a mayor producción, menor calidad, y una baja calidad en un sistema puede ser fatal en el futuro,pues con un mal diseño y arquitectura de tu software, tu sistema se puede volver in-mantenible o costar mucho esfuerzo continuar desarrollándolo.

En las tendencias ágiles es muy importante tener a tu equipo, auto-motivado, capacitado y confiar en el para el desarrollo del sistema, pero para muchas empresas es muy difícil de lograr.

Referencia:
"http://agilemanifesto.org/iso/es/principles.html"