Software">
Como Sobrevivir - A La Planific - Javier Garzas
Como Sobrevivir - A La Planific - Javier Garzas
Como Sobrevivir - A La Planific - Javier Garzas
http://www.javiergarzas.com/recursos-descargas/supervivencia-planificacion-agil
A todos aquellos que en algún momento conseguimos planificar
ISBN: 978-84-616-5733-9
Versión: 1.0
Sobre el autor
javier.garzas@urjc.es
twitter: @jgarzas
web: www.javiergarzas.com
Cuenta con certificaciones de Auditor Jefe de TICs (Calificado por AENOR) para ISO
15504 SPICE – ISO 12207, Auditor ISO 20000 por ITSMF, especialización en
Enterprise Application Integration (premiado por Pricewaterhousecopers), CISA
(Certified Information Systems Auditor), CGEIT (Certified in the Governance of
Enterprise IT) y CRISC (Certified in Risk and Information Systems Control) por la
ISACA, CSQE (Software Quality Engineer Certification) por la ASQ (American
Society for Quality), Introduction CMMI-Dev y Acquisition Supplement for CMMI v1.2
(CMMI-ACQ) e ITIL V3 Foundation.
-- Charles Darwin
Y eso es lo que encontrarás en este libro, una ayuda para sobrevivir, para seguir
adelante, para hacerte con la planificación de un proyecto utilizando lo imprescindible
y utilizando la agilidad.
El objetivo de este libro es ayudarte a estar preparado lo más rápido posible. Los
negocios se mueven hoy a tal velocidad que la necesidad de planificar un proyecto
software en ocasiones llega casi sin avisar, dejándonos el tiempo justo para
prepararnos, y para ello necesitarás tener localizadas técnicas prácticas y probadas,
aquellas que son fruto de la experiencia, aquello que realmente puede salvarte.
Y por si fuera poco, junto a la velocidad cada vez mayor de los negocios de base
tecnológica, cuando ya muchas empresas empezaban a conocer la planificación
software de proyectos tradicionales, en los últimos años irrumpe, fuertemente en las
empresas, una manera diferente y más eficiente de gestionar proyectos: la agilidad.
Seguramente habrás oído palabras como Scrum, ciclos de vida iterativos, puntos
historia, historias de usuario, etc., ¿Pero cómo encaja todo para planificar mi proyecto?
¿Cómo ordenar todo? ¿Cómo todo ello me puede ayudar? ¿Qué es realmente práctico y
qué no? La respuesta, es uno de los objetivos de este libro.
Por último, antes de empezar, recuerda que lo más importante frente a una situación de
adversidad son dos cosas: tu actitud frente a los problemas y tu preparación previa.
Este libro será tu herramienta imprescindible para la segunda. El resto depende de ti.
CONTENIDO
La presente obra ofrece una visión amplia sobre diferentes factores que se deben tener
en consideración para la planificación, estimación y seguimiento de un proyecto usando
técnicas y métodos ágiles.
SOBRE LA TERMINOLOGÍA
Desde siempre, la falta de una terminología unificada ha sido un problema en ingeniería
del software. El mundo de la gestión de proyectos y el de la agilidad no son ajenos a
este problema. Es por ello que esta breve sección pretende aclarar algunas posibles
dudas que pudieran generar la terminología usada en este libro.
Esta obra ofrece una visión amplia sobre diferentes factores que se deben tener en
consideración decidir la implantación de métodos ágiles. Y persigue los siguientes
objetivos:
http://www.kybeleconsulting.com/libros/
AGRADECIMIENTOS
Mi agradecimiento a aquellos con los que he compartido proyectos profesionales, a los
asistentes a los diferentes “webinars”, seminarios y conferencias que hemos organizado
sobre diferentes aspectos de la calidad software y proyectos ágiles, por habernos
transmitido en qué temas debería incidir el libro. Con sus inquietudes han ayudado a
clarificarnos qué debíamos dejar claro y qué debíamos enfatizar en esta obra.
Por otro lado, me resultaría imposible citar a todas las personas que con sus
sugerencias y comentarios han contribuido a que sea posible la realización de este libro
(destacando a los lectores del blog www.javiergarzas.com , y sus comentarios de
incalculable valor para motivar este libro).
Aún así, queríamos destacar la labor de revisión, las sugerencias y los comentarios
realizados por:
Ana María del Carmen García Oterino y David García, quienes han ayudado en la
siempre complicada tarea de la maquetación, corrección de textos y figuras.
En el año 304 a.C., los habitantes de la isla griega de Rodas, para celebrar su
victoria sobre Demetrio, y después de haber logrado repeler el fuerte asedio al que
éste sometió a su ciudad, decidieron construir una colosal estatua del dios Helios,
estatua que eternamente recordase su victoria.
Para la construcción de tal obra, conocida hasta nuestros días como el coloso de
Rodas, eligieron a Cares de Lindos, al que los rodios pidieron una propuesta con el
coste de construir una estatua de 50 pies (15 metros) de altura.
Dado que el precio pedido por Cares para construir la estatua de 50 pies era
suficientemente asequible para la ciudad de Rodas, estos le pidieron una segunda
oferta, esta vez para un coloso del doble de altura.
Cares estimó entonces que una estatua del doble de altura costaría el doble de
precio. Y los rodios, rápidamente, aceptaron la propuesta de Cares.
Y a esto se une la cantidad de estudios que ya han señalado como los problemas de
planificación y estimación son los problemas más frecuentes, y con mayor impacto, en
proyectos de desarrollo software (McConnell, 2007).
Como primera medida para enfrentarnos a una planificación ágil, debemos tener claro
las “herramientas” que hay disponibles para ayudarnos con ello, el orden a la hora de
hacer uso de ellas y que, dependiendo de la magnitud del software a crear, de su
tamaño, del tiempo de proyecto, etc., debemos hacer uso de diferentes niveles de
abstracción a la hora de planificar. Veamos todo ello a continuación.
EL ROADMAP Y LOS NIVELES DE ABSTRACCIÓN A LA HORA
DE PLANIFICAR
Si el proyecto es grande, lo más normal es que utilicemos hasta incluso tres niveles de
planificación, que típicamente en proyectos ágiles son los siguientes: planificación del
“roadmap”1, planificación de la creación de una “release”1 y la planificación de cada
iteración.
Los tres anteriores tienen, cada uno de ellos, diferente nivel de abstracción. El
roadmap, que veremos con detalle en el capítulo 2, tiene un objetivo más estratégico; el
plan de creación de una release o la planificación de las diferentes iteraciones
necesarias para ello, que trataremos en el en el capítulo 5, un objetivo táctico y,
finalmente, el plan de la iteración es más operativo, y lo veremos en el capítulo 6.
El papel que juega el product owner es tal que de esta figura depende gran parte la
planificación del proyecto, el plan de iteraciones, su duración, etc... Y, por supuesto…
mucha parte del éxito del proyecto depende de él.
LA ESTIMACIÓN
En un proyecto ágil no es raro comenzar una iteración con requisitos poco
especificados y, sin embargo, necesitamos una estimación para cada requisito…y para
el proyecto.
Semestres o
Roadmap Temas Estratégico T-Shirt
incluso años
Quizás la parte más delicada es la estimación de las historias de usuario, ya que gran
parte del éxito del proyecto dependerá de ello, todo ello lo veremos en el capítulo 4,
destacando como para dicha estimación su suele hacer uso de los puntos historia.
Y una vez resueltos lo anteriores, planificaremos una por una cada iteración, justo antes
de que cada una de ellas comience…
EL SEGUIMIENTO
Todo proyecto, y los ágiles no iban a ser menos, requiere de un seguimiento, desde que
comienza hasta su fin. Un seguimiento correcto nos ayudará a detectar desviaciones y a
tomar las decisiones correctas. Y nos anticipará con tiempo si cumpliremos nuestro
objetivo de entregar un producto de cierta funcionalidad en la fecha establecida, el
capítulo 7 trata sobre ello.
Capítulo
2
--Dwight D.Eisenhower
-- Refrán español
Una release es una versión más del software, con la particularidad de que es una
versión que va pasar a producción, es decir, va a ser usada por los usuarios reales del
producto software. Toda versión que desarrollamos no necesariamente es una release,
porque no toda versión, ni todo prototipo operativo, se libera o pasa a producción.
La Figura 2 muestra varias releases en el tiempo, y varias iteraciones. Nótese como las
releases no siempre tienen la misma temporalidad y como, normalmente, las iteraciones
si la tienen. Al final de cada iteración de desarrollo se obtiene un prototipo con
funcionalidad, y solo algunos de estos prototipos se convierten en release.
Para definir los objetivos de las release, usamos los denominados “temas”.
Por ejemplo, decir que en la release 3 afrontaremos “la afiliación de usuarios a nuestro
portal” es un tema.
Así que los temas se usan para recoger necesidades a nivel de roadmap.
¿Qué razones pueden llevarnos a decidir qué los pasos a producción no deban ser
al final de cada iteración?
Algunos ejemplos:
Dos factores suelen determinar el tiempo que transcurre entre una release y otra:
Razones de negocio.
Limitaciones organizativas y técnicas.
La disciplina que trata con el objetivo de hacer mínimo el tiempo desde que se decide
pasar a producción hasta que el software está listo es el “continuous delivery”.
Las ideas de continuous delivery aparecen con fuerza en 2010, cuando apareció el libro
Continuous Delivery, de Jez Humbley y David Farley(Humble & Farley, 2010), que
trata las técnicas para poder crear un flujo continuo de versiones software listas para
pasar al entorno de producción de manera segura, sin defectos ni sustos.
La entrega continua, el continuous delivery, es la evolución natural de la “integración
continua”, que se basa en integrar el software (compilarlo y probarlo) automáticamente
lo más frecuentemente posible, y así poder detectar fallos cuanto antes.
La entrega continua no implica necesariamente que tengas que hacer muchos pasos a
producción. “continuous delivery” no es “continuous deployment”. El continuous
delivery pretende que podamos pasar a producción cuando queramos, rápidamente, que
cuando decidamos pasar a producción sea en poco tiempo.
Por ejemplo, un caso de estudio de DevOps es lo que en su momento logró Flickr: tal
integración entre desarrollo y operaciones que hacían… ¡diez pasos a producción por
día!
Con todo, y como citaba Mary Poppendieck (Poppendieck & Poppendieck, 2006):
“How long would it take your organization to deploy a change that involves just one
single line of code?” Pregúntate si ese tiempo es razonable y si te está haciendo ser
cada vez menos competitivo.
2.3.Estimación con T-SHIRT
Esta unidad suele usarse en estimaciones muy tempranas y para medir grandes
requerimientos, con poco nivel de detalle, por ello suele usarse para estimar el tamaño
de los “temas” que definen una release. Como podemos ver el ejemplo de la Tabla 3 , a
los diferentes temas del proyecto se les asigna un tamaño que se mide en T-Shirt.
Su principal objetivo es que rápidamente se realice una estimación, que puede dar una
idea a clientes, usuarios, del esfuerzo que requerirá cierta funcionalidad. Pero tiene el
problema de ser un método con alta probabilidad de error.
Temas T-SHIRT
-- Roman Pichler
El “product owner”2(o propietario del producto) es aquella persona con una visión muy
clara del producto que se quiere desarrollar, que es capaz de transmitir esa visión al
equipo de desarrollo y, además, está altamente disponible para transmitirla.
Normalmente, y según lo anterior, el product owner suele ser uno de los futuros
usuarios del sistema, o a veces, alguien de marketing o cualquier persona que entienda
lo que quieren los usuarios, el mercado del producto, la competencia, y el futuro del
sistema en desarrollo.
En unas ocasiones sus tareas se minimizan, en otras suelen pasarse por alto muchas de
sus importantes responsabilidades, etc.
Quizás el papel más importante del product owner en la gestión de un proyecto ágil es
gestionar qué historias de usuario se desarrollarán, en qué orden y cuáles no.
La mayoría de las ocasiones, el negocio, los usuarios, etc., van proporcionando una
cantidad de ideas a implementar, que se van convirtiendo en historias de usuario, muy
superiores en número (ver capítulos de velocidad (4.7) y de historias de usuario
(3.5)) a las que el equipo es capaz de desarrollar en una iteración. La función del
product owner aquí es vital, ya que conociendo la velocidad del equipo (que veremos
en el punto 4.7, ) debe ser quien decida que historias de usuario entran en el product
backlog, cuáles no, y además la prioridad de las historias del product backlog.
No hay dos empresas software que utilicen igual el rol del product owner. Existen
múltiples maneras de implantar la figura del product owner. Esto varía enormemente en
función de si el equipo está desarrollando un software comercial, software para uso
interno, software empotrado, el equipo es interno o externo, o algún otro tipo de
producto.
La clave es que la persona que ejerce el rol del product owner tiene que tener una
visión clara de lo que se va a construir y las prioridades.
Pero, aun así, hay dos tendencias principales en lo que refiere a tipos de product
owners: aquellos en los que el usuario o el cliente toma el rol de product owner o
aquellos en los que una persona que representa al cliente es la que toma el rol de
product owner.
3.1.1.Cuando el cliente es el product owner
En esta situación, el cliente o el usuario final, toma el rol de product owner; dirige y
controla el desarrollo del software directamente. Esto acelera la toma de decisiones y
aumenta la posibilidad de crear un producto que responde a sus necesidades.
El problema, muchas veces, viene de que el cliente debe estar altamente disponible,
cualificado para esta tarea y con ganas de que se desarrolle un producto de éxito.
Cliente y equipo deben desarrollar una relación estrecha y de confianza.
Pero muchas veces, en esta situación, sobre todo cuando el proveedor es externo, no es
tan fácil, ya que suelen aparecer diferentes intereses. En proyectos tipo “llave en
mano” o cerrados, muchas veces el proveedor de desarrollo quiere terminar cuanto
antes y el cliente obtener la máxima funcionalidad.
Esta es una de las estrategias más comunes, que sea un representante del cliente el que
tome el rol de product owner. Así trabajan normalmente las empresas que desarrollan
software a medida o “llave en mano”, y con proveedores externos (y métodos ágiles,
claro).
Uno de los problemas de los product owners es la dedicación que requiere este rol, ya
que en los proyectos ágiles la figura del product owner debe estar altamente disponible
para el equipo, y esto no es siempre posible. Para ello, si el cliente no tiene mucha
disponibilidad, muchas veces asigna una persona totalmente dedicada a representarle.
Otras veces también ocurre que el software es para varios clientes, y un único product
owner suele actuar como representante de los mismos, escuchando ideas y necesidades
de varios clientes y usuarios, y decidiendo cuándo estas debieran implementarse.
Por problemas como los anteriores, este tipo de implementación del product owner es
criticada en ciertos foros más puristas, pero el mundo real es el mundo real, y esta
segunda tipología se observa cada vez más.
Muchas empresas eligen a la figura del “product manager” como “product owner”.
Aunque existe cierto debate sobre si son lo mismo, si son compatibles, etc., en nuestra
experiencia, esto es frecuente, válido, y suele funcionar, siempre y cuando se tenga en
cuenta que el product manager suele hacer más cosas que el product owner, como
definir estrategias de mercado, marketing, estrategias de precios, análisis de
competitividad, etc.
Si se da el caso de equiparar el rol del product manager con el rol del product owner,
hay que tener en cuenta que en esta situación dicho product manager debe realizar sus
funciones de manager, además de las funciones de product owner, es decir, lleva a cabo
más actividades que un product owner convencional. Por ello, estas tareas
“adicionales” que realiza en este caso esta figura, frente a un product owner
convencional, no deben ser un obstáculo para sus responsabilidades como product
owner con el equipo de desarrollo ágil, donde debe definir funcionalidades del sistema
futuro, priorizar, validar, etc.
3.3.Historias de usuario
“Como [rol o tipo de usuario], [quiero | podré | seré capaz | necesitaré |…] con el
beneficio de…”
Muchas veces las historias de usuario suelen escribirse en “post-it” o tarjetas, aunque
son mucho más que eso. Una historia no es sólo una descripción de una funcionalidad
en un post-it, una historia de usuario además está formada por otras dos partes no
físicas (Jeffries, 2001):
Las historias de usuario muestran la funcionalidad que será desarrollada, pero no cómo
se desarrollará. Por ello, cosas como que “el software se escribirá en C++” no es una
buena historia de usuario.
Además de las historias de usuario, podemos hacer uso de Sin buenos requisitos,
las epopeyas. Una epopeya es una historia de usuario más sin buenas historias de
grande, de mayor funcionalidad que sigue el mismo formato usuario, la planificación
que una historia de usuario pero su alcance es mayor. Las de tu proyecto tendrá
epopeyas recogen objetivos de alto nivel, objetivos de más riesgo, y será
carácter más estratégico. menos exacta.
Normalmente las epopeyas se dividirán en historias de usuario, que son más
manejables y más pequeñas, ya que realizar una epopeya nos podría llevar más de una
iteración o sprint (Tabla 5).
Tareas para implementar
Epopeya Historia de Usuario
una historia de usuario
Diseño de la historia
Implementación
Como usuario, quiero
Como usuario, quiero Pruebas
seleccionar el artículo a
comprar artículos. Aceptación
comprar
Demo
Refactorización
Tema ++++
Epopeya +++
Historia de usuario ++
Tareas +
Como habrás podido apreciar en la sección anterior, las historias de usuario son un
elemento fundamental en un proyecto ágil y, obviamente, van a ser claves para su
planificación y estimación. Y es por ello que esta sección recoge algunas claves y
buenas prácticas a la hora de crear historias de usuario.
Una historia de usuario recoge una funcionalidad mínima. Por ejemplo, según la
metodología ágil “extreme programming”(Beck & Andres, 2004), una historia de
usuario es “la unidad más pequeña posible de valor para el negocio”.
Las historias están pensadas para conversar, por ello son concisas y mínimas, para
recordarnos sólo lo que hay que añadir al software. No son especificaciones de
requisitos software. Si el texto no cabe en la tarjeta en la que se escribe la historia de
usuario es porque hay que dividirla en varias, o porque tiene información no relevante.
En este sentido, las historias deberían completarse en una iteración, no necesitar más
de una para ello.
Existe cierto debate sobre si una historia de usuario puede o debe tener un enlace,
trazabilidad, a otros documentos de soporte donde se amplía información sobre cómo
implementarla: por ejemplo una norma de seguridad, políticas internas, las reglas
corporativas en interfaces de usuario, etc. A pesar del debate, este es un recurso muy
utilizado por muchos equipos para mantener información de respaldo sin agrandar las
historias de usuario.
Las historias de usuario (ejemplo en la Figura 3) deberían ser escritas por el usuario o
por el product owner (ver epígrafe 3), ya que es el usuario realmente quien sabe lo que
necesita.
Por último, cada historia de usuario debería tener una prueba de aceptación, que
debería realizarse durante la iteración (evitando hacer una fase final, separada, sólo
para pruebas).
El concepto “valor” de una historia de usuario no tiene una única definición, sino que
depende del producto, del momento etc.
Un buen product owner debe manejar eficientemente cómo aportar el mayor valor
posible. Y para ello debe manejar el orden de las historias que deben ser
implementadas, ordenando su implementación de mayor a menor valor.
Posteriormente, con las cosas más claras, vendrá la fase en la que el producto
irá aportando cada vez más valor a los usuarios. Finalmente, habiendo cumplido las
mayores necesidades, el producto entrará en mantenimiento, o en la incorporación de
pequeñas funcionalidades o ajustes (Kniberg, 2012).
Por otro lado, la principal responsabilidad del product owner es que se construyan las
cosas correctas, será responsabilidad del equipo técnico construirlas correctamente.
Para saber qué valor tiene una historia de usuario, la manera más simple es poner un
número a cada historia de usuario. A número mayor, mayor será el valor también. Hay
técnicas que ayudan a ello. Como las que veremos a continuación.
3.4.Técnicas para priorizar y dar valor a las historias de usuario
Como es lógico, no existe un criterio universal para dar valor, priorizar historias de
usuario o requisitos, depende de cada negocio. Si bien es importante que cada equipo
fije los criterios por los cuales hará la priorización. En cualquier caso, es bastante
frecuente observar tres parámetros principales a la hora de determinar el valor de cada
requisito (Cohn, 2005):
En muchas ocasiones, los anteriores suelen combinarse con algunas técnicas para
determinar la necesidad de incorporar al producto un nuevo requisito. Las dos técnicas
más populares en este sentido son el modelo Kano y la técnica MoSCoW.
3.4.1.Modelo Kano
El modelo Kano, de los 80, se utiliza para clasificar y priorizar requisitos en función
de lo que satisfarán al usuario. En el caso de los proyectos ágiles, el modelo Kano
suele usarse para priorizar la lista de funcionalidades o de historias de usuario.
El uso del modelo Kano se basa en clasificar los requisitos según los anteriores tipos y
así priorizarlos, en función de la etapa en que se encuentre tu producto.
3.4.2.Técnica MoSCoW
MoSCoW fue creada por Dai Clegg de Oracle UK, en el 94, y ha sido muy
popularizada por el grupo Dynamic Systems Development Method (DSDM).
Concretamente, los cuatro tipos en que se clasifican los requisitos son los siguientes:
M - Must (Debe incluirse). Requisitos de prioridad alta, que deben ser
satisfechos para que el desarrollo pueda considerarse un éxito o incluso lanzar el
producto.
S - Should (Debería incluirse). La funcionalidad no es crítica, pero si importante
y deseable.
C - Could (Podrá incluirse).Requisitos deseables pero no estrictamente
necesarios.
W - Won’t (No incluir). Requisitos de los que se tiene claro no implementar,
aunque en un futuro podrían reconsiderarse.
Hay que tener en cuenta que el nombre de “pila” de producto puede inducir a error, ya
que las pilas de producto no siguen una estructura típica del concepto pila en
informática, es decir, LIFO o Last In First Out, (último en salir primero en entrar).
En el nivel superior se colocan las epopeyas. Debajo de cada una de ellas las historias
de usuario en que estas se descomponen. Las epopeyas se colocan de izquierda a
derecha en función del orden de uso del sistema, o de cómo explican mejor qué debe
hacer el sistema.
Hay muchas maneras de hacer un mapa de historias de usuario, e incluso algunos usan
terminología diferente (en ocasiones en vez de usar la palabra epopeya se usa la
palabra actividad, si bien en esencia la idea es la misma).
Para concluir, las ventajas de un mapa de historias frente a un product backlog son que:
El roadmap contextualiza el product backlog. Por ejemplo, se usa para decidir si una
nueva característica se debe añadir, o si debe ser incluida en una versión futura. En
consecuencia, el uso del roadmap, hace que el product backlog se vuelva más conciso y
que contenga menos elementos, siendo más transparente, y más fácil de manejar.
Contar con una persona a cargo del roadmap ágil y el product backlog une objetivos
estratégicos y tácticos del producto, y establece una clara autoridad y responsabilidad
sobre los mismos.
Mientras que un product backlog (el típico que se usa en Scrum) es bueno para saber lo
que debe estar terminado para lanzar una release concreta, un roadmap permite mirar
más hacia el futuro y captar la estrategia de producto, lo que probablemente se
implementará en el tiempo. Permite proyectar en el tiempo donde quieres que esté tu
producto en el futuro.
Como resumen de las diferencias entre la hoja de ruta del producto (roadmap) y el
product backlog:
-- Neils Bohr
¿Cuánto tiempo tardarías en ver la serie de televisión “The Big Bang Theory3”?
¿Difícil pregunta?
Una vez resuelto el anterior punto, para estimar cuánto tiempo me llevaría ver la serie,
sabiendo ya el requisito solicitado, sabiendo los capítulos que me piden ver, intentaría
averiguar el “tamaño” de la tarea que tenemos que realizar. Y para ello necesitaré una
unidad de tamaño.
Supongamos que un cliente me dice que lo que necesita, el “requisito”, es que vea los
capítulos 1, 5 y 9 de “The Big Bang Theory”. Ahora puedo empezar a calcular el
tamaño, midiéndolo en alguna unidad. En este caso la unidad de tamaño puede ser el
“número de capítulos”, en el ejemplo, el tamaño de mi tarea es de 3 capítulos.
Seguidamente, parece lógico poder calcular el tiempo que nos llevará la tarea. El
tiempo de duración de cada capítulo es de 25 minutos. Por lo que ahora puedo aplicar
una función de cálculo sencilla, y multiplicar 3 capítulos * 25 minutos, con el resultado
de 75 minutos.
En este punto, ¿podría ya decirle al cliente que la tarea encomendada de ver 3 capítulos
de la serie me llevaría 75 min.? El ávido lector, seguramente, ya se habrá percatado de
lo poco probable que es cumplir con dicho tiempo estimado.
Salvo excepciones, que las hay, muy pocos seríamos capaces de estar 75 minutos
seguidos, sin parar, viendo una serie. La vida real difiere de las estimaciones.
Seguramente iremos al baño, pararemos para descansar, ir a comer algo, nos llamarán
por teléfono, etc. Y es por ello que nuestros 75 minutos de “tiempo ideal” tendremos
que transformarlos en “tiempo real”, que normalmente será superior.
De nuevo, y por último, en software sucede algo similar. El tiempo ideal varía por
muchas razones, que van desde el equipo de desarrollo, su experiencia, productividad,
preparación, etc., hasta el calendario, las festividades, etc.
Una regla básica en estimación software es que según avanza el proyecto la estimación
contiene menor error, por ello, sería conveniente reestimar periódicamente, según
avanza el proyecto, para reajustar la estimación.
La primera, en la que los requisitos, que como vimos en la sección 3.3 se basan en
historias de usuario, se detallan en cada iteración, y la segunda, en la que primero se
detalla una gran cantidad de requisitos y luego se itera. Las empresas deben priorizar
entre la flexibilidad de la primera opción o preferir la mayor previsibilidad de la
segunda, para algunos…menos “ágil”. Veamos ambas opciones con mayor detalle.
Pero crea proyectos más flexibles, proyectos que no invierten tiempo en especificar
detalladamente grandes cantidades de requisitos, quizás porque no se conocen, no se
sabe su viabilidad, si el cliente los requerirá, etc.
Metodologías como Scrum proponen ciclos de vida más cercanos a este tipo de
planificación.
Otros proyectos definen la mayoría de los requisitos al principio, y una vez definido el
total, o la mayoría de los requisitos, las iteraciones cubren las fases de diseño,
construcción, y pruebas (Figura 9).
Figura 9. Cono de incertidumbre en proyectos con fase previa de requisitos
Metodologías como FDD (ver ANEXO II. FDD) utilizan este enfoque. En ocasiones,
los equipos que usan Scrum añaden el mencionado sprint cero (ver punto 5.4) para
relajar la agilidad y utilizar esta estrategia.
Cualquier medida del tamaño, bien sean puntos historia, puntos función, puntos casos
de uso, o cualquier otra, parte de los requisitos para calcular el tamaño del software.
Estos requisitos pueden venir dados en diferentes formatos, más o menos detallados o
especificados. Formatos que pueden ir desde un documento, a un pliego de
descripciones técnicas, casos de uso o, como suele ser habitual en proyectos ágiles,
historias de usuario.
La Tabla 7 recoge una síntesis de métodos de estimación, la unidad de tamaño que usan
y en qué están basados estos métodos.
También podríamos ordenar los métodos como el T-SHIRT que ya vimos (punto 2.4) o
los que veremos a continuación en función de la precisión que presentan como se ve en
la Tabla 8.
Los puntos historia son una unidad usada, normalmente, para medir el tamaño de una
historia de usuario. El número de puntos historia asociados a una historia de usuario
representa el tamaño global de la historia.
Seleccionar una historia de las más pequeñas y asignarle 1 punto historia. Esta
historia de usuario con 1 punto historia hará de unidad, y al resto se le asignarán
puntos historia en función de su complejidad respecto a ésta.
En cualquier caso, recomendamos el primer método por ser más fácil de aplicar.
Varios estudios han demostrado que es mejor estimar usando rangos o escalas de
posibles valores que se pueden asignar(Miranda, 2001) a la estimación, es decir,
fijando un tope máximo de puntos historia.
Normalmente, hay dos escalas de puntos historia que suelen tener buenos resultados:
1, 2, 3, 5, 8, etc.
1, 2, 4, 8, etc.
El Planning Poker (Cohn, 2005; Haugen, 2006) es una técnica que se utiliza para
asignar los puntos historia a las historias de usuario (ver Tabla 9). Esta técnica recibe
el nombre de Planning Poker ya que cada una de las personas implicadas en el proceso
de estimación toma un mazo de cartas que suelen estar numeradas con alguna de las
secuencias que vimos antes.
2. Tras este período de discusión, cada una de las personas implicadas en el proceso
de estimación toma su mazo de cartas y escoge la carta que representa su estimación (el
número de puntos historia).
3. Se publican todas las estimaciones, es decir, cada integrante del equipo muestra a la
vez la carta seleccionada (esto es así para evitar que las estimaciones de unos
modifiquen las de otros). Si existe una gran dispersión entre las estimaciones (unos
dicen 2, otros 20) se vuelve al discutir la historia de usuario y se vuelve a realizar el
proceso de estimación.
4. Por último, si no existe una gran dispersión, se llega por consenso a un acuerdo en la
estimación de la historia de usuario.
Los puntos historia son útiles a la hora de hacer estimaciones a largo plazo, pero no
funcionan muy bien a corto plazo.
Como vimos, los puntos historia se usan para asignar "tamaño relativo". Se utilizan
series cerradas, por ejemplo la de Fibonacci (1, 2, 3, 5, 8, etc.), porque el objetivo es
agrupar cosas de tamaño similar en lugar de lograr una estimación muy precisa.
Como usuario, …
Programar [10 horas]
[8 puntos historia]
Suma = 17 horas
Como comentábamos, lo más usual y utilizado es hacer uso de los puntos historia para
estimar historias de usuario. Pero siempre queda abierta la opción de estimar historias
de usuario directamente en horas. Autores como Kent Beck(Beck & Andres,
2004)recomiendan que una vez que el equipo se ha familiarizado con los puntos
historia le será fácil hacer saber a cuánto tiempo equivale cada punto historia, y en ese
momento “es preferible trabajar con tiempo real para hacer la comunicación más clara,
directa y transparente”.
Las principales razones de usar puntos historia frente a horas son:
El punto historia es una unidad de mayor error, pero más rápida, lo que posibilita
al product owner priorizar el product backlog.
Los puntos historia son independientes del equipo de desarrollo, es decir, para el
mismo número de puntos historia, dos equipos pueden implementarlos en diferente
tiempo. Esto es útil cuando no se sabe quién implementará las historias, o en
procesos de subcontratación o licitación de un proyecto ágil.
Aunque, como vimos antes, las historias de usuario se suelen estimar en puntos historia,
en la mayoría de equipos siempre suele surgir la siguiente cuestión: "entonces, un punto
historia equivale 9 horas ¿no?" (cámbiese el 9 por lo que corresponda).
Normalmente no hay una relación lineal entre puntos historia – horas (digo relación
lineal, no que no exista relación). Es decir, podemos tener dos historias de usuario con
los mismos puntos historia pero que su tiempo de realización sea diferente.
Por ejemplo, imaginemos que en nuestro equipo, las historias de 5 puntos historia están
en un rango de entre 15 y 30 horas. Por otro lado, el rango de horas en que se mueven
las historias de 1 punto historia va a ser diferente al de las historias de 8 puntos
historia.
Esto significa que la distribución de las estimaciones pequeñas será más exacta que las
grandes. Estimar el tamaño de una historia que requiere modificar un texto en una Web
debe ser mucho más fácil que calcular el esfuerzo de una historia que requiere cambiar
varias tablas de la BBDD.
Para entender cómo estimar y planificar un proyecto con puntos historia es útil y
necesario conocer el concepto de velocidad, una medida del ratio de avance del
proyecto(Cohn, 2005).
La velocidad se calcula sumando el número de La velocidad media del equipo,
puntos historia de cada historia de usuario terminada obtenida de datos históricos,
durante una iteración del proyecto (o sprint en es un dato de incalculable
terminología de la metodología Scrum). Ejemplos:
valor a la hora de planificar
Velocidad
completados)
1 45
2 21
3 35
4 44
5 29
Por ejemplo, supongamos que todas las historias de usuario se han estimado y que la
suma de esas estimaciones es de 100 puntos historia. En base a la experiencia previa
sabemos que la velocidad media del equipo es de 11 puntos historia por iteración de
dos semanas. Ya que 100/11 = 9,1 se puede estimar que el proyecto necesita 9,1
iteraciones, con un enfoque conservador redondeando a 10 iteraciones. Dado que cada
iteración es de dos semanas, nuestra estimación de la duración es de veinte semanas.
Podemos contar hacia adelante veinte semanas en el calendario y hacer el plan de
proyecto(Cohn, 2005).
Equipo A Equipo B
Media: 10 Media: 10
Desviación:0.7 Desviación:2.5
Tabla 13.Ejemplo de dos equipos con la misma velocidad media pero distinta
desviación
Capítulo
5
"No seas de una única forma, adáptate y construye la tuya propia, y déjala crecer, sé
como el agua. Si pones agua en una taza se convierte en la taza. Si pones agua en
una botella se convierte en la botella. Sé agua amigo mío".
--Bruce lee
Cuando creamos un “plan de release” nuestro objetivo era planificar y prever qué iba a
suceder durante las diferentes iteraciones que se irían sucediendo hasta concluir con
una release. Si los roadmap se hacían a semestres o años (planificando varias
releases), normalmente el plan de una release se crea para unos pocos meses o
semanas.
Cada uno de estos planes de release estará formado por el número de iteraciones que
consideremos adecuado. Aún así el plan de release no tiene que describir el detalle de
cómo se va a trabajar dentro de cada una de las iteraciones que abarcan dicha release,
eso lo dejaremos para el plan de la iteración.
A la hora de planificar las releases haremos uso, para recoger necesidades y requisitos,
de las historias de usuario. Las historias de usuario, que ya vimos con detalle, recogen
de una manera particular aquello que el negocio o el usuario desea que se implemente.
Y este punto involucra a los usuarios, clientes, o figura que los representa, el product
owner.
Otro aspecto que no debe pasarse por alto es que durante el tiempo que transcurre hasta
que se obtiene la release iremos iterando, es decir, el ciclo de vida de trabajo
será iterativo, más concretamente, iterativo e incremental, ya que este ciclo de vida es
el corazón de un proyecto ágil.
Pero no sólo el ciclo de vida incremental es el que propone una manera alternativa al
desarrollo en cascada. Hay muchas otras propuestas (como el ciclo de vida en espiral),
donde una de las más destacadas es el “ciclo de vida iterativo”. El desarrollo iterativo
se centra en mejorar y revisar reiterativamente el producto ya creado. En cada ciclo se
revisa y mejora el trabajo. Por ejemplo, cuando se desarrolla rápidamente un producto,
muchas veces no se hace con todos los detalles ni la máxima calidad, pero se hace con
la idea de que el usuario vea cuanto antes un prototipo, para que en sucesivas
iteraciones dicho producto se vaya mejorando y afianzando.
En este tipo de ciclo de vida, al final de cada iteración se consigue una versión
operativa del software, que añade nuevas funcionalidades y mejoras sobre la versión
anterior.
Es importarte recordar que el ciclo de vida iterativo e incremental está compuesto por
dos “partes”, por lo que no hay que olvidar “la parte iterativa”, ya que en la práctica,
muchas veces nos encontramos con que los equipos olvidan la parte iterativa, olvidan
que cada prototipo debe mejorar en calidad al anterior, y se centran solo en añadir
funcionalidad. El problema de esto es que pasadas unas cuantas iteraciones, el
producto se hace difícilmente mantenible, por su baja calidad, y por ello es muy difícil
añadir nuevas funcionalidades, alargándose las iteraciones, los ciclos, y muriendo la
esencia de todo esto.
5.2.Cuánto tiempo debe durar una iteración
¿Qué debería determinar la duración más recomendable para una iteración? Sin que
exista una norma exacta, los siguientes factores pueden servirnos de ayuda:
La frecuencia con la que hay que mostrar el software a los usuarios. Normalmente,
el software se puede mostrar al final de una iteración (demos de prototipos), por
lo que a mayor frecuencia requerida para mostrar demos y avance, menor debiera
ser la duración de la iteración.
En línea con el anterior, debiéramos pensar con qué frecuencia hay que medir, o
mostrar, el progreso del proyecto. En teoría sólo al final de una iteración podemos
medir con precisión la cantidad de trabajo que realmente ha sido completado.
El ciclo de vida incremental, contiene las fases del cascada estándar, pero cada
iteración trabaja sobre un sub conjunto de funcionalidad. Desarrollar por partes el
software, después integrarlas a medida que se completan.
Con todo, por ejemplo, si tenemos cuatro meses de proyecto, y nuestras iteraciones son
de un mes de duración, tendremos tres momentos (al final de la iteración 1, 2 y 3) para
tomar “feedback”, medir progreso y re-ajustar prioridades.
Otra consideración clave es el tiempo que tarda una idea (un requisito funcional, una
historia de usuario) en transformarse en software. Por ejemplo, consideremos de nuevo
iteraciones de cuatro semanas. Suponiendo que una nueva idea aparece en el medio de
una iteración, esa idea solo puede introducirse en la próxima versión, que comenzará
en dos semanas. Dos semanas que quedan de la iteración en que aparece el nuevo
requisito, más cuatro de la siguiente, hacen que la nueva idea esté implementada en 6
semanas, y si 6 semanas es mucho para nuestro negocio... habrá que considerar
iteraciones menores.
Una última consideración. No olvides que a menor tiempo de iteración mayor nivel y
sofisticación debe tener el equipo de desarrollo, por lo que la madurez,
compenetración, experiencia, cualidades técnicas, etc., juegan un papel importante.
Pero conviene decir que han sido más los equipos que trabajan bien con iteraciones de
la misma duración. Es más, en equipos poco experimentados, variar la temporalidad de
la iteración suele conducir a problemas.
Las principales ventajas de tener sprint todos ellos de tiempo fijo viene de que:
En algunos equipos es frecuente el uso del llamado sprint o iteración cero, cuyo
objetivo son los preparativos previos a comenzar el desarrollo. Así, normalmente,
durante el sprint cero se realizan las tareas como las siguientes:
Autores como (Ambler, 2008), comentan que el sprint cero es aquel en que se organiza
el trabajo, se estudian requisitos iniciales, conceptualizaciones arquitectónicas
iniciales, se dejan listos los puestos de trabajo, la planificación inicial, y todo lo que se
necesita para iniciar el proyecto. Aunque para Ken Schawber(Schawber, 2008),
coautor de Scrum, el sprint cero no deja de ser una errónea forma de llamar a la
planificación previa al primer sprint.
El sprint de release es aquel que implementa aquellas tareas necesarias para poner el
sistema en producción. Aquel que muchos proyectos requieren al final de un ciclo de
release, es decir, después de un número de iteraciones o sprint previos a un paso a
producción. Un último sprint dedicado a preparar el paso a producción.
Sobre el sprint de release hay comentarios a favor y en contra, hay quien dice que es
necesario, y quien dice que debería evitarse, ya que el equipo debería dejar lo
suficientemente listas las cosas al final de un sprint regular como para que los pasos a
producción no requieran de ese tiempo dedicado exclusivamente al paso a producción.
Pienso que, en parte, la razón de su gran uso en el mundo del desarrollo software viene
de la formación que casi todos los ingenieros en informática o carreras técnicas han
recibido en gestión de proyectos, aún hoy en un alto porcentaje, basada en aprender
Gantt, Perts, rutas críticas, etc. Es decir, planificación tradicional, aquella heredada de
la gestión y construcción de productos físicos cómo barcos, casas o coches.
Si tienes que usar Gantt, intenta evitar malas prácticas que suelen asociarse a los
mismos
Y esa “visión Gantt” de que fabricar software debe hacerse como se construyen cosas
físicas está tremendamente arraigada en la cultura de ciertas organizaciones,
incrementada aún más en los últimos años por el uso de macro marcos de gestión de
proyectos (no específicos para software) como PMP.
En una planificación ágil el Gantt se sustituye por los planes de release, los ciclos de
vida iterativos y los seguimientos con técnicas como los “burndown chart” (que
veremos en el capítulo 7).
Barras Gantt que muestran porcentajes de avance del proyecto… asignados sin
ningún criterio.
En innumerables ocasiones he visto como los jefes de proyecto actualizan las barras
porcentuales de avance de un Gantt según el tiempo transcurrido (que no el trabajo
terminado) o sólo preguntando a la gente “cómo va el proyecto”. Y, por razones como
estas, muchos de los diagramas Gantt están al 90% de avance durante el 90% de la vida
del proyecto.
O “estimar” de adelante hacia atrás. Es decir, fijada una fecha de finalización del
proyecto, normalmente impuesta por motivos comerciales, construir un Gantt cuyas
barras y recursos encajen de cualquier forma entre la fecha actual y la de fin.
Un recurso muy usado en estos casos es tener que abusar de las tareas que,
supuestamente, se pueden hacer en paralelo. En una planificación ágil, se asume que
hay incertidumbre al comienzo del proyecto y se está abierto a ajustar la planificación.
Capítulo
6
-- Sun Tzu
El objetivo del plan de una iteración es describir y estimar las tareas que se van a
abordar en las semanas que dura una iteración.
Las historias de usuario, los requisitos, se dividen en tareas. Las tareas ya son algo muy
concreto a realizar durante una iteración, con el objetivo de completar una o varias
historias de usuario.
La Tabla 14 muestra varios ejemplos de tareas típicas en las que se podría haber
dividido una historia de usuario.
Pruebas de
Tarea definida para desarrollar las pruebas de aceptación
aceptación
automáticas que facilitarán la validación de la historia por parte
asociadas a la
del cliente y/o usuario.
historia
Refactorización Esta tarea se debe incluir para cada historia con el fin de evitar una
del código complejidad excesiva del código.
Pruebas
Pruebas ad-hoc para una historia.
exploratorias
Para las primeras estimaciones e iteraciones tendremos que hacer una aproximación al
tiempo real, pero para las siguientes sería aconsejable ir tomando datos de qué ha ido
sucediendo en iteraciones previas.
Así, sería interesante registrar las horas de trabajo que cada miembro del equipo
realmente ha dedicado a la iteración. Una sencilla tabla que tenga en filas a las
personas y una columna de tiempo real dedicado nos puede ayudar a hacer previsiones
más exactas en el futuro. En la Tabla 15 se puede ver el tiempo real de trabajo.
Ideal Real
1 hora de reuniones
1 hora de email
-- David Viscott
Los “BurnDown” son una representación del trabajo que queda por hacer y a su vez,
permiten comparar el progreso del proyecto o dela iteración, con la planificación
inicial.
El gráfico BurnDown proporciona información muy útil para predecir las desviaciones
y ver el avance. La Figura 14 representa un ejemplo de esa gestión. La línea verde
representa el caso más optimista de trabajo que se puede entregar en el tiempo, la línea
roja representa la pesimista. Ambos rangos deben ser conocidos por el product owner
en función de la velocidad del equipo (ver epígrafe 4.7).
Por ejemplo, imaginemos que se espera cierta funcionalidad del producto en una fecha
dada, como se representa en la Figura 15. Según todo lo anterior, el product owner
debe exponer a los usuarios el caso más optimista y el más desfavorable, para que
tengan en consideración que puede haber mayor o menor funcionalidad entregada, o que
valoren ampliar el tiempo de proyecto.
-- Manifiesto Ágil
La manera más natural de formalizar un contrato para un proyecto ágil es la de pago por
tiempo de trabajo (o por número de sprint o iteraciones), también conocido como “por
servicio” o “por bolsa de horas”. En su forma más básica, el proyecto duraría hasta que
la versión final del producto software esté terminada. Y los pagos se harían
normalmente por el tiempo que ha durado el proyecto, por iteración o por número de
sprint. Si el tiempo estimado de proyecto es muy largo también se puede facturar al
finalizar cada sprint.
El problema de esta modalidad es que la mayoría del riesgo lo tiene el cliente que
subcontrata. El miedo de muchos clientes es que el proveedor podría relajarse, dando
lugar a más iteraciones de las necesarias y mayores costes.
Para ello, en este tipo de contratos se suelen introducir cláusulas que reducen el riesgo
del cliente. Lo normal es cerrar de antemano un tiempo máximo de proyecto, dando la
opción al cliente de cancelar el proyecto o renegociar una continuación. O de manera
similar, introducir hitos de chequeo cada cierto tiempo. Por ejemplo, en un proyecto se
podría determinar que cada cuatro meses el cliente podrá decidir si continúa o cancela
el proyecto.
Este es uno de los esquemas más recomendados. En algunos sectores del desarrollo
software, como por ejemplo la banca, se ha introducido con fuerza un modelo en el que
el proveedor factura por la cantidad de funcionalidad desarrollada. Y para cuantificar
la funcionalidad entregada se mide con diferentes técnicas, como por ejemplo, la
técnica de puntos función para medir el tamaño de la funcionalidad. Cabe destacar que
el cliente paga por puntos función entregados, no por los que se estimaron, por lo que
suele ser un esquema bastante eficiente para ambas partes. Asimismo se puede replicar
este modelo cambiando puntos función por puntos de historia de usuario o similar.
El cliente estima los puntos historia, los revisa con el proveedor y se factura en función
de puntos historia entregados.
El cliente, redacta unos requisitos en un momento, tan temprano, que muchas veces
escribe sólo ideas poco concretas e incompletas de lo que se supone necesita que haga
el software, y que normalmente, cuando avanza el proyecto, difieren de lo que
realmente necesitaba, lo cual acaba sabiendo cuando recibe la primera entrega.
Esto sucede porque muchas veces hasta que no se ve un primer prototipo no se sabe
bien lo que se necesita, o sucede porque se toman mal los requisitos, o sencillamente
porque las necesidades cambian con el tiempo y lo que se creía necesario hoy mañana
puede no serlo.
El proveedor, en base a esos requisitos (como dijimos, la mayoría de las veces poco
concretos, o que difieren de lo que realmente se necesitará) hace una estimación del
tiempo de desarrollo.
Bajo estas premisas, el objetivo del proveedor, será terminar en plazo… como sea,
para evitar la penalización típica que llevan estos contratos por retrasos. Al proveedor
le preocupa entregar sólo lo que dicen los requisitos del pliego y no entregar un
software que cumpla las necesidades de los usuarios (que no siempre es lo mismo).
Si a lo largo del proyecto alguien piensa (el cliente, por ejemplo) que han cambiado, o
eran erróneos, etc., da igual. Esos requisitos están firmados y hay penalización por
incumplimiento. No hay cambio de requisitos.
El software se entregará en fechas a toda costa (suele haber penalización por retraso).
Lo cual suele ser en detrimento de dejar tiempo para calidad software, metodologías,
prototipos con usuarios, etc.
Normalmente, este tipo de contrato persiste por el temor del cliente a caer en manos del
proveedor, y este pudiera alargar y alargar, meses y meses, el desarrollo software (y
con ello el presupuesto).
Capítulo
9
No obstante, permíteme sólo unas páginas finales para trasmitirte algunos últimos
consejos que todo buen superviviente a un proyecto software acaba teniendo claro con
el tiempo…
Recuerda que, aún utilizando el mismo método para calcular los puntos historia, dos
empresas - equipos pueden obtener estimaciones diferentes… ¿por qué? Porque una,
por ejemplo, puede desarrollar en una tecnología, y la otra empresa en otra, una puede
tener personal más cualificado, otra utilizar una arquitectura diferente, etc.
Por ello, no olvides que el punto historia hay que ajustarlo a la realidad de la empresa
y a los requerimientos tecnológicos concretos de cada proyecto.
9.3. Consejo 3: Estima usando rangos
Recuerda que, los métodos tienen siempre un error y nunca son exactos. Es decir, que
ningún método de estimación nos dirá cosas del tipo “el proyecto terminará el día
miércoles 12 de noviembre a las 12:33”. Eso es imposible en proyectos medianos o
grandes.
Por ello, cuando trabajamos con métodos de estimación el resultado debe ser rangos
del tipo “el proyecto terminará la primera quincena de noviembre”, “la última semana
de noviembre”, etc.
Scrum es una metodología ágil para la gestión de proyectos; por lo que queda fuera de
su ámbito el tratamiento explicito de, por ejemplo, el testing, el control de versiones, el
diseño, arquitectura, etc. Su principal objetivo es obtener resultados (normalmente
prototipos) pronto y adaptarse a los cambios (normalmente, los cambios en los
requisitos). Por otro lado, es un “framework”, por lo que es necesaria su adaptación en
cada organización, o incluso a cada equipo (Sutherland & Schwaber, 2011).
De manera sintetizada, los pilares de Scrum son, principalmente, dos: el ciclo de vida
iterativo e incremental (en iteraciones cortas) y diversas reuniones a lo largo del
proyecto.
Una de las bases de las metodologías ágiles es el ciclo de vida iterativo e incremental.
El ciclo de vida iterativo e incremental es aquel en que se va liberando el producto por
partes, periódicamente, iterativamente, poco a poco, y además cada entrega es un
incremento de funcionalidad respecto a la anterior. Esto difiere del ciclo de vida en
cascada, en el que las fases del ciclo de vida (requisitos, análisis, diseño, etc.) se
realizan (en teoría) una única vez, y el inicio de una fase no comienza hasta que termina
la fase que le precede.
En Scrum, la figura del product owner, que vendría a ser el usuario o el cliente, es el
responsable de gestionar el product backlog y de crear las historias de usuario.
Una vez seleccionadas las historias de usuario que se van a desarrollar en el sprint, el
equipo técnico las descompone en tareas, las cuales forman el Sprint Backlog, que será
inamovible durante el sprint.
Las Reuniones
El segundo pilar más importante de Scrum son las reuniones. Su importancia reside en
que las reuniones son la base para lograr transparencia y comunicación, y posibilitan
algo característico en un equipo ágil: que sea auto-gestionado y multifuncional. Las
reuniones se realizan a lo largo de todo el proyecto, según las siguientes tipologías:
- Reunión diaria (Daily Scrum). Máximo 15 minutos, en la que se trata qué se hizo
ayer, que se va a hacer hoy y que problemas se han encontrado.
- Reunión de Revisión del sprint (Sprint Review Meeting). Al final de cada sprint, y
se trata qué se ha completado y qué no. También se muestra el trabajo al Product
Owner.
- Retrospectiva del sprint (Sprint Retrospective). También al final del sprint, y sirve
para que los implicados den sus impresiones sobre el sprint, y se utiliza para la mejora
del proceso.
Aunque aquí hablamos de la “metodología FDD”, siendo rigurosos, al igual que sucede
en Scrum, FDD es, concretamente, un “framework” o una meta-metodología, es decir,
que necesita ser adaptado al caso concreto.
Los dos primeros procesos son secuenciales y definen el modelo global. Los tres
finales se iteran para cada “feature” (que vienen a ser los requisitos).
Una de las cosas más polémicas de los proyectos ágiles es cómo y cuándo se crea el
diseño y la arquitectura. En el mundo ágil, hay incluso quienes, erróneamente, asocian
la palabra diseño con el ciclo de vida en cascada, tan denostado por el agilísimo
extremo.
En la metodología ágil FDD si se recomienda, y deja claro, que hay que tener un diseño
previo. No un diseño documentado y detallado al máximo, pero si un borrador de la
arquitectura. Y que además éste se construya de manera iterativa. El diseño es más en
anchura que en profundidad. La profundidad (los detalles) van saliendo iterativamente
a lo largo del proyecto. El diseño es un artefacto vivo.
En la metodología ágil FDD a los requisitos se les llama “features”. FDD define una
feature como una pequeña función orientada al cliente. Por pequeño se entiende que
suele durar de 1 a 3 días de desarrollo.
FDD organiza sus “features” en una jerarquía de tres niveles. Proyectos o equipos más
grandes agradecen esta jerarquía. Jerarquizar los requisitos ayuda a manejar un mayor
número de requisitos.
Tercer y último proceso de los que conformarían la “iteración cero”. Su objetivo, crear
una planificación inicial y asignar responsabilidades.
Después de una inspección diseño exitosa, los propietarios de cada clase, o partes del
código, desarrollan el software.
Para acabar, la metodología ágil FDD podríamos considerarla orientada a equipos más
grandes, con más personas que aquellos a los que normalmente se aplican otras
metodologías ágiles como Scrum. La metodología ágil FDD contempla la figura del
jefe de proyecto y una fase de arquitectura.
Coad, P., De Luca, J., & Lefebvre, E. (1999). Java modeling in color with UML:
Enterprise components and process
Cohn, M. (2005). Agile estimating and planning. Upper Saddle River, NJ, USA.
Prentice Hall PTR.
Haugen, N. C. (2006). An empirical study of using planning poker for user story
estimation. Artículo presentado en Agile Conference, 2006, pp. 9.
Humble, J., & Farley, D. (2010). Continuous delivery: Reliable software releases
through build, test, and deployment automation Addison-Wesley.
Kniberg, H., & Skarin, M. (2010). Kanban and scrum - making the most of both
Lulu Enterprises Inc.
Palmer, S., & Felsing, J. (2002). A practical guide to feature driven development.
A Practical Guide to Feature Driven Development,
Pichler, R. (2012). Working with an agile product roadmap. 2013. Disponible en:
http://www.romanpichler.com/blog/product-planning/agile-product-roadmap/
Sutherland, J. (2008). Money for nothing and your change for free. agile 2008
presentation. Fecha de consulta: 17 mayo 2012. Disponible en:
http://jeffsutherland.com/Agile2008MoneyforNothing.pdf
Sutherland, J., & Schwaber, K. (2011). The scrum papers: Nut, bolts, and origins
of an agile framework. Fecha de consulta: 17 mayo 2012. Disponible en:
http://jeffsutherland.com/ScrumPapers.pdf
2. En el texto utilizaremos las palabras en inglés, product owner, por ser de mayor
uso en castellano.
3. Para este ejercicio, puedes pensar en la serie “The Big Bang Theory” o cualquier
otra. Aunque si no conocías esta serie aprovecho para recomendártela.
Table of Contents
1. Hoja de ruta del superviviente a una planificación software usando técnicas ágiles
2. El Roadmap de un proyecto ágil
2.1. Los temas
2.2.¿Cuánto tiempo debe transcurrir entre releases?
2.3.“Continuous delivery” y “DevOps”
2.3.Estimación con T-SHIRT
3. "Product owner” y las historias de usuario
3.1.Los tipos de Product Owner
3.1.1.Cuando el cliente es el product owner
3.1.2.Cuando un representante del cliente toma el rol
3.1.3.El product owner y el product manager
3.2.Responsabilidades de un product owner
3.3.Historias de usuario
3.3.1.Creando buenas historias de usuario
3.3.2.El valor de una historia de usuario
3.4.Técnicas para priorizar y dar valor a las historias de usuario
3.4.1.Modelo Kano
3.4.2.Técnica MoSCoW
3.5.El product backlog y los mapas de historias
3.5.1.Relación entre el Roadmap y el Product Backlog
4. Estimando un proyecto ágil
4.1.La definición de los requisitos afecta a la estimación
4.1.1.Definir las historias de usuario sólo al comienzo de cada iteración
4.1.2.Detallar primero todos los requisitos y luego iterar
4.2.Los puntos historia
4.3.La escala de puntos historia
4.4.La Técnica de estimación “Planning Poker”
4.5.¿Puntos historia o estimación en horas?
4.6.¿A cuántas horas equivale un punto historia?
4.7.Refinando la estimación con la Velocidad del equipo
5. Planificando las iteraciones
5.1.Ciclo de vida ágil: iterativo, incremental y de iteraciones cortas
5.2.Cuánto tiempo debe durar una iteración
5.3.Deberían las iteraciones durar el mismo tiempo?
5.4.El “Sprint cero”
5.5.El “Sprint de release”
5.6.¿Y mis Diagramas Gantt? ¿volveré a utilizarlos?
5.6.1.Malas prácticas relacionadas con el uso de Gantts planificando
software
6. El Plan de una iteración
6.1.Tiempo Ideal y tiempo Real
7. El seguimiento del proyecto
8. La subcontratación del proyecto
8.1. Pago por tiempo o por iteración
8.2. Pago por punto historia
8.3. El contrato cerrado
8.3.1.El contrato cerrado y los proyectos ágiles
9. Consejos finales para el superviviente
9.1. Consejo 1: no estimes sólo el desarrollo software
9.2. Consejo 2: encuentra tu propio método de estimación
9.3. Consejo 3: Estima usando rangos
9.4. Consejo 4: Siempre acompáñate de la estimación por analogía
ANEXO I.Scrum
ANEXO II. FDD
Referencias