<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programania&#187; SCRUM</title>
	<atom:link href="http://www.programania.net/category/scrum/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programania.net</link>
	<description>Ingeniería del Software</description>
	<lastBuildDate>Mon, 05 Jul 2010 15:20:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Lo que los gurús nunca te cuentan sobre Kanban y SCRUM</title>
		<link>http://www.programania.net/desarrollo-agil/lo-que-los-gurus-nunca-te-cuentan-sobre-kanban-y-scrum/</link>
		<comments>http://www.programania.net/desarrollo-agil/lo-que-los-gurus-nunca-te-cuentan-sobre-kanban-y-scrum/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 08:31:03 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[Inyección de dependencias]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[TDD - Test Driven Development]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[métodos ágiles]]></category>
		<category><![CDATA[métricas]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=1147</guid>
		<description><![CDATA[críticas a kanban y scrum]]></description>
			<content:encoded><![CDATA[<p>A principios de año comencé un nuevo proyecto de migración de una extensa intranet. Un proyecto que me va a llevar todo un año y, por supuesto, una buena oportunidad para aplicar todo lo que he ido leyendo sobre métodos ágiles (<a href="http://www.programania.net/desarrollo-agil/la-verguenza-de-la-ingenieria-del-software/">y superar la vergüenza del desarrollo de software</a>).</p>
<p>Realizar el Product Backlog no fue algo especialmente complicado. No se trata de un proyecto especulativo con un &#8220;escenario siempre cambiante&#8221;, las user stories básicamente se sacaban de &#8220;lo que hace la vieja intranet que lo haga la nueva&#8221;. Por supuesto nada es tan sencillo (cada user story tiene que tener el tamaño adecuado, etc.), pero no me pararé aquí.</p>
<p>La priorización de las user stories se hizo pensando en la mejor forma de ponerlas en marcha. Aquí hay una cosa clave: <strong>la puesta en marcha no es &#8220;desplegarla en el servidor de producción&#8221;, sino que los usuarios realmente se pongan a utilizarla y cumplan sus necesidades. Son dos cosas muy distintas.</strong></p>
<p>Una vez definidas la user stories y priorizadas, solo quedaba decidir la manera de ir poniéndolas en marcha. Aquí teníamos dos posibles filosofías para seguir:</p>
<ul>
<li> <strong>scrum</strong>: cada X semanas poner en producción una serie de user stories y que los usuarios comiencen a utilizarlas (desactivando la posibilidad de hacerlo en la intranet migrada).</li>
<li><strong>kanban</strong>: cada vez que una nueva user story es terminada (desarrollada, testeada, nosecuantizada&#8230;) ponerla en marcha.</li>
</ul>
<p>Aquí entra el factor humano. Ir poniendo una a una las user stories en producción introducía mucho ruido en los usuarios (&#8220;ahora te quito un botón de aquí y te lo pongo allá&#8221;), así que comenzamos haciendo unos sprints de 3 semanas, con un periodo inicial de puesta en marcha del proyecto.</p>
<p>Aquí todo normal. El escenario es bastante favorable para la aplicación de métodos ágiles. Quizá la única característica algo molesta es que el presupuesto era fijo. Pero dado que el alcance también era fijo, no era uno de los principales caballos de batalla: se aplicó un<a href="http://www.presionblogosferica.com/2009/09/14/el-horno-de-las-magdalenas/"> &#8220;pos se tienen que poder&#8221; y punto</a>.  <img src='http://www.programania.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Bueno&#8230; ¿y qué es lo que los gurús nunca te cuentan sobre Kanban y SCRUM? Porque hasta ahora todo lo que he escrito es de manual.</p>
<p><strong>Lo que los gurús nunca te cuentan es que para poder hacer todo esto necesitas tener un entorno de desarrollo EXCELENTE y un conocimiento TÉCNICO de ALTO NIVEL.</strong></p>
<p>Detrás de tanta filosofada Lean hace falta que, a nivel técnico muchas cosas funcionen como un reloj:</p>
<ol>
<li>si quieres poner en marcha nuevas funcionalidades en periodos cortos (primero igual lo haces cada tres semanas, pero luego te das cuenta de que quizá sea mejor cada dos&#8230; finalmente y cuando el proyecto ya va como un tiro&#8230; ambicionas hacer kanban) necesitas un buen sistema de integración contínua TOTALMENTE AUTOMATIZADO.</li>
<li>para automatizar algo, debes estar haciéndolo de manera manual. Si automatizas la ejecución de pruebas unitarias&#8230; pero no estabas haciendo pruebas unitarias&#8230; estarás automatizando la nada absoluta. A veces uno se pone como objetivo algo técnico &#8220;tener un hudson con un phing, que genere nosecuantas métricas inútiles y lo automatice toro toro toro&#8221;&#8230;</li>
<li>integración continua implica TDD (o al menos pruebas unitarias), que implican una MUY BUENA orientación a objetos, que implica un buen uso de patrones (sobre todo de inyección de dependencias) y un conocimiento bastante profundo de los frameworks que utilizas (tanto para pruebas como para desarrollar).</li>
<li>integración continua implica el uso de un repositorio de versiones (subversion, git, loquesea&#8230;). Pero no vale con hacer unos commits aquí y allá: seguramente vas a necesitar branches y los consiguientes merges. Y seguramente te van a surgir unos maravillosos conflictos que vas a tener que saber solucionar. El conocimiento de tu repositorio de versiones tiene que ser MUY BUENO.</li>
<li>integración continua implica la división entre el servidor de desarrollo (probablemente uno para cada programador), el de pruebas y el de producción. Lo cuál implica una MUY BUENA gestión de configuraciones y que tu aplicación sepa en cada momento si está en pruebas y debe coger la configuración de pruebas o cuál. Esto me remite al punto 1: si tienes un sistema totalmente AUTOMATIZADO de integración continua capaz de desplegar tu aplicación en el servidor de pruebas o en el de producción como si no costara, estás triunfando. En caso contrario, prepárate a perder el tiempo a base de bien.</li>
<li>integración continua <a href="http://www.smartsite.es/el-oficio-y-el-negocio/scrum-agile-beta-desarrollo-iterativo-incremental-y-la-evolucion-continua-la-asignatura-pendiente-de-los-clientes-940.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+smartsite%2FqkVt+%28Smartsite%29">implica desarrollo evolutivo del producto, lo cuál implica un MUY BUEN CLIENTE</a> capaz de hacer piña contigo y que cuando los usuarios monten en cólera porque se sienten algo mareados al ver botones aparecer y desaparecer, al verse obligados a dar feedback, etc. esté contigo. También hace falta que tenga fe en que &#8220;la versión que hay ahora evolucionará para bien&#8221;. Si los puntos del 1 al 4 funcionan como un reloj, es posible que con el tiempo vayas ganando en credibilidad (porque al principio nadie te cree), sino prepárate para perder credibilidad hasta entre tus jefes&#8230;.</li>
</ol>
<p>O sea que necesitas un profundo conocimiento de la orientación a objetos, los patrones, las pruebas unitarias, subversion, hudson (y phing en mi caso), gestión de configuraciones, y un buen cliente. ¿Alguien da más?</p>
<p>A lo que voy es a que las metodologías ágiles sólo marcarán la diferencia cuando seas capaz de juntar la filosofía lean, con unas buenas prácticas de SCRUM o KANBAN y con una FORTÍSIMA CAPACIDAD TÉCNICA. <strong>Sin TÉCNICA no hay metodologías ágiles que valgan. </strong>Si cada iteración de dos semanas, tardas dos días en poner en marcha la nueva iteración, no vas a ningún lado. Tiene que ser algo AUTOMÁTICO y, para que sea automático, tiene que ser algo TÉCNICAMENTE MUY BUENO.</p>
<p>¿Pero entonces los métodos ágiles, la integración contínua, etc.. no valen la pena?<br />
Valen la pena <strong>totalmente</strong>. Si te quieres a ti mismo como profesional hazlo, porque verás la luz y marcarás la diferencia.</p>
<p>¿Entonces primero debo ser un experto en todo eso que has dicho y luego ya me hago ágil?<br />
No hay esa posibilidad. Intenta aplicar agilismo desde el principio en la manera en que te sea posible.</p>
<p>¿Entonces a dónde vas con este rant?<br />
<strong>A que sepas que va a doler. Eso es lo que no te cuentan los gurús. Que el camino es doloroso. </strong>Podrás poner los medios para que el dolor se minimice. Vas a pasarte horas y horas pegándote con problemas técnicos porque eres incapaz de hacer un commit por un tree conflict, o porque hudson da un extrañísimo &#8220;segmentation error&#8221; a un comando de terminal que ejecutas (y que funciona de lujo en la propia terminal), y no te digo ya como te tomes Selenium en serio&#8230;.</p>
<p>Dolerá aunque repito,<strong> vale la pena totalmente</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/lo-que-los-gurus-nunca-te-cuentan-sobre-kanban-y-scrum/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Scrum en Biko2 por Angel Medinilla</title>
		<link>http://www.programania.net/desarrollo-agil/scrum-en-biko2-por-angel-medinilla/</link>
		<comments>http://www.programania.net/desarrollo-agil/scrum-en-biko2-por-angel-medinilla/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 08:48:49 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[TDD - Test Driven Development]]></category>
		<category><![CDATA[calidad del software]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[pruebas de software]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=1024</guid>
		<description><![CDATA[Videos sobre scrum, de Ángel Medinilla]]></description>
			<content:encoded><![CDATA[<p>Está bien, por una vez, ver videos sobre SCRUM y la gestión ágil de proyectos bien explicados, divertidos&#8230; y en castellano. En <a href="http://www.biko2.com/actualidad/">Biko2</a> han hecho unas jornadas sobre SCRUM y nos ha dejado en <a href="http://www.youtube.com/bikolabs">su canal de Youtube</a>, algunas partes de las charlas de<a href="http://www.presionblogosferica.com/"> Ángel Medinilla</a>.</p>
<p>El Horno de las madalenas</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/oin0yjLyU50&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/oin0yjLyU50&amp;hl=es_ES&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>¡pos se tiene que poder!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/oin0yjLyU50&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/oin0yjLyU50&amp;hl=es_ES&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/scrum-en-biko2-por-angel-medinilla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestión de riesgos ágil e Impediment Backlog</title>
		<link>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/</link>
		<comments>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:17:05 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[gestión de riesgos]]></category>
		<category><![CDATA[impediment backlog]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=848</guid>
		<description><![CDATA[El impediment backlog para la gestión de riesgos en proyectos de software]]></description>
			<content:encoded><![CDATA[<p>Cuando escribí <a href="http://www.programania.net/desarrollo-agil/gestion-de-proyectos-objetivos/">un esquema sobre lo que supone la gestión de proyectos de software</a>, incluí la &#8220;Gestión de riesgos&#8221; como parte de la gestión tradicional de proyectos. Pero según voy investigando dentro de las metodologías ágiles no encuentro casi nada que hable explícitamente sobre cómo hacer ésta gestión de manera ágil.</p>
<p>Esto ocurre porque <a href="http://geeks.ms/blogs/rcorral/archive/2007/06/28/exprimiendo-scrum-scrum-y-la-gesti-243-n-del-riesgo.aspx">la gestión de riesgos en metodologías como SCRUM no se hace explícitamente, se hace de manera integrada en el propio proceso y, por lo tanto, de manera continua.</a></p>
<p>Quizá, la parte más explícita de la gestión de riesgos sea el <strong>Impediment Backlog</strong>. Un Impediment Backlog es una lista de incidencias que tienen que ser resueltas por el equipo y que el Scrum Master debe gestionar y asignar al alguien para que trabaje en ellas, y que será revisada en la reunión SCRUM diaria, tras la pregunta: ¿Qué está bloqueando el progreso del proyecto?</p>
<p>Creo que no vale la pena que explique nada más aquí porque, curiosamente, he encontrado <a href="http://geeks.ms/blogs/rcorral/archive/2007/06/28/exprimiendo-scrum-scrum-y-la-gesti-243-n-del-riesgo.aspx">el mejor artículo sobre el tema en castellano. Se trata de un análisis exhaustivo sobre los riesgos clásicos del desarrollo de software y cómo los afronta SCRUM</a>. Contentísimo de que la blogosfera de habla hispana de artículos de ésta calidad, oiga.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Agile Patterns: the technical cluster</title>
		<link>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/</link>
		<comments>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 08:37:00 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[agile patterns]]></category>
		<category><![CDATA[business smells]]></category>
		<category><![CDATA[technical clusters]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=744</guid>
		<description><![CDATA[patrones ágiles de desarrollo de software]]></description>
			<content:encoded><![CDATA[<p>Os aconsejo leeros el libro <a href="http://www.infoq.com/minibooks/agile-patterns">Patterns of Agile Practice Adoption</a>. Se trata de un libro un tanto esquemático pero bastante exhaustivo que analiza las prácticas ágiles poniéndolas en forma de patrones (qué es, cuándo usarlo, qué implica, etc.). Ademas, explica bastante bien los objetivos de las prácticas ágiles, e introduce un concepto, los Business Smells (cómo detectar cuando algo va mal) muy interesante.</p>
<p>Además, describe cómo ir adoptando las prácticas ágiles de manera paulatina, en forma de iteraciones. Una lectura realmente interesante para todos aquellos que pretendemos ir introduciendo las prácticas ágiles en nuestro proceso de desarrollo.</p>
<p>Además, en la parte final de libro, agrupa las prácticas ágiles por Technical Clusters, esto es, conjuntos de prácticas analizadas en los capítulos anteriores.</p>
<p>Lectura fácil y clarificadora. ¡ya os la estáis bajando!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Está PHP preparado para la empresa?</title>
		<link>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/</link>
		<comments>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:13:51 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[DSL - Domain Specific Language]]></category>
		<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[MVC - Model View Controller]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[SELENIUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[e-learning]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[moodle]]></category>
		<category><![CDATA[phpundercontrol]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=683</guid>
		<description><![CDATA[PHP está preparado para la empresa]]></description>
			<content:encoded><![CDATA[<div>Leyendo el artículo de la <a href="http://www.infoq.com/articles/enterprise-php">infoQ sobre si PHP está preparado para la empresa</a>, me vienen varios pensamientos a la cabeza. En primer lugar, preguntarse si un lenguaje está &#8220;preparado para la empresa&#8221; me parece muy del mundo Java. A día de hoy no sé muy bien qué significa. Y, en segundo lugar, sigo en mis trece con <a href="http://www.programania.net/desarrollo-agil/tendencias-en-el-desarrollo-de-software-2009/">la &#8220;tendencia&#8221; que comenté en un artículo anterior: creo que los lenguajes de backend están perdiendo importancia</a>. Dicho esto, ¿está PHP preparado para la empresa? Descomponiendo ésta pregunta en subpreguntas:</div>
<div></div>
<div><strong>¿Permite PHP técnicas ágiles como pruebas unitarias, funcionales, integración contínua, etc?</strong></div>
<div>SI (phpunit, selenium, phpundercontrol, etc.)</div>
<div></div>
<div><strong>¿Permite PHP aplicar metodologías ágiles de gestión de proyectos como SCRUM, etc?</strong></div>
<div>Dado que esto no tiene que ver con el código&#8230; ¿Cómo no?</div>
<div></div>
<div><strong>¿Tiene PHP los suficientes mecanismos de POO, patrones y buenas prácticas?</strong></div>
<div>Zend Framework es una buena demostración de la posibilidad de escribir programas MVC, active record, con DSL´s, Conventions over Configurations, etc.</div>
<div></div>
<div><strong>¿Qué tal funciona PHP cuando hace falta alto rendimiento?</strong></div>
<div>Cuando se trata de aguantar a millones de usuarios, PHP no tiene competidor. Está demostrado que ofrece mayor rendimiento que Java y, por supuesto, que Ruby. Cuando la clave no está en tener muchos usuarios sino en tener complejas transacciones con bases de datos, normalmente se confía en Java (el rey del software bancario). <a href="http://www.oracle.com/technology/global/lad-es/tech/php/index.html">Por mucho que Oracle siga gritando que se puede utilizar perfectamente PHP para estos menesteres</a>.</div>
<div></div>
<div><strong>¿Ofrece algunas ventajas sobre los otros lenguajes?</strong></div>
<div>PHP es, sin duda, el rey del software libre. Y prueba de ello son desarrollos como Moodle, el rey del e-learning, MediaWiki, el rey de los wikis, WordPress (nadie le iguala en plugins y themes, y es un potentísimo CMS) y es el lenguaje que permite tener un hosting más barato.</div>
<div></div>
<div><strong>Entonces, ¿es el mejor lenguaje, plataforma, y sólo deberíamos desarrollar en PHP?</strong></div>
<div>Pues no, claro. Si quieres hacer una aplicación no-web, en PHP lo tienes difícil (a menos de que sea con Flex). Aunque PHP permita montar un marco de desarrollo realmente profesional, no obliga y permite chapucear a base de bien, hay que tener más cuidado que en otros lenguajes, por ejemplo. Y es verdad que hasta ahora le faltaban mecanismos básicos de distribuión de código como PHAR o Namespaces.</div>
<div></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Desarrollo ágil con Kanban</title>
		<link>http://www.programania.net/desarrollo-agil/desarrollo-agil-con-kanban/</link>
		<comments>http://www.programania.net/desarrollo-agil/desarrollo-agil-con-kanban/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 07:21:42 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[lean software development]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=821</guid>
		<description><![CDATA[Desarrollo de software utilizando la metodología Kanban]]></description>
			<content:encoded><![CDATA[<p>Otra opción a la hora de configurar nuestra forma de desarrollar software, es utilizar Kanban. Kanban es una metodología que viene de la filosofía Lean Software Development (que a su vez provienen del Lean Manufacturing).</p>
<p>Kanban comparte con otras metodologías como <a href="http://www.programania.net/desarrollo-agil/feature-driven-development/">Feature Driven Development</a> o <a href="http://www.programania.net/category/scrum/">SCRUM</a> la idea de crear un Backlog del producto que tenga una serie de items (user stories, features&#8230;) priorizados. Pero la principal diferencia con otras aproximaciones ágiles, es que <strong>en Kanban no existen las iteracione</strong><strong>s</strong>.</p>
<p>En su lugar, Kanban se centra en controlar el <strong>WIP (Work In Progress)</strong>. Esto es, cuando hay poco WIP, se añade el item más prioritario del Product Backlog, y se controla que nunca se supere una cierta cantidad de WIP.</p>
<p>Dadas sus características, no se adapta a un desarrollo basado en entregas, y actualmente se utiliza especialmente en entornos de mantenimiento (corrección de bugs, etc.).</p>
<p>Dejo a continuación <a href="http://blog.crisp.se/henrikkniberg/2009/06/26/1246053060000.html">un comic que he encontrado en éste artículo y que me ha parecido que explica Kanban con enorme claridad</a>.</p>
<p><img class="alignnone size-full wp-image-833" title="Kanban1.JPG" src="http://www.programania.net/wp-content/uploads/Kanban1.JPG.jpeg" alt="Kanban1.JPG" width="516" height="636" /></p>
<p><img class="alignnone size-full wp-image-834" title="Kanban2.JPG" src="http://www.programania.net/wp-content/uploads/Kanban2.JPG.jpeg" alt="Kanban2.JPG" width="519" height="630" /></p>
<p><img class="alignnone size-full wp-image-835" title="Kanban3.JPG" src="http://www.programania.net/wp-content/uploads/Kanban3.JPG.jpeg" alt="Kanban3.JPG" width="522" height="634" /></p>
<p><img class="alignnone size-full wp-image-836" title="Kanban4.JPG" src="http://www.programania.net/wp-content/uploads/Kanban4.JPG.jpeg" alt="Kanban4.JPG" width="516" height="652" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/desarrollo-agil-con-kanban/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Feature Driven Development</title>
		<link>http://www.programania.net/desarrollo-agil/feature-driven-development/</link>
		<comments>http://www.programania.net/desarrollo-agil/feature-driven-development/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 06:48:58 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[feature driven development]]></category>
		<category><![CDATA[model driven architecture]]></category>
		<category><![CDATA[model driven development]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=770</guid>
		<description><![CDATA[Características diferenciales de Feature Driven Development frente a otras metodologías ágiles como SCRUM]]></description>
			<content:encoded><![CDATA[<p>Poco a poco, tengo intención de ir haciendo un repaso por todas las metodologías ágiles de desarrollo. En éste caso, quiero hacer un breve análisis de Feature Driven Development (FDD). Básicamente sus principios <em>Build a Feature List</em>, <em>Plan By Feature</em>, <em>Design by Feature</em>, <em>Build By Feature</em> son muy parecidos a <a href="http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/">SCRUM y su Product e Iteration BAcklog</a>. ¿Cuales son las principales diferencias?</p>
<ol>
<li>Quizá la mayor diferencia aquí sea que la &#8220;feature&#8221; normalmente es un <em>grano más gordo</em> que las &#8220;user stories&#8221;.</li>
<li>Hace más hincapié, a nivel de escritura de código, en <strong>Model Driven Development</strong>: <em>Build an overall model</em>, aunque en el resto de metodologías también recomiendan basarse en un primer diseño simple.</li>
<li><em>Individual code ownership</em>, que contrasta con el <em>Colective Code Ownership</em> de Programación Extrema. Básicamente en FDD cada uno es responsable directo de código que escribe, o cuál es &#8220;menos ágil&#8221; que si todo el mundo es responsable de todo el código (Colective Code Ownership). Lo que pasa es que, para equipos grandes, FDD lo considera más eficaz.</li>
<li>Habla explícitamente del &#8220;<a href="http://www.programania.net/diseno-de-software/scm-software-configuration-management/">Configuration Management</a>&#8220;&#8230; aunque todas las metodlogías ágiles lo recomiendan implicitamente, FDD lo hace explícitamente, como parte esencial del desarrollo.</li>
</ol>
<p>Todas las metodologías ágiles siguen una serie de principios que hacen que se parezcan entre sí. FDD, concretamente, te ofrece unas cuantas claves respecto a la forma de organizar el equipo y la forma de programar el código, que la hacen especialmente viable para equipos de desarrollo grandes desarrollando software complejo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/feature-driven-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Control de las funcionalidades de un producto con Google Docs</title>
		<link>http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/</link>
		<comments>http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 07:17:59 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[google docs]]></category>
		<category><![CDATA[increment]]></category>
		<category><![CDATA[iteration backlog]]></category>
		<category><![CDATA[product backlog]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=664</guid>
		<description><![CDATA[Gestión funcional con google Docs]]></description>
			<content:encoded><![CDATA[<p>Animado por el artículo de Enrique sobre <a href="http://phpsenior.blogspot.com/2009/06/google-docs-para-gestionar-proyectos.html">el uso de Google Docs para la gestión funcional de un proyecto</a>, publico un artículo que llevaba tiempo pensando sobre cómo lo estoy haciendo yo ahora mismo. Obviamente, el sistema que os expongo está basado en SCRUM, aunque no me atrevería a decir que estoy &#8220;haciendo SCRUM&#8221; precisamente. Si los términos que utilizo en el artículo (Product Backog, Iteration Backlog, etc&#8230;) te son nuevos, <a href="http://www.navegapolis.net/content/view/694/">quizá te interese leerte éste estupendo libro de introducción a SCRUM</a>. La captura que muestro a continuación, como se puede ver claramente, es inventada.</p>
<p><a href="http://www.programania.net/wp-content/uploads/captura-backlog2.jpg"><img class="alignnone size-full wp-image-694" title="captura-backlog" src="http://www.programania.net/wp-content/uploads/captura-backlog2.jpg" alt="captura-backlog" width="580" height="353" /></a></p>
<p>La razón por la que utilizamos Google Docs y no la clásica pizarra de SCRUM es porque el equipo no se encuentra físicamente en el mismo sitio. Quizá en el futuro utilicemos herramientas más específicas para la gestión de las user stories, iteration backlog e increment &#8230; pero a día de hoy éste sistema nos está funcionando por lo sencillo y visual que es.</p>
<p>El <a href="http://www.programania.net/desarrollo-agil/gestion-de-proyectos-objetivos/">objetivo de la gestión es planificar, ejecutar y controlar</a>. Veamos a continuación cómo planificamos, ejecutamos y controlamos el valor funcional de la aplicación.</p>
<p>Algunos apuntes sobre la <strong>ejecución</strong>:</p>
<ul>
<li>El documento recoge tanto el Iteration Backlog como el Increment. Pero es un documento que sólo ve el equipo. El cliente puede ver el Product Backlog (que está en un documento a parte) y se le envía una versión &#8220;más redactada&#8221; del Increment.</li>
<li>Cada iteración está en una tabla. Las tablas se guardan todas en el mismo documento, de tal manera que si vamos bajando por el documento podremos ver el backlog de las anteriores iteraciones. Las iteraciones se nombran con el primer día que se ejecutan (Iteración 18-05-2009) . Suelen ser de dos semanas.</li>
<li>Todos los proyectos son gestionados desde el mismo Iteration Backlog.</li>
<li>Marcamos la prioridad de una funcionalidad dentro de una iteración con <strong>[1]</strong>,<strong>[2]</strong> y <strong>[3]</strong>.</li>
<li>Se puede saber en qué estado está una Iteración porque:
<ul>
<li>Si está a la izquierda y sólo pone la prioridad([1]), es que está <strong>sin empezar</strong>.</li>
<li>Si está a la izquierda pero pone la prioridad  y un dueño ([1][Luis]), es que <strong>está empezada</strong> y la está haciendo Luis.</li>
<li>Si está a la derecha, es que <strong>está terminada</strong>.</li>
</ul>
</li>
<li>En el incremento, además de los items terminados en la iteración, se añaden los unplanned items (<strong>[U]</strong>), defectos (<strong>[D]</strong>) y cuestiones técnicas abordadas (<strong>[T]</strong>). Supongo que para los defectos sería mucho mejor utilizar un Issue Tracker, pero normalmente los clientes suelen querer comunicarse solo por teléfono, y bastante cuesta ya hacerles escribir un mail&#8230; como para intentar que se peguen con un Issue Tracker&#8230;</li>
<li>Los <strong>defectos tienen siempre prioridad</strong> sobre el desarrollo de nuevas funcionalidades.</li>
<li>La <strong>trazabilidad</strong> del proyecto es enorme, no sólo porque así tenemos un histórico de todas las iteraciones, sino porque el Google Docs guarda versiones de cada cambio que se hace.. así que podríamos retrotraernos a cualquier situación pasada del documento.</li>
</ul>
<p>Forma de detectar cómo va la iteración (<strong>controlar</strong>):</p>
<ul>
<li>Si se están generando muchos Unplanned Items (<strong>[U]</strong>) es que algo se diseñó mal.</li>
<li>Si se están generando muchos Defectos (<strong>[D]</strong>) es que la aplicación no está suficientemente probada.</li>
<li>Si se están atacando funcionalidades de prioridad [2] sin haber terminado las de prioridad [1], o se están atacando funcionalidades sin haber corregido los Defectos, probablemente se esté programando en el orden incorrecto.</li>
<li>Otras cuestiones muy relacionadas con las funcionalidades, las iteraciones, sería el <strong>control de costes y plazos</strong>: lo voy a dejar fuera del artículo por no extenderme.</li>
</ul>
<p>Algunos apuntes sobre <strong>planificación</strong> de las funcionalidades que se incluyen en cada iteración. En cada iteración se meten una serie de funcionalidades de el/los Product Backlog. Esas funcionalides cumplen que:</p>
<ul>
<li>Es la mayor cantidad de funcionalidades que se pueden hacer en dos semanas.</li>
<li>Son las funcionalidades que más valor añaden a la aplicación.</li>
<li>Camino crítico: desarrollar esas funcionalidades ayudan a descubrir posibles nuevos requisitos de forma lo más temprana posible (aunque no sea la que más valor añade), eliminar incertidumbres y hacer pensar al cliente (feedback) en qué es lo que quiere realmente. Esto también puede incluir desarrollar funcionalidades que ayuden a descubrir el diseño técnico (orientación a objetos, patrones de diseño) de la aplicación.</li>
<li>La que el cliente exija (a veces no hay más remedio: hay que implementar funcionalidades que el cliente exija aunque se le argumente que no son las que más valor añaden o las que más ayudan a descubrir la forma exacta de la aplicación).</li>
<li>Se evita programar funcionalides que no puedan probarse o ponerse en producción cuanto antes. Ejemplo: &#8220;Informe anual de ventas&#8221;, implementar éste informe en la primera iteración del producto, cuando todavía la empresa no ha introducido ni una sola venta, hará que no pueda probarse correctamente y traerá problemas meses después.</li>
<li>Resolver defectos tiene más prioridad que desarrollar nuevas funcionalidades, aunque dependerá de la gravedad del defecto. Los defectos son difíciles de planificar porque no sabes ni cuando ni cómo saldrán.</li>
<li>Es importante saber dividir o juntar funcionalidades para poder adaptarlas al tamaño de la iteración. No sirve para nada hacer &#8220;Listar facturas&#8221;, si no tienes un &#8220;añadir facturas&#8221;. Deberán ir en la misma iteración. Quizá &#8220;buscar facturas&#8221; pueda ir en la siguiente iteración, pese a que todo ello fuera planificado originalmente como &#8220;gestionar facturas (listar, añadir, modificar, eliminar, buscar)&#8221;.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>¿Existe una metodología llamada Programación Extrema?</title>
		<link>http://www.programania.net/desarrollo-agil/%c2%bfexiste-una-metodologia-llamada-programacion-extrema/</link>
		<comments>http://www.programania.net/desarrollo-agil/%c2%bfexiste-una-metodologia-llamada-programacion-extrema/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 11:17:17 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[TDD - Test Driven Development]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[XP - Programacion Extrema]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[test driven development]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=585</guid>
		<description><![CDATA[¿Es programación extrema, simplemente, una manera de llamar a hacer Test Driven Development e integración contínua?]]></description>
			<content:encoded><![CDATA[<p>Si visitamos <a href="http://www.extremeprogramming.org/">la página de Extreme Programming</a> vemos que hacer XP es combinar las siguientes prácticas:</p>
<ul>
<li><strong>Planning</strong>: user stories, release planning, small releases, project velocity, iterations, iteration planning, move people around, stand-up meetings</li>
<li><strong>Designing</strong>: simplificity, system metaphor, CRCcards, spike solutions, no funcionality added early and refactor.</li>
<li><strong>Testing</strong>: unit testing, acceptance test, etc.</li>
<li><strong>Coding</strong>: <a href="http://www.programania.net/category/integracion-continua/">integración continua</a> y TDD.</li>
</ul>
<p>Cualquiera de las metodologías ágiles puede cumplir la parte de planning, designing y testing. Es más, por seguir esos principios generales podrás decir que estás siguiendo una metodología ágil, pero nadie podrá adivinar cual exactamente. Como se explica en el <a href="http://www.navegapolis.net/content/view/832/58/">artículo más completo que yo he leído sobre todas los métodos ágiles</a> que hay, programación extrema sería una metodología <strong>más centrada en la solución técnica que en la gestión de proyectos</strong>. Por eso es tan fácil <a href="http://www.programania.net/desarrollo-agil/scrum-y-xp-desde-las-trincheras/">combinarla con metodologías más enfocadas a la gestión de proyectos como SCRUM</a>.</p>
<p>Respecto a la parte de coding, tenemos dos técnicas: Test Driven Development (TDD) e <a href="http://www.programania.net/category/integracion-continua/">Integración continua</a>.  Recordemos que hacer TDD es escribir las pruebas unitarias ANTES de escribir las clases que prueban. O sea que si utilizamos un servidor de integración continua y hacemos pruebas unitarias DESPUES de escribir las clases, no estaremos haciendo Programación Extrema.</p>
<p>El propio <strong>Ken Beck</strong>, en su libro <em>Extreme Programming Explained</em>, afirma que no hay en su metodología ninguna práctica revolucionaria, que sólo es la combinación de una serie de prácticas y su seguimiento de &#8220;manera extrema&#8221; (muy estricta).</p>
<p>Me queda la sensación de que &#8220;Programación extrema&#8221; <strong>fue una manera de llamar originariamente que a día de hoy está obsoleta</strong> y que se ha dividido en :</p>
<ol>
<li>las &#8220;prácticas ágiles básicas&#8221; (iterativo, incremental, fortalecer la comunicación directa, pruebas unitarias, funcionales, etc.)</li>
<li>integración contínua</li>
<li>TDD</li>
</ol>
<p>Si sigues los puntos 1 y 2, y haces pruebas unitarias después de escribir la clase, puedes estar siguiendo casi cualquier metodología ágil. Y si haces el punto 3, estarás haciendo Test Driven Development, que queda mucho más claro que decir &#8220;Programación extrema&#8221;.</p>
<p>¿Qué opináis vosotros? ¿Tiene cabida el término Programación Extrema?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/%c2%bfexiste-una-metodologia-llamada-programacion-extrema/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>¿Está UML muerto? ¿y RUP? Pequeña encuesta</title>
		<link>http://www.programania.net/desarrollo-agil/%c2%bfesta-uml-muerto-%c2%bfy-rup-pequena-encuesta/</link>
		<comments>http://www.programania.net/desarrollo-agil/%c2%bfesta-uml-muerto-%c2%bfy-rup-pequena-encuesta/#comments</comments>
		<pubDate>Wed, 27 May 2009 07:04:48 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[PROGRAMACION]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[UML - Unified Modeling Language]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[orientada a objetos]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[RUP]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=483</guid>
		<description><![CDATA[¿Está UML muerto? ¿y RUP? Pequeña encuesta.]]></description>
			<content:encoded><![CDATA[<p>Cuando estudié UML en la universidad parecía la panacea. Un salto cualitativo en el desarrollo de software que iba a dejar a la programación clásica a la altura del betún. Sin embargo, rara es la vez que lo utilizo, <a href="http://www.martinfowler.com/bliki/UmlAsSketch.html">aunque sea para hacer algunos esquemas</a>. UML prometía varias cosas:</p>
<ul>
<li>Convertirse en un lenguaje común por el que pasar especificaciones de programas entre programadores.</li>
<li>A partir de los diagramas generados, &#8220;pulsar un botón&#8221; y generar el código de tu aplicación.</li>
<li>A partir del código, &#8220;pulsar un botón&#8221; y generar la documentación de tu aplicación en UML.</li>
</ul>
<p>Sin embargo, por mucho que indago me quedan las siguientes sensaciones:</p>
<ul>
<li>No existen herramientas eficaces que permitan generar código útil a partir de diagramas.</li>
<li>Las que existen, se centran en el Modelo de dominio (que no es poco), pero desde luego no hay nada que coja un caso de uso, y lo convierta en código&#8230;.</li>
<li>Especificar lo suficiente un diagrama UML para poder generar código medianamente definido es un infierno. Da la sensación de que se tarda menos en programarlo.</li>
<li>El UML puede servir para transmitir ideas informales entre programadores (esquemas rápidos) pero nunca servirán para transmitir esas ideas a un cliente profano en el tema. Y como la documentación para el cliente es totalmente inevitable, vale más la pena que los programadores se entiendan leyendo la documentación que también es para el cliente (SCRUM y su Product Backlog, por ejemplo).</li>
<li>¿Por qué a la gente le gusta tan poco codificar y tanto hacer dibujitos?</li>
</ul>
<p>Y, por último, una serie de preguntas, a ver quién me arroja algo de luz:</p>
<ul>
<li>¿En qué escenarios utilizáis UML? ¿Utilizáis UML?</li>
<li>¿Es un UML totalmente especificado o sólo un esquema?</li>
<li>¿Utilizáis alguna herramienta que genere código a partir de UML?</li>
<li>¿Y alguna de reverse engineering que a partir del código genere documentación?</li>
<li>¿Alguien utiliza RUP (Rationa Unified Process), que supuestamente es la metodología alrededor del UML, junto con UML?</li>
<li>¿Alguien combina UML con alguna metodología ágil como SCRUM? ¿Se puede ser ágil diagramando con UML?</li>
</ul>
<p>Gracias adelantadas a el lector que se anime a comentar un poco el tema&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/%c2%bfesta-uml-muerto-%c2%bfy-rup-pequena-encuesta/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
