<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>La masa, el ladrillo, la bota, el bocadillo...</title><link>http://geeks.ms/blogs/rcorral/default.aspx</link><description>Los pensamientos, peleas y descubrimientos de Rodrigo Corral con Scrum, C++, C#, ASP.Net, Team System, Sql Server, Sharepoint, la arquitectura, la gestión de proyectos y el desarrollo de software en general...</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mlbb" /><feedburner:info uri="mlbb" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>43.062285</geo:lat><geo:long>-82.693273</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><item><title>Y la agilidad llegó a Visual Studio</title><link>http://feedproxy.google.com/~r/mlbb/~3/oEvbvUWsPw8/y-la-agilidad-lleg-243-a-visual-studio.aspx</link><pubDate>Mon, 05 Nov 2012 14:30:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:207324</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=207324</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=207324</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2012/11/05/y-la-agilidad-lleg-243-a-visual-studio.aspx#comments</comments><description>&lt;p&gt;Visual Studio 2012 es la cuarta versi&amp;oacute;n de las herramientas de desarrollo de Microsoft que pone al equipo de desarrollo en el centro de la herramienta. Fue en la versi&amp;oacute;n 2005 de Visual Studio cuando Microsoft pas&amp;oacute; de construir herramientas enfocadas en el desarrollador a crear herramientas enfocadas en el equipo. Desde entonces se ha recorrido un largu&amp;iacute;simo camino en el que los equipos de desarrollo versi&amp;oacute;n tras versi&amp;oacute;n hemos ido encontrando en Visual Studio novedades que extend&amp;iacute;an sus capacidades e integraban a todos los roles de un equipo de desarrollo en torno a una herramienta com&amp;uacute;n. Un hito importante fue la llegada, en la versi&amp;oacute;n 2010, de Test Manager y Lab Management como herramientas clave de ayuda a los perfiles de equipo centrados en la calidad. La adici&amp;oacute;n de estas herramientas convirti&amp;oacute; a nuestros &lt;em&gt;testers &lt;/em&gt;en ciudadanos de primera clase dentro de Visual Studio dot&amp;aacute;ndoles del soporte necesario para gestionar planes de prueba, resultados de pruebas y entornos en los que ejecutarlas. Pero sin duda la versi&amp;oacute;n 2012 supone un salto cualitativo en Visual Studio: Visual Studio es la primera versi&amp;oacute;n que es totalmente &amp;aacute;gil, la primera versi&amp;oacute;n que abraza los principios del desarrollo de software &amp;aacute;gil en todas sus dimensiones.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; es la agilidad en el desarrollo de software?&lt;/p&gt;
&lt;p&gt;Si bien este es un tema sobre el que se han escrito no decenas sino cientos de libros, la mejor s&amp;iacute;ntesis sigue siendo sin duda el &lt;i&gt;Manifiesto &amp;Aacute;gil&lt;/i&gt;, que pod&amp;eacute;is encontrar en &lt;a href="http://www.agilemanifesto.org"&gt;www.agilemanifesto.org&lt;/a&gt;. Este es un tema muy amplio, por lo tanto permitidme que me centre en lo relativo a que es una herramienta &amp;aacute;gil. Una herramienta &amp;aacute;gil es aquella que te ayuda a seguir los principios &amp;aacute;giles y sobre todo aquella que no se interpone en tu camino a la hora de trabajar. Si tuvi&amp;eacute;semos que resumir en un solo aspecto clave los valores del &lt;i&gt;agil&amp;iacute;simo&lt;/i&gt;, que son muchos, yo me quedar&amp;iacute;a con que &lt;b&gt;ser &amp;aacute;gil es crear software de valor para tus clientes de manera continua&lt;/b&gt;. Parece una definici&amp;oacute;n simple y evidente, pero esconde muchas dificultades.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Por qu&amp;eacute; es importante ser &amp;aacute;gil?&lt;/p&gt;
&lt;p&gt;Est&amp;aacute; claro que la agilidad no es un fin en s&amp;iacute; misma sino un medio para conseguir una mayor competitividad. Desde Plain Concepts hemos liderado la implantaci&amp;oacute;n de metodolog&amp;iacute;as &amp;aacute;giles y de Visual Studio como herramienta de ALM en un gran n&amp;uacute;mero de organizaciones de todos los tama&amp;ntilde;os. Si algo han tenido en com&amp;uacute;n todas estas empresas es cu&amp;aacute;l era el objetivo &amp;uacute;ltimo: desarrollar m&amp;aacute;s r&amp;aacute;pido y construir el software correcto. En la &lt;a href="http://www.versionone.com/state_of_agile_development_survey/11/"&gt;&amp;uacute;ltima encuesta sobre el estado del desarrollo &amp;aacute;gil&lt;/a&gt; el 80% de los encuestados respond&amp;iacute;an que acelerar el &lt;em&gt;time to market&lt;/em&gt; era uno de los principales motivos para para adoptar herramientas y &lt;i&gt;meto&lt;/i&gt;. El segundo motivo para adoptar metodolog&amp;iacute;as &amp;aacute;giles, con un 78%, es gestionar la respuesta ante cambios. Sin duda las metodolog&amp;iacute;as &amp;aacute;giles ayudan a cumplir estos objetivos, que creo que muchos de los lectores compartir&amp;aacute;n. Si nos preguntamos cu&amp;aacute;l es la mejor manera de mejorar nuestra velocidad de desarrollo sin duda la respuesta es construir el software correcto, son dos realidades &amp;iacute;ntimamente relacionadas. Si algo he aprendido en los &amp;uacute;ltimos a&amp;ntilde;os es que un aspecto vital del desarrollo de software es construir solo aquello que es de verdadero valor para los usuarios. No hay caracter&amp;iacute;stica m&amp;aacute;s r&amp;aacute;pida de construir, depurar y mantener que aquella que no se implementa. S&amp;eacute; que esto puede sonar a perogrullada pero es algo que a menudo olvidamos. Mirad el siguiente gr&amp;aacute;fico resultado de un estudio del Standish Group:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_77EC5AC8.png"&gt;&lt;img height="222" width="307" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_thumb_5F00_5B0335F3.png" border="0" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Es esclarecedor: &lt;b&gt;el 64% por ciento de las caracter&amp;iacute;sticas que construimos se utiliza raramente o nunca&lt;/b&gt;. Podemos pensar que a nosotros no nos pasa esto, que somos mejores que la media planificando qu&amp;eacute; caracter&amp;iacute;sticas entran o no en nuestro software&amp;hellip; De acuerdo, concedemos que somos mucho mejores, que solo el 30% o el 20% de lo que implementamos realmente no se usa&amp;hellip; &amp;iexcl;es un desperdicio inaceptable en cualquier caso! A la vista de estos datos queda claro que nada es m&amp;aacute;s efectivo a la hora de mejorar nuestra velocidad de desarrollo y construir el software adecuado que hacer una exquisita planificaci&amp;oacute;n de nuestro producto.&lt;/p&gt;
&lt;p&gt;&amp;iquest;C&amp;oacute;mo nos ayuda Visual Studio 2012?&lt;/p&gt;
&lt;p&gt;Sin duda, versiones anteriores de Visual Studio brillaban con fuerza a la hora de ayudar a los equipos a implementar pr&amp;aacute;cticas de ingenier&amp;iacute;a del software como pruebas unitarias, desarrollo guiado por pruebas, construcciones automatizadas, integraci&amp;oacute;n continua, etc&amp;hellip; y no imped&amp;iacute;an el desarrollo &amp;aacute;gil. Pero cojeaban en un aspecto clave: no nos ayudaban a planificar con agilidad y a visualizar nuestras planificaciones. Esto ha cambiado de manera radical en esta nueva versi&amp;oacute;n. Todo ello gracias a que Microsoft ha puesto a disposici&amp;oacute;n herramientas que permiten trabajar con nuestros requisitos, expresados como historias de usuario o no, de manera absolutamente &amp;aacute;gil. Ahora basta con arrastrar y soltar elementos de nuestro backlog para mantener su prioridad actualizada, y lo que es mejor, en todo momento bas&amp;aacute;ndonos en nuestra velocidad de desarrollo podemos ver en qu&amp;eacute; iteraci&amp;oacute;n el equipo implementar&amp;aacute; una determinada caracter&amp;iacute;stica. Adem&amp;aacute;s es m&amp;aacute;s f&amp;aacute;cil que nuca recoger requisitos del usuario. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/clip_5F00_image004_5F00_2EE63902.png"&gt;&lt;img height="242" width="431" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/clip_5F00_image004_5F00_thumb_5F00_790143E7.png" alt="clip_image004" border="0" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" title="clip_image004" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pero recoger requisitos solo es una parte, asegurar que estos requisitos han sido correctamente entendidos y priorizados es tan importante como recogerlos. Para ello ahora contamos con una nueva herramienta en Visual Studio: la capacidad de construir storyboards con PowerPoint, herramienta con la que casi todos estamos m&amp;aacute;s o menos familiarizados.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/clip_5F00_image006_5F00_580DD140.png"&gt;&lt;img height="375" width="499" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/clip_5F00_image006_5F00_thumb_5F00_4B9FAE17.png" alt="clip_image006" border="0" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" title="clip_image006" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adem&amp;aacute;s, aunque hayamos recogido los requisitos de manera adecuada todos sabemos que rara vez el cliente es capaz de expresar sus necesidades de manera correcta a la primera. Es aqu&amp;iacute; donde la mejora continua de las caracter&amp;iacute;sticas implementadas en nuestro software, uno de los principios esenciales de las metodolog&amp;iacute;as &amp;aacute;giles, toma el primer plano. Solo atendiendo a la voz de los usuarios y clientes podremos construir un software que les satisfaga y que logre un adecuado retorno de la inversi&amp;oacute;n. Visual Studio 2012 nos proporciona una nueva herramienta gratuita, el Feedback Manager que nos permitir&amp;aacute; recolectar el feedback de nuestros usuarios y compartirlo con el equipo de desarrollo de manera extremadamente simple.&lt;/p&gt;
&lt;p&gt;En resumen, ninguna versi&amp;oacute;n de Visual Studio anterior hab&amp;iacute;a permitido trabajar de manera tan &amp;aacute;gil con requisitos, &lt;em&gt;storyboards &lt;/em&gt;y, en general, colaborar con tanta facilidad con los clientes y usuarios para asegurarnos de que siempre estamos construyendo solo aquello que realmente aporta valor.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207324" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=oEvbvUWsPw8:UTjmCMxJ0pY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=oEvbvUWsPw8:UTjmCMxJ0pY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=oEvbvUWsPw8:UTjmCMxJ0pY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=oEvbvUWsPw8:UTjmCMxJ0pY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/oEvbvUWsPw8" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/ALM/default.aspx">ALM</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2012/11/05/y-la-agilidad-lleg-243-a-visual-studio.aspx</feedburner:origLink></item><item><title>¿Cuánto ocupan mis tablas y mis índices en Sql Azure (y no Azure)?</title><link>http://feedproxy.google.com/~r/mlbb/~3/awNeyrwnsFo/191-cu-225-nto-ocupan-mis-tablas-y-mis-237-ndices-en-sql-azure-y-no-azure.aspx</link><pubDate>Wed, 02 Nov 2011 16:21:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201442</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=201442</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=201442</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/11/02/191-cu-225-nto-ocupan-mis-tablas-y-mis-237-ndices-en-sql-azure-y-no-azure.aspx#comments</comments><description>&lt;p&gt;El tamaño de la base de datos, siempre es importante, en Sql Azure más si cabe, pues afecta directamente a nuestro bolsillo.&lt;/p&gt;  &lt;p&gt;Hace bastante tiempo publiqué un script, que se volvió bastante popular, que permite responder la pregunta &lt;a href="http://geeks.ms/blogs/rcorral/archive/2006/10/31/_BF00_Cuanto-ocupan-mis-tablas-en-Sql-Server_3F00_.aspx"&gt;¿Cuanto ocupan mis tablas y mis vistas indexadas en Sql Server?&lt;/a&gt;, este script hace uso del procedimiento almacenado del sistema sp_&lt;em&gt;spaceused&lt;/em&gt; que por desgracia no está disponible en SQL Azure, haciendo que el script anterior no funcione. Así que me he puesto manos a la obra y he hecho una versión similar que si que funciona en SQL Azure (por su puesto en un SQL Server ‘on premise’).&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;objects&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;name&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;SUM&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;reserved_page_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt; 8.0 &lt;span&gt;&lt;font color="#808080"&gt;/&lt;/font&gt;&lt;/span&gt; 1024 &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;[Reserved in MB]&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;SUM&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;used_page_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt; 8.0 &lt;span&gt;&lt;font color="#808080"&gt;/&lt;/font&gt;&lt;/span&gt; 1024 &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;[Used in MB]&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;MAX&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;row_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;[Number of rows]&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;FROM&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#00ff00"&gt;objects&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;WHERE&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;object_id&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;objects&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#ff00ff"&gt;object_id&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;GROUP&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;BY&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;objects&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;name&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;UNION&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;ALL&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;indexes&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;name&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;SUM&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;reserved_page_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt; 8.0 &lt;span&gt;&lt;font color="#808080"&gt;/&lt;/font&gt;&lt;/span&gt;1024 &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;[Reserved in MB]&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;SUM&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;used_page_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt; 8.0 &lt;span&gt;&lt;font color="#808080"&gt;/&lt;/font&gt;&lt;/span&gt; 1024 &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;[Used in MB]&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;MAX&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;row_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;[Number of rows]&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;FROM&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#00ff00"&gt;indexes&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;WHERE&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;object_id&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;indexes&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#ff00ff"&gt;object_id&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#808080"&gt;AND&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;index_id&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;indexes&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;index_id&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#808080"&gt;AND&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_db_partition_stats&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;index_id&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt; 0&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;GROUP&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;BY&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;indexes&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;name&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;ORDER&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;BY&lt;/font&gt;&lt;/span&gt; 2 &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;DESC&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Espero que os sea útil, un saludo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201442" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=awNeyrwnsFo:N-jFtBGvJ4M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=awNeyrwnsFo:N-jFtBGvJ4M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=awNeyrwnsFo:N-jFtBGvJ4M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=awNeyrwnsFo:N-jFtBGvJ4M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/awNeyrwnsFo" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Azure/default.aspx">Azure</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/11/02/191-cu-225-nto-ocupan-mis-tablas-y-mis-237-ndices-en-sql-azure-y-no-azure.aspx</feedburner:origLink></item><item><title>Consultas para mejorar el rendimiento de tu SQL Azure (y no Azure)</title><link>http://feedproxy.google.com/~r/mlbb/~3/v6KlxGe-Lls/consultas-para-mejorar-el-rendimiento-de-tu-sql-azure-y-no-azure.aspx</link><pubDate>Tue, 01 Nov 2011 11:41:30 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201441</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=201441</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=201441</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/11/01/consultas-para-mejorar-el-rendimiento-de-tu-sql-azure-y-no-azure.aspx#comments</comments><description>&lt;p&gt;Cuando trabajamos contra un SQL Server ‘on premise’ contamos con un motón de herramientas para averiguar que consultas están siendo más costosas y que índices podrían ayudarnos a mejorar el rendimiento de nuestra base de datos. Cuando trabajamos con SQL Azure, contamos un arsenal mucho más reducido de armas. Hoy quiero compartir dos consultas que me han sido de suma utilidad a la hora de mejorar el rendimiento de un importante proyecto que estamos realizando en Plain Concepts con SQL Azure.&lt;/p&gt;  &lt;p&gt;La primera es una consulta que nos permite saber, a partir de la información que SQL Server almacena sobre los planes de ejecución &lt;strong&gt;qué consultas están siendo más costosas&lt;/strong&gt;. Esta consulta extrae información de la vista &lt;em&gt;dm_exec_query_stats&lt;/em&gt; que almacena estadísticas sobre la ejecución de consultas. En este caso la consulta muestra, por este orden, el texto de la consulta, el tiempo total consumido por todas las ejecuciones de cada consulta, el máximo tiempo que ha tardado en ejecutarse esa consultas, el tiempo mínimo que ha tardado alguna ejecución, el tiempo que ha tardado la última ejecución, el número de veces que se ha ejecutado la consulta, y la hora de la última ejecución. Todo esto ordenado por el tiempo total consumido por la consulta. Esta consulta nos permite ver de manera rápida que consultas están siendo más costosas para nuestro SQL Azure.&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;SELECT &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;TOP &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;20&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008080"&gt;q&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;text&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;total_elapsed_time&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;max_elapsed_time&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;min_elapsed_time&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;last_elapsed_time&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;execution_count&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;last_execution_time&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;FROM&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_exec_query_stats&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#808080"&gt;cross&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;apply&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_exec_sql_text&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;plan_handle&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;q&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;WHERE&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;last_execution_time&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;DateAdd&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;mi&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;-&lt;/font&gt;&lt;/span&gt;1500 &lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff00ff"&gt;GetDate&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;())&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008000"&gt;-- solo las que se han ejecutado recientemente&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#808080"&gt;&lt;font style="font-size:12pt;"&gt;AND&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;text&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;not&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;like&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;%sys.%&amp;#39;&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008000"&gt;-- eliminar esta propia consulta&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;ORDER&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;BY&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;s&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;total_elapsed_time&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;DESC&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;La vista en la que se basa esta consulta, &lt;em&gt;dm_exec_query_stats&lt;/em&gt; , contiene un motón de campos interesantes con información que os invito a explorar.&lt;/p&gt;  &lt;p&gt;La segunda consulta que me ha sido de gran utilidad permite saber &lt;strong&gt;qué índices podrían ser beneficiosos en nuestra base de datos &lt;/strong&gt;y cual sería en impacto (entendido como la mejora esperable si se crea el índice). Se basa en una capacidad de SQL Server llamada ‘missing indexes’.&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;SELECT &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;TOP &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;20&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#ff00ff"&gt;CAST&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;REPLACE&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;CAST&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;qp&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;query_plan&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;NVARCHAR&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;MAX&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;)),&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;xmlns=&amp;quot;http://schemas.microsoft.com/sqlserver/2004/07/showplan&amp;quot;&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;XML&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;),&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008080"&gt;qp&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;query_plan&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;value&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;declare default element namespace &amp;quot;http://schemas.microsoft.com/sqlserver/2004/07/showplan&amp;quot;; (/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/@Impact)[1]&amp;#39;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;decimal(18,4)&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;*&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;execution_count&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;AS&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#008080"&gt;TotalImpact&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;FROM&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_exec_query_stats&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;qs&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#808080"&gt;cross&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;apply&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_exec_sql_text&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;sql_handle&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;st&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#808080"&gt;cross&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;apply&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#00ff00"&gt;sys&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00ff00"&gt;dm_exec_query_plan&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;plan_handle&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;qp&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;WHERE&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008080"&gt;qp&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;query_plan&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008080"&gt;exist&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#808080"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#ff0000"&gt;&amp;#39;declare default element namespace &amp;quot;http://schemas.microsoft.com/sqlserver/2004/07/showplan&amp;quot;;/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/MissingIndex[@Database!=&amp;quot;m&amp;quot;]&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#808080"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#808080"&gt;=&lt;/font&gt;&lt;/span&gt; 1&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;ORDER&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;BY&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#008080"&gt;TotalImpact&lt;/font&gt;&lt;/span&gt; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;DESC&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;    &lt;p&gt;Estas consultas son perfectamente validas para un SQL Server ‘on premise’, pero resultan mucho más útiles cuando estamos trabajando contra un SQL Azure, pues carecemos de otras herramientas.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201441" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=v6KlxGe-Lls:vPb7i6dG9WE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=v6KlxGe-Lls:vPb7i6dG9WE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=v6KlxGe-Lls:vPb7i6dG9WE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=v6KlxGe-Lls:vPb7i6dG9WE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/v6KlxGe-Lls" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Azure/default.aspx">Azure</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/11/01/consultas-para-mejorar-el-rendimiento-de-tu-sql-azure-y-no-azure.aspx</feedburner:origLink></item><item><title>¿Te vas a perder la segunda edición de la ScrumWeek?</title><link>http://feedproxy.google.com/~r/mlbb/~3/X-xxn0j-joo/191-te-vas-a-perder-la-segunda-edici-243-n-de-la-scrumweek.aspx</link><pubDate>Thu, 29 Sep 2011 10:12:26 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200836</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=200836</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=200836</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/09/29/191-te-vas-a-perder-la-segunda-edici-243-n-de-la-scrumweek.aspx#comments</comments><description>&lt;p&gt;Tras el éxito de la primera edición de la &lt;a href="http://www.scrumweek.com/ediciones-anteriores/scrumweek-madrid-4-8-de-abril-de-2011/"&gt;ScrumWeek de Madrid&lt;/a&gt;, y atendiendo las voces que desde Cataluña nos demandaban una edición por esas tierras ya estamos trabajando en la Segunda edición de la ScrumWeek.&lt;/p&gt;  &lt;p&gt;Del 7 al 11 de noviembre va a tener lugar en Barcelona la segunda edición de la &lt;a href="http://www.scrumweek.com" target="_blank"&gt;ScrumWeek&lt;/a&gt;, un evento en el que, con la colaboración de &lt;a href="http://www.proyectalis.com/" target="_blank"&gt;Proyectalis&lt;/a&gt;, &lt;a href="http://www.plainconcepts.com/" target="_blank"&gt;Plain Concepts&lt;/a&gt; y la comunidad, os ofrecemos un montón de cursos, sesiones y actividades que pueden ser de gran valor para profundizar en aspectos concretos del mundo ágil.&lt;/p&gt;  &lt;p&gt;Tenemos varios platos fuertes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Curso Profesional Scrum Foundations de Scrum.org &lt;/li&gt;    &lt;li&gt;Curos Professional Scrum Developer de Scrum.org &lt;/li&gt;    &lt;li&gt;Curso de Management 3.0 de Jurgen Appelo &lt;/li&gt;    &lt;li&gt;Curso de Coaching de equipos Ágiles de Angel Medinilla &lt;/li&gt;    &lt;li&gt;Actividades de comunidad &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jlsoria/PSF-Logo-2.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;vertical-align:top;border-left-width:0px;" border="0" src="http://geeks.ms/resized-image.ashx/__size/300x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jlsoria/PSF-Logo-2.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para los que estéis buscando empezar con Scrum con el mejor pie, o reforzar conocimientos, estamos organizando el primer &lt;a href="http://www.scrum.org/professionalscrumfoundations/" target="_blank"&gt;curso oficial Professional Scrum Foundations de scrum.org&lt;/a&gt; en España, que además de tener un enfoque y un contenido magníficos, permite obtener la certificación oficial de &lt;a href="http://www.scrum.org" target="_blank"&gt;scrum.org&lt;/a&gt;. El curso en sí mismo merece mucho la pena, como lo pueden atestiguar los cientos de personas que ya lo han recibido a nivel mundial. Si aprovechas el curso, que seguro que lo haces, habrás amortizado de sobra la inversión, aunque luego decidas no presentarte al examen para obtener la certificación (aunque ya que está incluido por probar que no quede ¿no?).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jlsoria/PSD-Logo-2.png"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/300x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jlsoria/PSD-Logo-2.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También tendremos una nueva edición del &lt;a href="http://www.scrum.org/professionalscrumdeveloper/" target="_blank"&gt;curso Professional Scrum Developer .NET&lt;/a&gt; en el cual exprimiremos Scrum en la práctica desde el punto de vista del rol de miembro del equipo, y poniendo énfasis en todas las buenas prácticas que pueden ayudar a trabajar mejor en un equipo ágil: integración continua, TDD, arquitectura, testing, etc. Todo facilitado por una buena ración de nuestras herramientas favoritas, Visual Studio ALM y Team Foundation Server. Y además, también con la opción de obtener una certificación, en este caso reconocida tanto por scrum.org como por Microsoft.&lt;/p&gt;  &lt;p&gt;Los dos cursos serán impartidos por mi mismo y mi compañero José Luis Soria.&lt;/p&gt;  &lt;p&gt;Tendremos además la gran oportunidad de asistir al curso &lt;a href="http://www.scrumweek.com/sesiones-y-ponencias/management-3-0/" target="_blank"&gt;Management 3.0&lt;/a&gt; de &lt;a href="http://www.scrumweek.com/ponentes/jurgen-appelo/" target="_blank"&gt;Jurgen Appelo&lt;/a&gt;, y al de &lt;a href="http://www.scrumweek.com/sesiones-y-ponencias/coaching-de-equipos-agiles/" target="_blank"&gt;Coaching de Equipos Ágiles&lt;/a&gt; de &lt;a href="http://www.scrumweek.com/ponentes/angel-medinilla/" target="_blank"&gt;Ángel Medinilla&lt;/a&gt;. Sin duda otras dos grandísimas razones para no perderse el evento.&lt;/p&gt;  &lt;p&gt;Y por si fuera poco, habrá además una serie de sesiones y actividades gratuitas hechas por y para la comunidad, incluyendo un Coding Dojo, algo tan novedoso en España como un Testing Dojo, y un Open Space para que todo el mundo pueda proponer y hablar de lo que más le interese.&lt;/p&gt;  &lt;p&gt;Tenéis toda la información en &lt;a href="http://www.scrumweek.com/proximas-ediciones/scrum-week-barcelona-2011/" target="_blank"&gt;la página de ScrumWeek Barcelona 2011&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;¡Esperamos veros por allí!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200836" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=X-xxn0j-joo:aTeg5UNoCdE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=X-xxn0j-joo:aTeg5UNoCdE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=X-xxn0j-joo:aTeg5UNoCdE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=X-xxn0j-joo:aTeg5UNoCdE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/X-xxn0j-joo" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Comunidad/default.aspx">Comunidad</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/09/29/191-te-vas-a-perder-la-segunda-edici-243-n-de-la-scrumweek.aspx</feedburner:origLink></item><item><title>Estaré en: Team Foundation Server: la navaja suiza de los proyectos en Pamplona</title><link>http://feedproxy.google.com/~r/mlbb/~3/LoSPimGLEq0/estar-233-en-team-foundation-server-la-navaja-suiza-de-los-proyectos-en-pamplona.aspx</link><pubDate>Mon, 26 Sep 2011 12:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200741</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=200741</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=200741</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/09/26/estar-233-en-team-foundation-server-la-navaja-suiza-de-los-proyectos-en-pamplona.aspx#comments</comments><description>&lt;p&gt;El pr&amp;oacute;ximo d&amp;iacute;a 4 de Octubre de 10:00 a 13:00 de la ma&amp;ntilde;ana en el Sal&amp;oacute;n de Actos del Centro de Excelencia Software &lt;/p&gt;
&lt;p&gt;Edificio de Formaci&amp;oacute;n CEIN, S.A. &lt;br /&gt;Pol&amp;iacute;gono Industrial Elorz-Mochol&amp;iacute; &lt;br /&gt;Pza. CEIN n&amp;ordm; 1. 31110 Noain &lt;/p&gt;
&lt;p&gt;Microsoft, Plain Concepts y Tracasa hablaremos de nuestras experiencias en la implantaci&amp;oacute;n de Team Foundation Server, evento en el que &lt;a href="http://www.cein.es/web/es/inscripciones/index.php?id=8911&amp;amp;tipo=Jornada&amp;amp;titulo=Team%20Foundation%20Server:%20la%20navaja%20suiza%20de%20los%20proyectos&amp;amp;fechas=04/10/2011&amp;amp;actos=0"&gt;pod&amp;eacute;is inscribiros de manera gratuita&lt;/a&gt; si la agenda (ver m&amp;aacute;s abajo) resulta de vuestro inter&amp;eacute;s. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/spain"&gt;&lt;img src="http://www.cesnavarra.net/Logotipos%20CES/MS2.jpg" alt="Microsoft" border="0" /&gt;&lt;img height="46" width="87" src="http://www.cesnavarra.net/Logotipos%20CES/Logo_DPE.jpg" alt="Microsoft DPE" border="0" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/spain"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.plainconcepts.com"&gt;&lt;img height="48" width="278" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/logo_5F00_plain_5F00_0266743F.png" alt="logo_plain" border="0" title="logo_plain" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tracasa.es/"&gt;&lt;img height="60" width="248" src="http://www.cesnavarra.net/Logotipos%20CES/Tracasa.png" alt="Tracasa" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En esta jornada te presentaremos de la mano de la Divisi&amp;oacute;n de Desarrolladores y Plataforma (DPE &amp;ndash; Developer &amp;amp; Platform Evangelism) de Microsoft, PlainConcepts y Tracasa todo lo que debes conocer de la herramienta perfecta de &lt;a href="http://en.wikipedia.org/wiki/Application_lifecycle_management"&gt;Application Lifecycle Management (ALM)&lt;/a&gt; Microsoft Team Foundation Server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En qu&amp;eacute; consiste y qu&amp;eacute; m&amp;oacute;dulos la componen y qu&amp;eacute; utilidad tiene cada uno de ellos&lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo puede ayudar en el trabajo diario en un proyecto, dentro de m&amp;uacute;ltiples &amp;aacute;reas&lt;/li&gt;
&lt;li&gt;Ejemplos de uso y soluciones de los diversos componentes de este avanzado sistema&lt;/li&gt;
&lt;li&gt;Un caso de &amp;eacute;xito 100% real y cercano, presentado por la empresa Tracasa que nos contar&amp;aacute; c&amp;oacute;mo y para qu&amp;eacute; lo usan ellos, y cu&amp;aacute;l es su experiencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si quieres conocer con todo detalle esta aut&amp;eacute;ntica &amp;ldquo;navaja suiza&amp;rdquo; del desarrollo, calidad, arquitectura, test y seguridad de las soluciones software, an&amp;iacute;mate a acompa&amp;ntilde;arnos en esta charla.&lt;/p&gt;
&lt;h2&gt;AGENDA&lt;/h2&gt;
&lt;h3&gt;Microsoft/DPE - Javier G&amp;oacute;mez Lozano&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;iquest;Por qu&amp;eacute; necesitamos ALM?
&lt;ul&gt;
&lt;li&gt;Visual Studio 2010&lt;/li&gt;
&lt;li&gt;ALM con Visual Studio 2010&lt;/li&gt;
&lt;li&gt;Componentes y Caracter&amp;iacute;sticas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Soporte para Desarrollo Heterog&amp;eacute;neo&lt;/li&gt;
&lt;li&gt;La Suite de productos Visual Studio 2010
&lt;ul&gt;
&lt;li&gt;Novedades&lt;/li&gt;
&lt;li&gt;Gesti&amp;oacute;n de proyectos&lt;/li&gt;
&lt;li&gt;Arquitectura y Modelado&lt;/li&gt;
&lt;li&gt;Control de Versiones&lt;/li&gt;
&lt;li&gt;Desarrollo&lt;/li&gt;
&lt;li&gt;Construcci&amp;oacute;n automatizada&lt;/li&gt;
&lt;li&gt;Instalaci&amp;oacute;n y administraci&amp;oacute;n&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Test Manager 2010&lt;/li&gt;
&lt;li&gt;Microsoft Lab Management 2010&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Plain Concepts - Rodrigo Corral &lt;/h3&gt;
&lt;p&gt;En esta sesi&amp;oacute;n veremos, en base a escenarios reales, como TFS facilita la adopci&amp;oacute;n de una metodolog&amp;iacute;a &amp;aacute;gil de desarrollo de software y lleva a los equipos de desarrollo buenas pr&amp;aacute;cticas de ingenier&amp;iacute;a del software que proporcionan un claro retorno de la inversi&amp;oacute;n y una ventaja competitiva basada en el control expl&amp;iacute;cito de los proyectos y la detecci&amp;oacute;n temprana de las fugas de rendimiento por problemas de calidad, evitando la burocracia y facilitando las tareas que el desarrollador realiza.&lt;/p&gt;
&lt;h3&gt;Tracasa - Carlos Aranda&lt;/h3&gt;
&lt;p&gt;En esta &amp;uacute;ltima parte de la jornada conoceremos un caso de &amp;eacute;xito real y pr&amp;oacute;ximo a trav&amp;eacute;s de la experiencia de Tracasa: por qu&amp;eacute; y para qu&amp;eacute; usan Team Foundation y c&amp;oacute;mo les ha permitido mejorar su calidad y productividad.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tracasa&lt;/li&gt;
&lt;li&gt;Historia&lt;/li&gt;
&lt;li&gt;Visi&amp;oacute;n de la compa&amp;ntilde;&amp;iacute;a&lt;/li&gt;
&lt;li&gt;Proyectos&lt;/li&gt;
&lt;li&gt;Recorrido y adaptaci&amp;oacute;n&lt;/li&gt;
&lt;li&gt;Situaci&amp;oacute;n inicial&lt;/li&gt;
&lt;li&gt;Iniciativa y plan de mejora&lt;/li&gt;
&lt;li&gt;Compromiso con la calidad. Frentes abiertos. (Casos de &amp;eacute;xito)&lt;/li&gt;
&lt;li&gt;Gesti&amp;oacute;n de procesos y metodolog&amp;iacute;a. Plantillas de procesos&lt;/li&gt;
&lt;li&gt;Dinamizar el trabajo, respuesta r&amp;aacute;pida. Construcciones automatizadas&lt;/li&gt;
&lt;li&gt;Asegurar una calidad m&amp;iacute;nima. Testeo funcional&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un saludo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200741" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=LoSPimGLEq0:qR6g0biBKEM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=LoSPimGLEq0:qR6g0biBKEM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=LoSPimGLEq0:qR6g0biBKEM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=LoSPimGLEq0:qR6g0biBKEM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/LoSPimGLEq0" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/09/26/estar-233-en-team-foundation-server-la-navaja-suiza-de-los-proyectos-en-pamplona.aspx</feedburner:origLink></item><item><title>¿Qué tecnología de UX usar para tu nueva aplicación?</title><link>http://feedproxy.google.com/~r/mlbb/~3/qHrz6rYJ0n0/191-qu-233-tecnolog-237-a-de-ux-usar-para-tu-nueva-aplicaci-243-n.aspx</link><pubDate>Sat, 17 Sep 2011 07:11:19 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200577</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=200577</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=200577</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/09/17/191-qu-233-tecnolog-237-a-de-ux-usar-para-tu-nueva-aplicaci-243-n.aspx#comments</comments><description>&lt;p&gt;Fuente: &lt;a href="http://www.telerikwatch.com/2011/09/how-to-pick-your-platform-silverlight.html"&gt;http://www.telerikwatch.com/2011/09/how-to-pick-your-platform-silverlight.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/clip_5F00_image002_5F00_45BD5BC4.jpg" width="527" height="743" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200577" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=qHrz6rYJ0n0:Ph9BVaL69fg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=qHrz6rYJ0n0:Ph9BVaL69fg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=qHrz6rYJ0n0:Ph9BVaL69fg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=qHrz6rYJ0n0:Ph9BVaL69fg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/qHrz6rYJ0n0" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/WPF/default.aspx">WPF</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/HTML5/default.aspx">HTML5</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/UX/default.aspx">UX</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/09/17/191-qu-233-tecnolog-237-a-de-ux-usar-para-tu-nueva-aplicaci-243-n.aspx</feedburner:origLink></item><item><title>Detectar cambios en los datos en SQL Server</title><link>http://feedproxy.google.com/~r/mlbb/~3/1xXvoTW8kdE/detectar-cambios-en-los-datos-en-sql-server.aspx</link><pubDate>Wed, 31 Aug 2011 21:59:29 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200304</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=200304</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=200304</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/08/31/detectar-cambios-en-los-datos-en-sql-server.aspx#comments</comments><description>&lt;p&gt; Saber si los datos almacenados en una base de datos han cambiado es un problema al que nos enfrentamos frecuentemente. Son varios los escenarios en los que tenemos esta necesidad: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enviar solo a un cliente desconectado los datos que han cambiado mientras no tenía conexión.&lt;/li&gt;    &lt;li&gt;Actualizar datos cacheados solo si los datos subyacentes a la caché han cambiado.&lt;/li&gt;    &lt;li&gt;Refrescar la representación de los datos en una interfaz de usuario compleja solo si estos han cambiado.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Los niveles a los que nos puede interesar detectar cambios en los datos son varios: detectar que los datos de una fila concreta han cambiado, detectar si los datos en una columna determinada de una columna han cambiado o detectar si alguno de los campos de un conjunto de filas (o una tabla completa) han cambiado. Existe una manera muy simple de conseguir esto en SQL Server que no es muy conocida: apoyarse en las funciones de checksum.&lt;/p&gt;  &lt;p&gt;El mecanismo es bien simple: si un solo bit de un conjunto de datos cambia, su checksum cambia. Evidentemente es mucho más simple almacenar y comprobar cambios en el checksum de un conjunto de datos que comprobar si alguno de los campos del conjunto de datos ha cambiado.&lt;/p&gt;  &lt;h3&gt;¿Cómo detectar cambios en una fila?&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT BINARY_CHECKSUM(*) FROM [AdventureWorks].[HumanResources].[Department]     &lt;br /&gt;WHERE DepartmentID = @DeparmentID&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Si nos interesa podemos calcular el checksum de algunos campos.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT BINARY_CHECKSUM(Name, GroupName) FROM [AdventureWorks].[HumanResources].[Department]     &lt;br /&gt;WHERE DepartmentID = @DeparmentID&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;¿Cómo detectar cambios en un conjunto de filas o una tabla completa?&lt;/h3&gt;  &lt;p&gt;Aquí el truco es saber que en SQL Server contamos con una función de agregación que nos permite calcular el checksum. Así que primero calculamos el checksum de la fila y luego el checksum agregado del checksum de cada &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM [AdventureWorks].[HumanResources].[Department]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Evidentemente podemos filtrar los datos que nos interesa con una clausula WHERE para limitar el conjunto de filas.&lt;/p&gt;  &lt;h3&gt;¿Cómo detectar cambios en una columna concreta?&lt;/h3&gt;  &lt;p&gt;La técnica es similar a la anterior.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SELECT CHECKSUM_AGG(BINARY_CHECKSUM(Name)) FROM [AdventureWorks].[HumanResources].[Department]&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;¿Y el rendimiento?&lt;/h3&gt;  &lt;p&gt;Pues en el caso más desfavorable tendremos un ‘full scan’, pero este caso solo se da si calculamos el checksum de una tabla completa que no cuente con un índice clustered. En caso de contar con un indicé clustered, tendremos un ‘index scan’. Es importante desde el punto de vista del rendimiento, en el caso de detectar cambios en una columna concreta, es importante que está cuente con un índice.&lt;/p&gt;  &lt;p&gt;Podéis ver los planes de ejecución en la siguiente imagen:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Planes de ejecución" border="0" alt="Planes de ejecución" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_086220B8.png" width="805" height="431" /&gt;&lt;/p&gt;  &lt;p&gt;La conclusión es que con índices adecuados el rendimiento de esta solución es al menos tan buena como con cualquier otra. Al final si quieres saber si los datos han cambiado nadie te va a librar de leerlos.&lt;/p&gt;  &lt;p&gt;¡Espero que os sea útil!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200304" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=1xXvoTW8kdE:GBe8FnTGwmM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=1xXvoTW8kdE:GBe8FnTGwmM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=1xXvoTW8kdE:GBe8FnTGwmM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=1xXvoTW8kdE:GBe8FnTGwmM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/1xXvoTW8kdE" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/08/31/detectar-cambios-en-los-datos-en-sql-server.aspx</feedburner:origLink></item><item><title>Primer postgrado mundial en métodos ágiles</title><link>http://feedproxy.google.com/~r/mlbb/~3/ouMCEuzqRv0/primer-postgrado-mundial-en-m-233-todos-225-giles.aspx</link><pubDate>Mon, 04 Jul 2011 11:57:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:197065</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=197065</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=197065</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/07/04/primer-postgrado-mundial-en-m-233-todos-225-giles.aspx#comments</comments><description>&lt;p&gt;En noviembre de 2011 se iniciar&amp;aacute; el Barcelona el primer postgrado mundial en m&amp;eacute;todos &amp;aacute;giles y en espa&amp;ntilde;ol. Ser&amp;aacute; una oportunidad &amp;uacute;nica para aprender de la experiencia de profesionales de primer nivel con varios a&amp;ntilde;os aplicando principios y m&amp;eacute;todos &amp;aacute;giles en diferentes contextos e investigando sobre nuevas t&amp;eacute;cnicas. &lt;/p&gt;
&lt;p&gt;&lt;img height="180" width="430" src="http://www.proyectosagiles.org/sites/default/files/image/pma.jpg" alt="postgrado-metodos-agiles" /&gt;&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n figura el profesorado del postgrado y el temario que impartir&amp;aacute;n: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/xavieralbaladejo"&gt;Xavier Albaladejo&lt;/a&gt; - Agile Coach y experto en Gobierno TI, actualmente desplegando el uso de m&amp;eacute;todos &amp;aacute;giles en everis, consultora tecnol&amp;oacute;gica internacional de 8000 personas, mediante la creaci&amp;oacute;n de su Agile Excellence Center. Es fundador de &lt;a href="http://www.proyectosagiles.org/"&gt;proyectosagiles.org&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Qu&amp;eacute; es la agilidad, su origen, el Agile Manifesto, fundamentos; facilitadores e impedimentos; introducci&amp;oacute;n a Scrum, Lean, Kanban y XP; simulaci&amp;oacute;n de estimaci&amp;oacute;n de Product Backlog; simulaci&amp;oacute;n de Scrum (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Agile Product Portfolio Management, empresas &amp;aacute;giles, contratos &amp;aacute;giles (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/pub/agustin-yague/11/308/2"&gt;Agust&amp;iacute;n Yag&amp;uuml;e&lt;/a&gt; - Profesor de la Universidad Polit&amp;eacute;cnica de Madrid, especialista en la investigaci&amp;oacute;n de t&amp;eacute;cnicas para la gesti&amp;oacute;n &amp;aacute;gil de producto, proyecto y pruebas. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Product Ownership y gesti&amp;oacute;n de producto; historias de usuario; documentaci&amp;oacute;n &amp;aacute;gil y usabilidad / experiencia de usuario; elaboraci&amp;oacute;n de Product Backlog (24 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/xquesada"&gt;Xavier Quesada&lt;/a&gt; - Certified Scrum coach y Certified Scrum Trainer, ha trabajado en el despliegue de m&amp;eacute;todos &amp;aacute;giles en Belgacom (la mayor empresa de telecomunicaciones belga con m&amp;aacute;s de 2000 desarrolladores distribuidos entre B&amp;eacute;lgica e India), De Post (Correos Belga) y F&amp;eacute;d&amp;eacute;ration Royale du Notariat Belge. Ha sido orador en conferencias internacionales y es autor de &lt;a href="http://www.xqa.com.ar/visualmanagement/"&gt;Visual Management blog&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Estimaci&amp;oacute;n y planificaci&amp;oacute;n &amp;aacute;giles; m&amp;eacute;tricas; herramientas &amp;aacute;giles f&amp;iacute;sicas; radiadores de informaci&amp;oacute;n (16 horas). &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Lean thinking y lean tools (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/joseramondiaz"&gt;Jos&amp;eacute; Ram&amp;oacute;n D&amp;iacute;az&lt;/a&gt; - Impulsor del uso de m&amp;eacute;todos &amp;aacute;giles en Biko2 hasta transformarla en una consultora tecnol&amp;oacute;gica &amp;aacute;gil, es responsable del &amp;aacute;rea de desarrollo Java. Programador vocacional y apasionado, es un estudioso de todas las disciplinas que rodean a la construcci&amp;oacute;n de software. Constructor de equipos altamente productivos, invierte el tiempo y esfuerzos necesarios en ayudar a que cada miembro de un equipo alcance la mejor versi&amp;oacute;n de si mismo. Siempre coloca a las personas en el centro de atenci&amp;oacute;n. Es autor del blog &lt;a href="http://najaraba.blogspot.com/"&gt;Najabaraja&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Gesti&amp;oacute;n de personas, trabajo en equipos altamente productivos e innovadores, facilitaci&amp;oacute;n de reuniones (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/jorgeuriarte"&gt;Jorge Uriarte&lt;/a&gt; - Director de Gailen Tecnolog&amp;iacute;as, donde ha conjugado la visi&amp;oacute;n de emprendedor con el coaching de equipos a nivel de gesti&amp;oacute;n y t&amp;eacute;cnico para crear una empresa y unos clientes &amp;aacute;giles. Es autor del blog &lt;a href="http://blog.omelas.net/"&gt;Omelas&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Herramientas &amp;aacute;giles electr&amp;oacute;nicas; revisiones de producto y retrospectivas &amp;aacute;giles (8 horas) &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Agile Coaching, gesti&amp;oacute;n de conflictos, motivaci&amp;oacute;n e incentivos, contrataci&amp;oacute;n (16 horas). &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Agile Knowledge Sharing and Management (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/rcorral"&gt;Rodrigo Corral&lt;/a&gt; - Mentor, trainer y consultor en ALM y arquitectura, especializado en resolver problemas de estabilidad y rendimiento de sistemas, varias veces MVP y copropietario de Plain Concepts, consultora de referencia por Microsoft en Espa&amp;ntilde;a. Ha sido orador en diferentes eventos &amp;aacute;giles, es administrador de geeks.ms y autor del blog &lt;a href="http://geeks.ms/blogs/rcorral/default.aspx"&gt;La masa, el ladrillo, la bota, el bocadillo&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ALM &amp;aacute;gil, eXtreme Programing, testing &amp;aacute;gil, arquitectura &amp;aacute;gil (12 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/albertopizarro"&gt;Alberto Pizarro&lt;/a&gt; - Gerente de arquitectura en everis, experto en el desarrollo de arquitectura empresarial bajo planteamientos &amp;aacute;giles en sectores como banca, seguros y administraci&amp;oacute;n p&amp;uacute;blica y creador de la suite ALM corporativa de everis, con soporte a m&amp;eacute;todos &amp;aacute;giles como Scrum y eXtreme Programming. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Arquitectura empresarial &amp;aacute;gil (4 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/carlosble"&gt;Carlos Ble&lt;/a&gt; - Desarrollador vocacional y arquitecto, eXtreme Programming Coach, es co-propietario de iExpertos y autor de &amp;quot;Dise&amp;ntilde;o Agil con TDD&amp;quot;, el primer libro en castellano sobre Test Driven Development. Ha sido orador en diferentes eventos &amp;aacute;giles y es autor de &lt;a href="http://www.carlosble.com/"&gt;El blog de Carlos Ble&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;TDD y BDD (24 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/pub/jordi-salvat/0/36/951"&gt;Jordi Salvat&lt;/a&gt; - Como programador y analista en el sector espacio tuvo ocasi&amp;oacute;n de conocer (o sufrir) las metodolog&amp;iacute;as tradicionales de gesti&amp;oacute;n de proyectos. Como director de tecnolog&amp;iacute;a de dos exitosas start-ups y CTO de Salir.com, ha tenido ocasi&amp;oacute;n de vivir en primera persona la aparici&amp;oacute;n y evoluci&amp;oacute;n de las metodolog&amp;iacute;as &amp;aacute;giles y el impacto que han tenido en la productividad de los equipos de desarrollo. Es especialista en luchar contra la acumulaci&amp;oacute;n de &amp;ldquo;deuda t&amp;eacute;cnica&amp;rdquo; heredada y en medir la mejora conseguida. Es autor del blog &lt;a href="http://jordionsoftware.blogspot.com/"&gt;Jordi on Software Development&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Trabajo con c&amp;oacute;digo &amp;quot;legacy&amp;quot; (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/beatrizmartin"&gt;Beatriz Mart&amp;iacute;n&lt;/a&gt; - 14 a&amp;ntilde;os en Publicidad y TIC. Experiencia en gesti&amp;oacute;n de proyectos, gesti&amp;oacute;n y direcci&amp;oacute;n de personas, y liderando equipos profesionales. En su trabajo conjuga la necesidad de resultados y procesos de trabajo con la atenci&amp;oacute;n a las personas; y &lt;a href="http://www.linkedin.com/pub/joao-gama/0/4b8/a5b"&gt;Joao Gama&lt;/a&gt;, propietario y product owner de agileScorecard.com, herramienta de valoraci&amp;oacute;n de equipos &amp;aacute;giles y de desarrollo continuo de talento empresarial. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Gesti&amp;oacute;n del cambio organizativo y desarrollo de la cultura a trav&amp;eacute;s del Management. (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/in/juagutie"&gt;Juan Gutierrez&lt;/a&gt; - Manager y Agile Coach en F-Secure, empresa internacional de seguridad inform&amp;aacute;tica, donde ha estado involucrado en el despliegue global y multi-sede de m&amp;eacute;todos &amp;aacute;giles y donde actualmente est&amp;aacute; realizando el depliegue de su sede francesa. Trabaj&amp;oacute; en Nokia donde vivi&amp;oacute; la transici&amp;oacute;n de la compa&amp;ntilde;&amp;iacute;a a los m&amp;eacute;todos &amp;aacute;giles. Es autor del blog &lt;a href="http://agilizar.es/blog/"&gt;Agilizar&lt;/a&gt;. 
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Despliegue de Agile en organizaciones, escalado, equipos distribuidos (8 horas). &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El postgrado tendr&amp;aacute; una duraci&amp;oacute;n de 6 meses y se realizar&amp;aacute; viernes tarde y s&amp;aacute;bado por la ma&amp;ntilde;ana. Estar&amp;aacute; dividido en 3 m&amp;oacute;dulos: conceptos &amp;aacute;giles, ingenier&amp;iacute;a y empresa, siendo obligatorio cursar el primero y uno de los dos siguientes para obtener el postgrado. Para m&amp;aacute;s detalles, consultar la &lt;a href="http://www.salle.url.edu/portal/masters/masters-product-pma-barcelona/Controller?mvchandler=portals&amp;amp;action=show-screen&amp;amp;screen=workspace&amp;amp;idSection=18598"&gt;p&amp;aacute;gina oficial del postgrado&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Un saludo!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=197065" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=ouMCEuzqRv0:2lfqTHbpszM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=ouMCEuzqRv0:2lfqTHbpszM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=ouMCEuzqRv0:2lfqTHbpszM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=ouMCEuzqRv0:2lfqTHbpszM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/ouMCEuzqRv0" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/07/04/primer-postgrado-mundial-en-m-233-todos-225-giles.aspx</feedburner:origLink></item><item><title>Estuve en: Agile Open Spain 2011</title><link>http://feedproxy.google.com/~r/mlbb/~3/6jyAACWOycc/estuve-en-agile-open-spain-2011.aspx</link><pubDate>Sun, 19 Jun 2011 22:36:05 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196355</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=196355</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=196355</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/06/20/estuve-en-agile-open-spain-2011.aspx#comments</comments><description>&lt;p&gt;Este fin de semana pasado se ha celebrado la tercera edición del Agile Open Spain que reunió unos 150 asistentes interesados en las metodologías ágiles. El desembarco de la armada de Plain Concepts fué notable, &lt;a href="http://geeks.ms/blogs/devnettips/" target="_blank"&gt;Vicenç Garcia&lt;/a&gt;, &lt;a href="http://geeks.ms/blogs/ilanda" target="_blank"&gt;Ibon Landa&lt;/a&gt;, Gerard Lopez, Alfredo Fernandez y &lt;a href="http://geeks.ms/blogs/jlsoria" target="_blank"&gt;Jose Luis Soria&lt;/a&gt; (podéis ver la &lt;a href="http://www.slideshare.net/jlsoria/almost-everything-you-need-to-know-to-begin-doing-agile-estimation" target="_blank"&gt;presentación de su sesión sobre estimación&lt;/a&gt;), hay es nada. Propusimos un total de cinco sesiones de los temas más variopintos… y sobre todo creo que disfrutamos un montón. Empezamos cepillandonos un chuletón para comer el viernes y acabamos con una cervecitas en el Puerto Viejo de Algorta ¿alguna manera mejor de hacer equipo?.&lt;/p&gt;  &lt;p&gt;Si alguien duda de la calidad del evento y la diversidad de temas tratados no tiene más que echarle un vistazo al panel de sesiones. No tenéis que ver más que &lt;a href="http://twitter.com/#!/search/realtime/aos2011" target="_blank"&gt;los twits sobre le evento&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="El panel de la CAS 2011" border="0" alt="El panel de la CAS 2011" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/IMAG0206_5F00_7D6EF22F.jpg" width="877" height="526" /&gt;&lt;/p&gt;  &lt;p&gt;Os dejo mis impresiones sobre las sesiones a la que acudí aunque lo más interesante en un open space pasa en los pasillos.&lt;/p&gt;  &lt;h2&gt;Test doubles: stubs, spies y mock de Rubén Bernárdez&lt;/h2&gt;  &lt;p&gt;¿Por qué usamos dobles? Para evitar dependencias externas, para que los test no sean lentos… &lt;/p&gt;  &lt;p&gt;Interesante conversación y debate sobre los diferentes tipos de dobles de test que podemos usar, los diferentes estilos a la hora de usar test, las señales que nuestros test lanzan cuando se rompen… &lt;/p&gt;  &lt;p&gt;Especialmente interesante para mi fue la conversación Alberto Peña en la que constaté que tenemos aproximaciones muy diferentes al testeo unitario pero que aun así los dos disfrutamos de la ventaja que tiene escribir test, los escribas antes, durante o después, los uses como herramienta de diseño o como herramienta de calidad.&lt;/p&gt;  &lt;p&gt;Os recomiendo una artículo muy interesante que va en la línea de lo hablado en esta sesión: &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163358.aspx" target="_blank"&gt;Exploring The Continuum Of Test Doubles&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/cc163358.fig02(en-us).gif" /&gt;&lt;/p&gt;  &lt;h2&gt;Seducir a las empresas, &lt;a href="http://twitter.com/#!/rlaina" target="_blank"&gt;Raquel Laina&lt;/a&gt; y Amalia Hernandez&lt;/h2&gt;  &lt;p&gt;¿Nos disfrazamos para seducir a las empresas? ¿Se disfrazan las empresas? ¿Es posible no disfrazarse?… Yo defendía que todos estamos sometidos queramos o no, de manera incosciente a la tiranía de la apariencia, de la pose cuando estamos en un proceso de selección, seamos empresa o candidato. Es como ligar, propuse, nadie es la persona que se ver cuando está ligando.&lt;/p&gt;  &lt;p&gt;¿Como presentamos el modelo alternativo que supone el agilísimo a las empresas? ¿Comó lograr que este modelo llegue a los procesos de selección? En Plain Concepts algo hacemos, por lo menos no son entrevistas convencionales, hablamos por skype, los traemos a nuestra oficina, comemos con ellos, todo el equipo está en todo el proceso…&lt;/p&gt;  &lt;p&gt;¿Está obsoleto el modelo del currículo? Todos tenemos un currículo, es necesario diferenciarse: escribe un blog,… el papel a muerto. &lt;/p&gt;  &lt;p&gt;Surgio una idea interesante: Desacreditar la entrevista de trabajo convencional, &lt;/p&gt;  &lt;p&gt;Excelente resumen de &lt;a href="http://blog.verg.es/" target="_blank"&gt;Xavier Verges&lt;/a&gt; sobre esta sesión, en general las &lt;a href="http://www.flickr.com/photos/xverges/sets/72157626870784295/with/5847717849/" target="_blank"&gt;notas de su cuaderno&lt;/a&gt; sobre la AOS son una caña.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="5848275900_e58168a9c9_o" border="0" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/5848275900_5F00_e58168a9c9_5F00_o_5F00_3BE41A09.jpg" width="391" height="466" alt="" /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="5847717849_c6dec56ca7_o" border="0" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/5847717849_5F00_c6dec56ca7_5F00_o_5F00_784C68E6.jpg" width="406" height="466" alt="" /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="5848274728_34c042da42_o" border="0" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/5848274728_5F00_34c042da42_5F00_o_5F00_5B82CE04.jpg" width="423" height="466" alt="" /&gt;&lt;/p&gt;  &lt;h2&gt;Talento de &lt;a href="http://twitter.com/#!/ialcazar" target="_blank"&gt;Israel Alcazar&lt;/a&gt; y &lt;a href="http://twitter.com/#!/rlaina" target="_blank"&gt;Raquel Laina&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt;La pizarra lo dice todo…&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="La pizarra de la sesión sobre el talento" border="0" alt="La pizarra de la sesión sobre el talento" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/IMAG0208_5F00_49E2BD6C.jpg" width="877" height="526" /&gt;&lt;/p&gt;  &lt;h2&gt;La sesión que yo propuse: Déjame hacer las cosas bien, sobre la deuda técnica&lt;/h2&gt;  &lt;p&gt;Os dejo la presentación que utilicé, os servirá para situaros sobre los temas que debatimos.&lt;/p&gt;  &lt;div style="width:425px;" id="__ss_8355575"&gt;&lt;object id="__sse8355575" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=deudatcnica-110619160759-phpapp02&amp;amp;stripped_title=deuda-tcnica&amp;amp;userName=rodrigo.corral" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse8355575" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=deudatcnica-110619160759-phpapp02&amp;amp;stripped_title=deuda-tcnica&amp;amp;userName=rodrigo.corral" type="application/x-shockwave-flash" allowscriptaccess="always" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;  &lt;p&gt;Las &lt;a href="https://docs.google.com/document/d/1O3MaRBwVCx8l7vQtjnBwNUH8Ey6UaE3iMtGzxbiJuL8/edit?hl=en_US#" target="_blank"&gt;notas sobre mi sesión de Frank&lt;/a&gt; son el complemento perfecto (también tiene &lt;a href="https://docs.google.com/document/d/1Va4ND3SaHniBxISeNqiTqL_T8vg42MegMrDMPQxN0uI/edit?hl=en_US&amp;amp;pli=1#" target="_blank"&gt;notas muy interesantes&lt;/a&gt; sobre otras sesiones).&lt;/p&gt;  &lt;p&gt;También en el podcast de Carlos Ble, hablo de la sesión.&lt;/p&gt;  &lt;h2&gt;El podcast de &lt;a href="http://www.carlosble.com/" target="_blank"&gt;Carlos Ble&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt;Si bien Carlos Ble, uno de los habituales en estos eventos, no acudió en esta ocasión, ni aun así ha dejado de aportar. El domingo tras el evento se tomo la molestia de preparar un &lt;a href="http://www.podgramando.es/2011/06/19/el-dia-despues-aos2011/" target="_blank"&gt;podcast con entrevistas a algunos de los asistentes&lt;/a&gt;, entre los que me encuentro. No te lo pierdas, tanto si estuviste como si no, es muy interesante. En las grabaciones podeis escuchar a Vicenç García (@vgaltes), Rubén Bernárdez (@rubenbpv), Jorge Uriarte (@jorgeuriarte), Israel Alcázar (@ialcazar), José Ramón Díaz (@joserra_biko), José Manuel Beas (@jmbeas) y yo mismo.&lt;/p&gt;  &lt;p&gt;Un saludo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196355" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=6jyAACWOycc:ydaAnKVGRI8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=6jyAACWOycc:ydaAnKVGRI8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=6jyAACWOycc:ydaAnKVGRI8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=6jyAACWOycc:ydaAnKVGRI8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/6jyAACWOycc" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Comunidad/default.aspx">Comunidad</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Agile+Spain/default.aspx">Agile Spain</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/06/20/estuve-en-agile-open-spain-2011.aspx</feedburner:origLink></item><item><title>Proxy cache con IIS Application Request Routing</title><link>http://feedproxy.google.com/~r/mlbb/~3/Nk4uetEYKzM/proxy-cache-con-iis-application-request-routing.aspx</link><pubDate>Tue, 07 Jun 2011 21:16:45 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:195695</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=195695</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=195695</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/06/07/proxy-cache-con-iis-application-request-routing.aspx#comments</comments><description>&lt;h2&gt;Introducción&lt;/h2&gt;  &lt;p&gt;IIS Application Request Routing (ARR) es una extensión que permite aumentar la escalabilidad y la fiabilidad de las aplicaciones Web desplegadas sobre IIS mediante el enrutamiento de peticiones basado en reglas, permitiéndonos añadir balanceo de carga&amp;#160; o cache de contenidos de manera muy simple.&lt;/p&gt;  &lt;p&gt;En concreto nos vamos a centrar en implementar un &lt;a href="http://en.wikipedia.org/wiki/Proxy_server" target="_blank"&gt;proxy&lt;/a&gt; que actuará como cache aliviando en número de peticiones que recibirá nuestro servidor Web. El proxy cache se sitúa entre el servidor Web y los clientes y cachea a a disco contenidos que de otra manera tendrían que ser descargados desde el servidor Web.&lt;/p&gt;  &lt;p&gt;Un uso típico de un proxy cache es actuar con ‘edge server’. Un ‘edge server’ es un servidor más cercano a los clientes que consume el contenido. Supongamos una empresa que tiene una aplicación Web desplegada en La Coruña y que tiene delegaciones en Madrid, Bilbao y Seattle. Supongamos que esa aplicación Web por ejemplo utiliza Smooth Streaming para servir videos. Se hace evidente que contar con un proxy cache en las delegaciones que se encargue de cachear los videos servidos (o cualquier otro contenido pesado) de manera trasparente tendrá un efecto muy beneficioso en varios aspectos: mejorar la experiencia de usuario que tendrá que esperar menos para tener los contenidos disponibles, aliviar la carga soportada por el servidor web y minimizar el consumo de ancho de banda ya que si un contenido está en la cache no tendrá que pedirlo hasta el servidor Web lejano.&lt;/p&gt;  &lt;p&gt;Veamos a continuación los pasos necesarios para montar un proxy cache con IIS Application Request Routing.&lt;/p&gt;  &lt;h2&gt;Instalar IIS Application Request Routing en nuestro IIS&lt;/h2&gt;  &lt;p&gt;Sin duda la manera más cómoda de instalar ARR es utilizar el Microsoft Web Platform Installer, basta con &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;descargarlo&lt;/a&gt;, ejecutarlo y seleccionar &lt;em&gt;Application Request Routing&lt;/em&gt; y pulsar el botón &lt;em&gt;Install&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_70FBD8CE.png" width="780" height="540" /&gt;&lt;/p&gt;  &lt;p&gt;Una vez terminada la instalación en Internet Information Server (IIS) Manager, si seleccionamos el nodo raíz de nuestro servidor, veremos un nuevo icono en la sección IIS llamado Application Request Routing Cache.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image9_5F00_388DB1F6.png" width="935" height="600" /&gt;&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h2&gt;Configurar la caché de disco&lt;/h2&gt;  &lt;p&gt;Para configurar el lugar donde nuestro proxy almacenara los archivos cacheados pinchamos en el icono de Application Request Routing Cache y veremos la siguiente pantalla.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_30496692.png" width="935" height="600" /&gt;&lt;/p&gt;  &lt;p&gt;Tras pinchar en &lt;em&gt;Add Drive…&lt;/em&gt; podremos configurar la ruta en la que se almacenarán los archivos cacheados.     &lt;br /&gt;Precaución: esta carpeta debe existir de antemano, sino no recibiremos ningún error pero la carpeta no se creara y nada se cacheará.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_3738F34A.png" width="488" height="240" /&gt;&lt;/p&gt;  &lt;h2&gt;Activar el proxy y configurar sus propiedades&lt;/h2&gt;  &lt;p&gt;Para configurar las propiedades del proxy pinchamos en Server Proxy Settings…&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_6A94B6A6.png" width="935" height="600" /&gt;&lt;/p&gt;  &lt;p&gt;En la pantalla Application Request Routing que aparece, para activar el proxy marcamos la casilla&lt;em&gt; Enable proxy&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_4B226013.png" width="484" height="105" /&gt;&lt;/p&gt;  &lt;p&gt;El siguiente paso es habilitar la cache en disco y para optimizar la cache para eventos de video online marcar el check&lt;em&gt; Enable request consolidation&lt;/em&gt; (&lt;a href="http://learn.iis.net/page.aspx/654/configure-request-consolidation-feature-in-application-request-routing/" target="_blank"&gt;más información&lt;/a&gt; sobre esta característica).&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_49DDC734.png" width="602" height="236" /&gt;&lt;/p&gt;  &lt;p&gt;Para lograr que se cacheen peticiones con respuestas de tamaño considerable como por ejemplo porciones de video es necesario incrementar el valor de &lt;em&gt;Response buffer threshold&lt;/em&gt; a 2048 KB.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_566B7450.png" width="601" height="181" /&gt;&lt;/p&gt;  &lt;p&gt;Por último en &lt;em&gt;Proxy Type&lt;/em&gt; debemos asegurarnos de que están marcados Use URL Rewrite to inspect incoming request y Enable SSL offloading (este último check hará que la comunicación entre el servidor Web y el proxy no se haga por SSL aunque la petición sea SSL si confiamos en la red por la que se realizarán las comunicaciones ahorraremos la carga adicional que supone SSL).&lt;/p&gt;  &lt;p&gt;El paso final es introducir en &lt;em&gt;Reverse Proxy &lt;/em&gt;la dirección del servidor Web para el que estamos configurando el proxy (p.e.: &lt;a href="http://www.koalink.tv"&gt;www.koalink.tv&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_47549576.png" width="623" height="198" /&gt;&lt;/p&gt;  &lt;p&gt;Ahora solo queda un último paso: que todos los clientes que queramos que usen este proxy resuelvan la dirección del servidor Web a la dirección del proxy, mediante la configuración adecuada del DNS de los clientes o de su archivo HOSTS (c:\windows\system32\drivers\etc\hosts&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;                &lt;h2&gt;Comprobar el funcionamiento del proxy&lt;/h2&gt;  &lt;p&gt;La primera comprobación que debemos hacer es que el proxy está respondiendo. Para ello simplemente apuntaremos el navegador a &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt; y debemos recibir exactamente la misma respuesta que si navegásemos directamente al servidor Web directamente.&lt;/p&gt;  &lt;p&gt;La segunda es ver que tras un numero significativo de peticiones existen ficheros en el directorio de disco que hemos configurado para la cache (c:\cache en este caso).&lt;/p&gt;  &lt;p&gt;La tercera es ver que los contadores de estado de la cache, en la pantalla principal de Application Request Routing Caching, empiezan a mostrar actividad:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_48F53B7D.png" width="579" height="243" /&gt;&lt;/p&gt;  &lt;h2&gt;Referencias adicionales&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.iis.net/download/applicationrequestrouting" target="_blank"&gt;Application Request Routing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/654/configure-request-consolidation-feature-in-application-request-routing/" target="_blank"&gt;Configure Request Consolidation Feature in Application Request Routing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/575/configure-and-enable-disk-cache-in-application-request-routing/" target="_blank"&gt;Configure and Enable Disk Cache in Application Request Routing&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=195695" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Nk4uetEYKzM:eSdUubnPX6k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Nk4uetEYKzM:eSdUubnPX6k:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Nk4uetEYKzM:eSdUubnPX6k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=Nk4uetEYKzM:eSdUubnPX6k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/Nk4uetEYKzM" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/IIS/default.aspx">IIS</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/06/07/proxy-cache-con-iis-application-request-routing.aspx</feedburner:origLink></item><item><title>Estuve en: ALM Sessions 2011: Caminado hacia la agilidad con Visual Studio 2010</title><link>http://feedproxy.google.com/~r/mlbb/~3/C1vZxdHpGxg/estuve-en-alm-sessions-2011-caminado-hacia-la-agilidad-con-visual-studio-2010.aspx</link><pubDate>Sun, 27 Mar 2011 18:26:20 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:191148</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=191148</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=191148</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/03/27/estuve-en-alm-sessions-2011-caminado-hacia-la-agilidad-con-visual-studio-2010.aspx#comments</comments><description>&lt;p&gt;El pasado 9 de Marzo en el marco del Cloud Day de Microsoft tuve el placer de participar en las ALM Sessions. No es que no me guste la nube, pero como el público me tiene más encasillado que a Micheal Landon, me toco hablar una vez más de las excelentes capacidades de Visual Studio para implementar metodologías ágiles. Mis compañeros Unai Zorrilla y Ibon Landa participaron también en tan magno evento. Ibon, con dos ponencias &lt;a title="Nubes híbridas con Azure Connect" href="http://geeks.ms/blogs/ilanda/archive/2011/03/27/video-nubes-h-237-bridas-con-azure-connect.aspx" target="_blank"&gt;Nubes híbridas con Azure Connect&lt;/a&gt; y &lt;a title="Gestión efectiva con Project Server y Team Foundation Server" href="http://geeks.ms/blogs/ilanda/archive/2011/03/25/video-gesti-243-n-efectiva-con-project-server-y-team-foundation-server.aspx" target="_blank"&gt;Gestión efectiva con Project Server y Team Foundation Server&lt;/a&gt; (le toco sustituir a &lt;a href="http://geeks.ms/blogs/jlsoria" target="_blank"&gt;Jose Luis Soria&lt;/a&gt;, que estaba de ponente en el TechEd de Oriente Medio) y Unai con una ponencia sobre &lt;a title="Seguridad basada en Claims" href="http://geeks.ms/blogs/unai/archive/2011/03/26/video-seguridad-basada-en-claims-cloud-day.aspx" target="_blank"&gt;Seguridad basada en Claims&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;En mi sesión titulada Caminando hacia la agilidad con Visual Studio 2010 vimos, en base a escenarios reales, como TFS facilita la adopción de una metodología ágil de desarrollo de software y lleva a los equipos de desarrollo buenas prácticas de ingeniería del software que proporcionan un claro retorno de la inversión y una ventaja competitiva basada en el control explícito de los proyectos y la detección temprana de las fugas de rendimiento por problemas de calidad, evitando la burocracia y facilitando las tareas que el desarrollador realiza.&lt;/p&gt;  &lt;p&gt;Para aquellos que os perdisteis el evento o que no pudisteis asistir a mi sesión os dejo la presentación que utilicé y el video de la misma:&lt;/p&gt;  &lt;div style="width:425px;" id="__ss_7406467"&gt;&lt;object id="__sse7406467" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=alm2011-caminandohacialaagilidadconvisualstudio2010-110327131110-phpapp02&amp;amp;stripped_title=caminando-hacia-la-agilidad-con-visual-studio-2010&amp;amp;userName=rodrigo.corral" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse7406467" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=alm2011-caminandohacialaagilidadconvisualstudio2010-110327131110-phpapp02&amp;amp;stripped_title=caminando-hacia-la-agilidad-con-visual-studio-2010&amp;amp;userName=rodrigo.corral" type="application/x-shockwave-flash" allowscriptaccess="always" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;  &lt;p&gt;&lt;a title="Video: Caminando hacia la agilidad con Visual Studio 2010" href="http://www.globbtv.com/12/microsite/881/caminando-hacia-la-agilidad-con-team-foundation-server" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Video: Caminando hacia la agilidad con Visual Studio 2010" border="0" alt="Video: Caminando hacia la agilidad con Visual Studio 2010" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_7E3786DB.png" width="504" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Si queréis ahondar en los conceptos que se presentan en esta sesión, tenéis una excelente oportunidad en la &lt;a href="http://www.scrumweek.com/" target="_blank"&gt;Scrum Week&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Espero que os resulte interesante.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=191148" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=C1vZxdHpGxg:8HMshneHwI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=C1vZxdHpGxg:8HMshneHwI0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=C1vZxdHpGxg:8HMshneHwI0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=C1vZxdHpGxg:8HMshneHwI0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/C1vZxdHpGxg" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/03/27/estuve-en-alm-sessions-2011-caminado-hacia-la-agilidad-con-visual-studio-2010.aspx</feedburner:origLink></item><item><title>Cacheitis: Lo mínimo que todo desarrollador debe saber sobre las cachés</title><link>http://feedproxy.google.com/~r/mlbb/~3/3kCkYiK33vA/cacheitis-lo-m-237-nimo-que-todo-desarrollador-debe-saber-sobre-las-cach-233-s.aspx</link><pubDate>Wed, 16 Feb 2011 16:15:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:188182</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=188182</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=188182</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/02/16/cacheitis-lo-m-237-nimo-que-todo-desarrollador-debe-saber-sobre-las-cach-233-s.aspx#comments</comments><description>&lt;p&gt;Creo que, después de tanto artículo sobre Scrum, los lectores de mi blog agradecerán una entrada que no tenga nada que ver con las metodologías ágiles. Sí, sí, yo también estoy un poco saturado del tema, pero de todos modos, no dudéis que vamos a seguir hablando de ello en este blog. Pero antes de meterme en harina, permitidme que os presente &lt;a href="http://www.scrumweek.com"&gt;www.scrumweek.com&lt;/a&gt;, una semana enterita de formación sobre metodologías ágiles.&lt;/p&gt;  &lt;p&gt;Pero como decía hoy no vamos a hablar de metodologías, sino de arquitectura y diseño de software. De hecho vamos a hablar de &lt;strong&gt;uno de los elementos claves de toda arquitectura: la caché&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;Seguro que ninguno de los lectores ignora los beneficios que una caché bien diseñada proporciona a casi cualquier aplicación. Se puede asegurar que sea cual sea el dominio de nuestra aplicación el rendimiento de la misma se verá beneficiado por el principio general de almacenar datos en lugares donde su acceso sea más rápido (memoria frente a disco, memoria frente a base de datos, capas más cercanas de la aplicación frente a capas más lejanas…). &lt;/p&gt;  &lt;p&gt;Este principio general se cumple casi siempre, pero no es el motivo de este post hablar de los ya conocidos efectos beneficiosos del cacheo, sino de los usos aberrantes que a menudo he visto de la cache. Y es que, si bien una cache bien utilizada es un catalizar claro del buen rendimiento, una mal uso de la cache es más a menudo de lo que muchos desarrolladores sospechan fuente de serios problemas de rendimiento. Es la tan temida cacheitis. La cacheitis es una enfermedad que sufren muchísimas aplicaciones, consiste en hacer una mal uso de la cache que provoca una dolorosa inflamación de la misma que la hace totalmente inservible. La cacheitis se manifiestas con muchos síntomas diferentes siendo los más significativos un altísimo consumo de memoria y un mal rendimiento de la aplicación.&lt;/p&gt;  &lt;p&gt;La cacheitis tiene &lt;strong&gt;sus orígenes&lt;/strong&gt; en diversos malos usos de la caché casi siempre relacionados con olvidar alguna de las siguiente buenas prácticas:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Asume que no puedes cachearlo todo:&lt;/strong&gt; Como arquitecto, cuando te enfrentas a la difícil decisión de diseñar tu modelo de caché debes tener en cuenta que no puedes cachear todo. La cache por definición es finita. Si puedes contar con una caché infinita, simplemente no necesitas una caché. El lugar en el que suelen acabar todo los datos es la memoria, si todos los datos que va a manejar tu aplicación caben en memoria por definición y tienes la seguridad de que esto siempre va a ser así, simplemente almacénalos directamente en memoria (ignoro aquí la necesidad de persistencia). Por ejemplo supongamos una aplicación que utiliza una tablas de cálculo, cargar directamente esas tablas en memoria puede ser una opción interesante. De todos modos, hemos de reconocer, que a menudo las aplicaciones no puede asumir está premisa. En ese caso es una labor sumamente difícil decidir cual es el balance justo entre consumo de memoria y uso de recursos más lentos como acceso a disco y petición de datos por la red, pero ese no es le punto ahora. El punto ahora es que la memoria es finita y además un recurso compartido y por tanto tu cache tiene que estar explícitamente limitada. Diseñar si tener en cuenta que la cache es finita y cachearlo todo es un error de base, una cache que cachea todo nunca va a ser efectiva. Una frase que en el Debugging and Optmization Team de Plain Concepts hemos oído a menudo es: ‘Cómo puede ser lenta la aplicación si lo cacheamos todo’… cachear todo es dañino por que la cache es finita. Si en una cache finita, cacheas todo el resultado será que algo tendrá que salir de la caché para que entre lo último que has cacheado y que tu cache por lo tanto siempre contendrá lo último cacheado, pero no lo que más importante sea cachear. &lt;strong&gt;La cache debe almacenar lo recursos costosos que se acceden con más frecuencia, no los últimos accedidos. &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;El cacheo temprano es el origen de todos los males:&lt;/strong&gt; Parafraseando la mítica frase de Donald Knuth , ‘la optimización temprana es el origen de todos los males’, tomar decisiones de cacheo demasiado temprano es dañino en la mayoría de las ocasiones. A menudo cuando diseñamos una arquitectura establecemos mecanismos de cacheo que luego son utilizados hasta el abuso. El peligro subyacente al cacheo temprano es que comencemos a cachear sistemáticamente elementos que nos parecen costosos sin tener evidencia de que realmente son los mejores candidatos para su cacheo. Por ejemplo, llegamos a una historia de usuario que requiere cargar datos de provincias y como suponemos que van a cambiar poco decidimos cachearlos ignorando que el factor más importante a la hora de cachear es el coste de obtener la información multiplicado por el número de accesos que esa información va a ser accedida. Cachear toda la información que cambia poco simplemente por que es fácil de cachear es un error habitual. Además los patrones de acceso a la información en aplicaciones complejas son difícilmente predecibles, es muy difícil sin analizar el rendimiento de tu aplicación mediante unas adecuadas pruebas de carga que modelen el uso que va a tener, tomar las decisiones correctas sobre que cachear. Diseña para hacer el cacheo posible, pero no decidas que cachear hasta que no te quede más remedio.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;No solo existe una caché:&lt;/strong&gt; Otro error habitual es olvidar que no solo existe una cache en el sistema. El gestor de bases de datos que utilizamos implementa mecanismos de cache, el servidor web que utilizamos implementa mecanismos de cache, nuestra aplicación implementa mecanismos de caché… ¡y todos usan la memoria!. Hace un tiempo nos llamaron para ver que estaba ocurriendo en una aplicación que hacia un buen uso de la caché, de hecho el comportamiento de la aplicación era adecuado la gran mayoría de las ocasiones… excepto cuando el ‘servidor’ tenía menos de dos bigas de memoria situación en la que todo se volvía escandalosamente lento. Lo más sorprendente es que en la última versión de la aplicación habían añadido una caché que mejoraba mucho el rendimiento en la mayoría de los casos. Sin embargo la versión anterior sin caché se comportaba aceptablemente en servidores con poca memoria. Tras estudiar el comportamiento de la aplicación, sorprendentemente, en situaciones con poca memoria, elementos costosos que habitualmente debían estar en la caché sistemáticamente tenían que ser recuperados desde la base de datos. Y lo que es peor, cuando observábamos el comportamiento de la base de datos ¡también veíamos tiempos de respuesta muy elevados!. Tras tirar del hilo nos dimos cuenta de lo que estaba ocurriendo: SQL Server y ASP.Net/IIS se estaban pegando por la memoria para colocar sus respectivas cachés. Vaya, nos habíamos olvidado de que ¡la memoria es finita!. La solución, sencilla, limitar la memoria máxima a utilizar por parte de SQL Server y de ASP.Net y listo… problema solucionado.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Una colección estática o global no es una caché: &lt;/strong&gt;Aunque parezca sorprendente, no es extraño encontrar desarrolladores que implementa su propio sistema de caché. Esto siempre es una aberración. Hoy por hoy todas las tecnologías que podemos usar en una arquitectura .Net en las que el cacheo puede jugar un papel tiene un mecanismo de caché. ¡He visto cachés implementadas como colecciones estáticas! Una mecanismo de caché que no cuenta con un mecanismo de invalidación no es un mecanismo de caché. Tan importante es mantener en caché los elementos que se acceden con más frecuencia como liberar la memoria utilizada por aquellos elementos en cache que no son accedidos. Igualmente es importante, siempre que se decide cachear un elemento establecer la política de invalidación de dicho elemento.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;La cacheítis, como cualquier enfermedad tiene &lt;strong&gt;síntomas&lt;/strong&gt; que nos pueden poner sobre su pista. Casi todos estos síntomas se manifiestan con contadores de rendimiento fuera de control. El el Performance Monitor (Perfmon.exe) el termómetro que nos indicará que podemos estar sufriendo de cacheitis. Hay un parámetro que todo mecanismo de caché suele publicar en sus contadores rendimiento y que es fundamental a la hora de diagnosticar una cacheítis:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Cache Hit Ratio:&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Cuando el cliente de un sistema de caché pide el acceso a un dato que es susceptible de encontrarse en la caché y lo encuentra se produce un ‘hit’ de la cache. La relación entre las veces que se hacen peticiones a la cache y las veces que el dato buscado en la caché se encuentra en esta es el &lt;em&gt;Cache Hit Ratio. &lt;/em&gt;Un porcentaje bajo en este indicador es un síntoma claro de un mal uso de la caché. Se suele considerar un valor adecuado un ratio de alrededor del 90%.&lt;/p&gt;    &lt;p&gt;En la siguiente imagen se pueden ver diferentes contadores de rendimiento de componentes típicos de una aplicación .net:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_0A14442A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_thumb_5F00_6CDE7652.png" width="728" height="621" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;¡Ojo con la cacheitis!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=188182" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=3kCkYiK33vA:EphIalZNZAg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=3kCkYiK33vA:EphIalZNZAg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=3kCkYiK33vA:EphIalZNZAg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=3kCkYiK33vA:EphIalZNZAg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/3kCkYiK33vA" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Depuraci_26002300_243_3B00_n/default.aspx">Depuraci&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/DOT/default.aspx">DOT</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/02/16/cacheitis-lo-m-237-nimo-que-todo-desarrollador-debe-saber-sobre-las-cach-233-s.aspx</feedburner:origLink></item><item><title>¡ScrumWeek y el primer curso de certificación Professional Scrum Developer en España!</title><link>http://feedproxy.google.com/~r/mlbb/~3/hUOv-qHbD1w/161-scrumweek-y-el-primer-curso-de-certificaci-243-n-professional-scrum-developer-en-espa-241-a.aspx</link><pubDate>Wed, 16 Feb 2011 15:07:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:189070</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=189070</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=189070</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2011/02/16/161-scrumweek-y-el-primer-curso-de-certificaci-243-n-professional-scrum-developer-en-espa-241-a.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.scrumweek.com/"&gt;&lt;img height="118" width="642" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/Scrumweek2011_5F00_r2_5F00_c1_5F00_73577FF9.png" alt="Scrumweek2011_r2_c1" border="0" title="Scrumweek2011_r2_c1" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el marco de la primera edici&amp;oacute;n de la &lt;a target="_blank" href="http://www.scrumweek.com"&gt;ScrumWeek&lt;/a&gt; organizada por Plain Concepts y Proyectalis, desde Plain Concepts hemos preparado el primer curso de certificaci&amp;oacute;n Professiona Scrum Developer en Espa&amp;ntilde;a. Pero no solo podr&amp;aacute;s aprender y certificarte sobre Scrum y TFS a fondo, adem&amp;aacute;s hay formaci&amp;oacute;n sobre: Pruebas unitarias, Arquitectura &amp;aacute;gil, Coaching de equipos &amp;aacute;giles, Scrum (de manera agn&amp;oacute;stica a la tecnolog&amp;iacute;a) y sesiones gratuitas.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://scrumweek.eventbrite.com/"&gt;Reg&amp;iacute;strate&lt;/a&gt; ahora con un descuento del 50% sobre el valor del curso. &lt;/p&gt;
&lt;p&gt;El programa Professional Scrum Developer .NET (PSD.NET) capacita, eval&amp;uacute;a y certifica a los desarrolladores de Scrum que trabajan en tecnolog&amp;iacute;as .NET. Durante Scrumweek se llevar&amp;aacute; a cabo un curso PSD.NET durante el cual se mostrar&amp;aacute; c&amp;oacute;mo utilizar pr&amp;aacute;cticas de ingenier&amp;iacute;a de software modernas para desarrollar un incremento de funcionalidad potencialmente entregable, en el marco de Scrum, Visual Studio y Team Foundation Server 2010, y trabajando como parte de un equipo autoorganizado y multifuncional que practica un desarrollo iterativo e incremental. Las clases son guiadas por ejercicios pr&amp;aacute;cticos, en los que los estudiantes trabajan en equipo para desarrollar incrementos completados de elementos del Backlog de producto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lugar y fecha&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La ScrumWeek Madrid 2011 tendr&amp;aacute; lugar del 4 al 8 de Abril (lugar pendiente de determinar).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROGRAMA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El programa de esta semana &amp;Aacute;gil incluye:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cursos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Curso de Scrum (iniciaci&amp;oacute;n a intermedio), por Rodrigo Corral y Jos&amp;eacute; Luis Soria (lunes-martes, 9 a 18)&lt;/li&gt;
&lt;li&gt;Coaching de equipos &amp;Aacute;giles, por &amp;Aacute;ngel Medinilla (lunes-mi&amp;eacute;rcoles, 9 a 15)&lt;/li&gt;
&lt;li&gt;Arquitectura &amp;Aacute;gil, por Unai Zorrilla (mi&amp;eacute;rcoles-jueves, 9 a 15)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Seminarios y talleres en profundidad&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gerencia &amp;Aacute;gil, por &amp;Aacute;ngel Medinilla (jueves, 9 a 18)&lt;/li&gt;
&lt;li&gt;Taller de pruebas unitarias, por Ib&amp;oacute;n Landa (viernes, 9 a 15)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sesiones divulgativas gratuitas&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio &amp;Aacute;gil, por Ib&amp;oacute;n Landa (jueves-viernes, 16 a 18)&lt;/li&gt;
&lt;li&gt;Cultura Corporativa &amp;Aacute;gil (lunes-martes, de 16 a 18)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scrum Clinic&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por &amp;Aacute;ngel Medinilla y Rodrigo Corral (viernes, 9 a 15)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Curso oficial Professional Scrum Developer .NET&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Por Rodrigo Corral y Jos&amp;eacute; Luis Soria (lunes-viernes, d&amp;iacute;a completo)&lt;/p&gt;
&lt;p&gt;Adicionalmente, el programa incluir&amp;aacute; la celebraci&amp;oacute;n de una serie de sesiones divulgativas, talleres, coloquios, reuniones de grupos locales y networking, adem&amp;aacute;s de un Coding Dojo, las tardes de lunes a mi&amp;eacute;rcoles, as&amp;iacute; como un barcamp-cena el jueves. Permaneced atentos a esta p&amp;aacute;gina y a nuestras noticias para m&amp;aacute;s informaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/Scrumweek2011_5F00_r6_5F00_c2_5F00_74D89C0D.png"&gt;&lt;img height="91" width="642" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/Scrumweek2011_5F00_r6_5F00_c2_5F00_thumb_5F00_79DAD9BC.png" alt="Scrumweek2011_r6_c2" border="0" title="Scrumweek2011_r6_c2" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=189070" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hUOv-qHbD1w:vrLGSn-IjIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hUOv-qHbD1w:vrLGSn-IjIg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hUOv-qHbD1w:vrLGSn-IjIg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=hUOv-qHbD1w:vrLGSn-IjIg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/hUOv-qHbD1w" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Plain+Concepts/default.aspx">Plain Concepts</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2011/02/16/161-scrumweek-y-el-primer-curso-de-certificaci-243-n-professional-scrum-developer-en-espa-241-a.aspx</feedburner:origLink></item><item><title>Gestión de proyectos guiada por la intuición, o por qué gestionar proyectos es tan difícil</title><link>http://feedproxy.google.com/~r/mlbb/~3/hiO07CJpoOY/gesti-243-n-de-proyectos-guiada-por-la-intuici-243-n-o-por-qu-233-gestionar-proyectos-es-tan-dif-237-cil.aspx</link><pubDate>Mon, 13 Dec 2010 07:28:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:184472</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>11</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=184472</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=184472</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/12/13/gesti-243-n-de-proyectos-guiada-por-la-intuici-243-n-o-por-qu-233-gestionar-proyectos-es-tan-dif-237-cil.aspx#comments</comments><description>&lt;p&gt;&lt;img height="395" width="400" src="http://bp0.blogger.com/_HBTyairNaOQ/RyU3PcxAx-I/AAAAAAAAAGg/hdj9K7q8zbQ/s400/Ilusiones+opticas.gif" align="right" style="display:inline;float:right;" alt="" /&gt;Tras unos cuantos a&amp;ntilde;os participando en la gesti&amp;oacute;n de proyectos de desarrollo de software y ayudando a diversas organizaciones a mejorar como gestionan sus proyectos, he llegado a una conclusi&amp;oacute;n muy curiosa: gestionar proyectos de software es una actividad extremadamente dif&amp;iacute;cil. Continuamente veo aberraciones, errores abismales, errores que llevan descritos d&amp;eacute;cadas en los libros sobre gesti&amp;oacute;n de proyectos, errores que todos los que participamos en la gesti&amp;oacute;n de proyectos cometemos muy a menudo. Observando estos errores, buscando su causa &amp;uacute;ltima, lo que nos lleva caer una y otra vez en el mismo error he llegado a una conclusi&amp;oacute;n: &lt;strong&gt;la intuici&amp;oacute;n no sirve para gestionar proyectos&lt;/strong&gt;. La intuici&amp;oacute;n de proyectos esta llena de ideas contra intuitivas, de anti patrones, de soluciones que parecen atractivas y simples y que no funcionan. Un buen gestor de proyectos tiene que luchar continuamente contra su intuici&amp;oacute;n. Solo los conocimientos, las convicciones firmes en principios y fundamentos universales de la gesti&amp;oacute;n de proyectos nos sirve. Y evidentemente la voluntad de defender esos principios, muchos de ellos, insisto, contra intuitivos contra la gente que trata de meter su nariz en la gesti&amp;oacute;n de nuestros proyectos bas&amp;aacute;ndose en su intuici&amp;oacute;n, en el siempre se ha hecho as&amp;iacute;, o en el aqu&amp;iacute; mando yo&amp;hellip; &lt;/p&gt;
&lt;p&gt;La lista de trampas que nos encontramos en la gesti&amp;oacute;n de proyectos es inmensa, no me ha costado m&amp;aacute;s de quince minutos pensar en una serie de ejemplos. Esta lista de cosas que parecen funcionar y no lo hacen no pretende ser completa o exhaustiva, simplemente pretende soportar mi tesis de que &lt;strong&gt;la gesti&amp;oacute;n de proyectos est&amp;aacute; llena de trampas&lt;/strong&gt;, que disfrazadas como soluciones interesantes o verdades absolutas, a menudo se rebelan como errores. Errores que se repiten con demasiada frecuencia. Esta es la gran dificultad de la gesti&amp;oacute;n de proyectos: tener los conocimientos suficientes, el arsenal de respuestas preparado para que cuando alg&amp;uacute;n gestor de proyectos de postal, uno de los miembros de nuestro equipo, un consultor externo u otro que viene con una genial idea, plantea de nuevo una de estas soluciones que llevan una trampa dentro, podamos contrarrestarla con contundencia, con datos y demostraciones que dejen claro que lo que es intuitivo no siempre funciona en lo que se refiere a la gesti&amp;oacute;n de proyectos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El modelo en cascada&lt;/strong&gt;. No hay nada m&amp;aacute;s intuitivo que el &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;modelo en cascada&lt;/a&gt;, es f&amp;aacute;cil de explicar, f&amp;aacute;cil de entender, f&amp;aacute;cil de implementar, describe perfectamente las actividades claves del desarrollo de software&amp;hellip; solo tiene un problema, no funciona.&amp;nbsp; Aun as&amp;iacute; es una trampa golosa en la que miles de proyectos mueren atrapados cual moscas ignorantes del peligro. Nunca falta quien defiende este modelo, y es normal, la intuici&amp;oacute;n no dice que si dedicamos suficiente esfuerzo al principio del proyecto para eliminar la incertidumbre todo fluir&amp;aacute; despu&amp;eacute;s por nuestra cascada de manera limpia y ordenada. Con suficiente planificaci&amp;oacute;n y dise&amp;ntilde;o todo fluir&amp;aacute;. Pero hay un motivo por el que este modelo nunca a funcionado y nunca va a funcionar: Siempre hay incertidumbre, nunca vas a se capaz de eliminarla toda y en el momento en que esa incertidumbre aparezca por peque&amp;ntilde;a que sea, el modelo en cascada mostrar&amp;aacute; sus flaquezas de manera irreversible: la retroalimentaci&amp;oacute;n es casi imposible. &amp;iquest;Que pasa si en tu fase de test descubres que tu arquitectura no da el rendimiento adecuado?. Pues te pasar&amp;aacute; lo que ha un salm&amp;oacute;n que remonta una cascada: morir&amp;aacute;s exhausto sin remedio. Steve McConnell tiene una ilustraci&amp;oacute;n en su libro Rapid Application Development que yo procuro traer a mi cabeza cada vez que la tentaci&amp;oacute;n de acercarme a un modelo en cascada me ronda la cabeza:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="440" width="567" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_756F2255.png" alt="image" border="0" title="image" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border-width:0px;" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Las estimaciones son certezas.&lt;/strong&gt; Convertir las estimaciones en compromisos o certezas es otra de esas trampas que nos hacemos a nosotros mismos cada poco. Bien cuando &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2006/11/01/Estimando-_2800_no-practicando-la-brujer_ED00_a_2900_.aspx"&gt;damos estimaciones&lt;/a&gt;, bien &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2006/11/16/Recibiendo-estimaciones.aspx"&gt;cuando las recibimos&lt;/a&gt;. Pensar que somos capaces de estimar con el grado de certeza suficiente, olvidar el cono de incertidumbre es otra de esas trampas habituales. Es imposible acertar sistem&amp;aacute;ticamente en tus estimaciones, no por que yo lo diga, sino por que as&amp;iacute; lo demuestra el &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Cone_of_Uncertainty"&gt;cono de incertidumbre&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.microsoft.com/china/technet/images/itsolutions/techguide/innsol/images/msfpmd07.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;El cono de incertidumbre nos dice, que en el momento en que habitualmente estimamos un proyecto o una tarea, al principio del mismo, es alt&amp;iacute;simamente probable que nos desviemos. Boehm intuyo esta realidad en 1981 y formul&amp;oacute; el cono de incertidumbre que luego fue validado por el Laboratorio de Ingenier&amp;iacute;a del Software de la NASA. La pr&amp;oacute;xima vez que alguien quiera ignorar &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2007/07/22/el-dif-237-cil-problema-de-la-estimaci-243-n.aspx"&gt;el dif&amp;iacute;cil problema de la estimaci&amp;oacute;n&lt;/a&gt; y &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2008/10/06/estimaci-243-n-vs-adivinaci-243-n.aspx"&gt;convertir tus estimaciones en adivinaciones&lt;/a&gt;, dale con el cono en los morros&amp;hellip; y dale fuerte. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estimar con b&amp;uacute;feres. &lt;/strong&gt;Como todos nos hemos visto atrapados por las dificultades de la estimaci&amp;oacute;n en un momento u otro y todos hemos sido flagelados por no cumplir nuestras estimaciones en alguna ocasi&amp;oacute;n (pese a que el cono de incertidumbre demuestra que lo normal es no acertar), todos hemos sido victimas alguna vez de otra de esas ideas, que si bien la intuici&amp;oacute;n nos dice que son correctas, la realidad y la ciencia han demostrado como err&amp;oacute;neas: estimar con b&amp;uacute;feres. La intuici&amp;oacute;n nos dice que si a&amp;ntilde;adimos b&amp;uacute;feres a nuestras estimaciones, nuestro grado de cumplimiento de las mismas mejorar&amp;aacute;. La tozuda realidad, que a menudo es m&amp;aacute;s compleja de lo que nuestra intuici&amp;oacute;n asume demuestra que esto no es as&amp;iacute;. Y lo demuestra en forma de ley, la &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Parkinson&amp;#39;s_Law"&gt;Ley de Parkinson&lt;/a&gt;: el trabajo se expande para consumir el tiempo disponible para realizar una tarea. Da igual el b&amp;uacute;fer que a&amp;ntilde;adas, las tareas laterales, las tareas de investigaci&amp;oacute;n, las tareas divertidas, el ruido, todo esto conspirar&amp;aacute; en tu contra para que consumas el b&amp;uacute;fer. Adem&amp;aacute;s la naturaleza humana nos har&amp;aacute; &amp;lsquo;posponer el inicio de la tarea hasta que no quede m&amp;aacute;s remedio que iniciarla&amp;rsquo; o lo que es lo mismo &amp;iexcl;primero consumiremos el b&amp;uacute;fer!. &amp;iquest;Record&amp;aacute;is vuestros d&amp;iacute;as de estudiantes? Sab&amp;iacute;as la fechas de los ex&amp;aacute;menes con meses de antelaci&amp;oacute;n&amp;hellip; y si la noche anterior estabais estudiando.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Podemos sacrificar calidad para ahorrar coste o recortar plazos.&lt;/strong&gt; Esta es otra de esas trampas mentales que nos hacemos a menudo. Nos decimos: rebajemos la calidad del software que hacemos, as&amp;iacute; cumpliremos plazos o reduciremos costes. Parece intuitivo &amp;iquest;no? Al fin y al cabo todos tenemos en nuestro barrio una tienda de Chinos que demuestra esto, podemos hacer productos de menos calidad m&amp;aacute;s baratos y venderlos como churros. Olvidamos con facilidad o incluso muchos desconocen que en el software tambi&amp;eacute;n existen costes asociados a la &amp;lsquo;no calidad&amp;rsquo; y que son nuestros clientes no nosotros quienes finalmente marcan el nivel de calidad exigido. &amp;iquest;Hab&amp;eacute;is intentando mantener o extender software de baja calidad?&amp;nbsp; &amp;iquest;Hab&amp;eacute;is conseguido que un cliente acepte un software que no cumple sus expectativas de calidad? Y es que &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2006/09/02/En-el-software_2C00_-la-calidad_2C00_-no-es-opcional.aspx"&gt;en el software la calidad no es opcional&lt;/a&gt;. Fijaros en el siguiente gr&amp;aacute;fico que pod&amp;eacute;is encontrar en la p&amp;aacute;gina 69 del ya mencionado Rapid Application Development:&lt;/p&gt;
&lt;p&gt;&lt;img height="301" width="525" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_6E6F6FD0.png" alt="image" border="0" title="image" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border-width:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;En 1991 varios estudios desvelaron que los proyectos que tienen una tasa de defectos m&amp;aacute;s baja son los que logran unos plazos de entrega m&amp;aacute;s cortos. Aun as&amp;iacute; la mayor&amp;iacute;a de organizaciones ignoran esta m&amp;aacute;xima. Incre&amp;iacute;ble &amp;iquest;no?, una vez m&amp;aacute;s nos estamos dejando enga&amp;ntilde;ar por nuestra intuici&amp;oacute;n sacrificando calidad para intentar lograr terminar antes. &lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2007/01/18/evitar-quebraderos-de-cabeza-al-final-de-los-proyectos.aspx"&gt;Dejar la calidad para el final&lt;/a&gt; nunca ha sido una buena idea.&lt;/p&gt;
&lt;p&gt;Hay &lt;strong&gt;muchas otras trampas&lt;/strong&gt; que la intuici&amp;oacute;n nos pone y de las que ya he hablado en este blog:&lt;/p&gt;
&lt;p&gt;No es raro que caigamos en el error de olvidar que &lt;strong&gt;no podemos vencer &lt;/strong&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2009/08/23/Lo-quiero-todo_2C00_-todo-y-todo_2620_-o-la-triste-realidad-del-tri_E100_ngulo-de-la-gesti_F300_n-de-proyectos.aspx"&gt;&lt;strong&gt;la tiran&amp;iacute;a del tri&amp;aacute;ngulo de gesti&amp;oacute;n de proyectos&lt;/strong&gt;&lt;/a&gt;, o que olvidemos la ley de &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Frederick_P._Brooks"&gt;Brooks&lt;/a&gt; y olvidemos que &lt;strong&gt;a&amp;ntilde;adir &lt;/strong&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/rcorral/archive/2007/09/12/el-pool-de-programadores.aspx"&gt;&lt;strong&gt;recursos&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; no es una soluci&amp;oacute;n que pueda funcionar&lt;/strong&gt;, o incluso que nos creamos que existen &lt;a target="_blank" href="http://en.wikipedia.org/wiki/No_Silver_Bullet"&gt;balas de plata&lt;/a&gt;, herramientas o t&amp;eacute;cnicas maravillosas que van a hacer que ganemos velocidad de desarrollo.&lt;/p&gt;
&lt;p&gt;Lo&amp;nbsp; peor de todo es que el factor que m&amp;aacute;s influye en el desempe&amp;ntilde;o de un equipo de desarrollo no lo puedes gestionar f&amp;aacute;cilmente:&amp;nbsp; la motivaci&amp;oacute;n. Es m&amp;aacute;s, la ciencia de la motivaci&amp;oacute;n, lo que llevamos d&amp;eacute;cadas pensando que motiva a los desarrolladores se a demostrado, que contrariamente a lo que nos dice nuestra intuici&amp;oacute;n desmotiva y es un elemento t&amp;oacute;xico. Te sugiero que visites : &lt;a href="http://geeks.ms/blogs/rcorral/archive/2010/10/11/leer-antes-de-motivar-o-lo-que-debe-saber-todo-jefe-de-proyecto-sobre-la-motivaci-243-n.aspx" title="Leer antes de motivar&amp;hellip; o lo que debe saber todo jefe de proyecto"&gt;Leer antes de motivar&amp;hellip; o lo que debe saber todo jefe de proyecto&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Corolario: No eres el m&amp;aacute;s listo. Lo que no ha funcionado a muchos otros no te va a funcionar a ti. La gesti&amp;oacute;n de proyectos es una ciencia llena de trampas, soluciones atractivas que no funcionan, saber detectarlas y luchar contra ellas es el principal trabajo de quien gestiona proyectos.&lt;/p&gt;
&lt;p&gt;En el pr&amp;oacute;ximo post hablar&amp;eacute; de como Scrum evita estas trampas de la intuici&amp;oacute;n estableciendo un conjunto claro de reglas. Saltarse esas reglas es una trampa en la que muchos caen sin darse cuenta de que est&amp;aacute;n ah&amp;iacute; para protegerte de ti mismo, de tu intuici&amp;oacute;n err&amp;oacute;nea, de caer una vez m&amp;aacute;s en ciertos antipatrones.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Un saludo!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=184472" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hiO07CJpoOY:FYrqeW1oNmg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hiO07CJpoOY:FYrqeW1oNmg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hiO07CJpoOY:FYrqeW1oNmg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=hiO07CJpoOY:FYrqeW1oNmg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/hiO07CJpoOY" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/12/13/gesti-243-n-de-proyectos-guiada-por-la-intuici-243-n-o-por-qu-233-gestionar-proyectos-es-tan-dif-237-cil.aspx</feedburner:origLink></item><item><title>Evento: Metodologías ágiles con Visual Studio 2010 en la oficinas de Microsoft en Madrid</title><link>http://feedproxy.google.com/~r/mlbb/~3/y6PxbVbx13w/evento-metodolog-237-as-225-giles-con-visual-studio-2010-en-la-oficinas-de-microsoft-en-madrid.aspx</link><pubDate>Mon, 13 Dec 2010 06:54:36 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:185899</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=185899</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=185899</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/12/13/evento-metodolog-237-as-225-giles-con-visual-studio-2010-en-la-oficinas-de-microsoft-en-madrid.aspx#comments</comments><description>&lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" align="right" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_13D959A2.png" width="200" height="267" /&gt;El próximo jueves, 16 de Diciembre tendré el placer de participar en un evento sobre los temas que más me apasionan, &lt;a href="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx"&gt;gestión de proyectos&lt;/a&gt;, y &lt;a href="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx"&gt;Team System&lt;/a&gt; en las oficinas de Microsoft en Madrid. &lt;/p&gt;  &lt;p&gt;Sesión: &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032471133&amp;amp;Culture=es-ES" target="_blank"&gt;Metodologías ágiles con Visual Studio 2010&lt;/a&gt; (pinchad en el link para inscribiros)&lt;/p&gt;  &lt;p&gt;Cada vez más empresas necesitan encontrar el equilibrio entre control de los proyectos y productividad de sus equipos de desarrollo, las metodologías ágiles proponen un marco de trabajo que nos permite gestionar los proyectos y mejorar la productividad de nuestros equipos de desarrollo sin caer en la temida burocracia. Team System es un marco de trabajo ideal que proporciona de manera integrada todas las herramientas que un equipo ágil puede necesitar. En este evento veremos cómo un equipo de desarrollo puede usar metodologías ágiles junto a Team System para dar un salto importante en su productividad. &lt;/p&gt;  &lt;p&gt;Agenda: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Registro y bienvenida     &lt;br /&gt;Metodologías ágiles ¿qué son? ¿cómo nos ayudan?       &lt;br /&gt;Introducción a MSF Agile&amp;#160; &lt;br /&gt; Introducción a Scrum       &lt;br /&gt;Scrum y Team System en el mundo real       &lt;br /&gt;Team System: la herramienta perfecta para el desarrollo ágil&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Prometo un interesante paseo por las metodologías ágiles y Visual Studio.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=185899" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=y6PxbVbx13w:9k_DkgyXDRg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=y6PxbVbx13w:9k_DkgyXDRg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=y6PxbVbx13w:9k_DkgyXDRg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=y6PxbVbx13w:9k_DkgyXDRg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/y6PxbVbx13w" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/12/13/evento-metodolog-237-as-225-giles-con-visual-studio-2010-en-la-oficinas-de-microsoft-en-madrid.aspx</feedburner:origLink></item><item><title>La cobertura de código no significa nada</title><link>http://feedproxy.google.com/~r/mlbb/~3/hYw5Sx2ByMw/la-cobertura-de-c-243-digo-no-significa-nada.aspx</link><pubDate>Tue, 02 Nov 2010 07:45:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:184157</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=184157</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=184157</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/11/02/la-cobertura-de-c-243-digo-no-significa-nada.aspx#comments</comments><description>&lt;p&gt;No deja de sorprenderme cuanta gente le da una importancia excesiva al valor de la cobertura. Entiéndaseme bien, al valor absoluto de la cobertura. A la cifra en si. &lt;/p&gt;  &lt;p&gt;¿Qué significa tener una cobertura del 75%? ¿Nos dice algo este 75%? Pues la verdad es que algo dice, pero muy poco. El motivo es sencillo, una simple cifra nos da muy poca información sobre nuestro testeo unitario. Esa cifra no nos dice cómo están distribuidos nuestros test unitarios, tampoco nos dice mucho sobre la calidad de los mismos, ni sobre su mantenibilidad, ni menos aun sobre el tiempo que tardan en pasar…&lt;/p&gt;  &lt;p&gt;¿Qué situación os parece mejor? Una batería de test unitarios con una cobertura del 75% en todos los componentes o una batería de test con una cobertura del 95% en aquellos componentes de la arquitectura que más cambian y una cobertura media del 60% en el resto. Si yo pudiese elegir en que aplicación trabajar, elegiría esta segunda. Seguro que los test unitarios me van a resultar más útiles.&lt;/p&gt;  &lt;p&gt;Miremos ahora otro aspecto importante del los test unitarios. Supongamos una aplicación con una cobertura del 90% por cierto, pero que a cambio de obtener esta cobertura hemos tenido que sacrificar la velocidad de ejecución de los test. ¿Es esta una buena situación? ¿Es conveniente sacrificar otros aspectos como velocidad, mantenibilidad, tiempo consumido en su escritura excesivo, etc… para conseguir mayor cobertura? ¿Es aumentar la cobertura a cualquier precio una buena decisión?. Evidentemente no. No debemos nunca olvidar que la cobertura no sirve si olvidamos &lt;a href="http://geeks.ms/blogs/rcorral/archive/2006/12/02/beneficios-y-carater-iacute-sticas-de-un-buen-test-unitario.aspx" target="_blank"&gt;qué hace a un test unitario un buen test&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La cobertura es importante, sumamente importante,&amp;#160; pero solo puesta en contexto. Siempre que miramos a las métricas debemos hacerlo desde un &lt;a href="http://geeks.ms/blogs/rcorral/archive/2006/11/02/M_E900_tricas-mal-entendidas.aspx" target="_blank"&gt;enfoque multidimensional&lt;/a&gt;. Mi cobertura es el X% es una afirmación que no nos dice nada, pero que oímos habitualmente. Cuando miramos al porcentaje de cobertura de nuestro código debemos hacerlo desde un enfoque crítico siempre acompañado de una mirada a otros aspectos de nuestro testeo unitario, entre otros:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Son los test mantenibles: Aspecto fundamental, si tu test no son fáciles de mantener, da igual lo que hagas, su cobertura se irá reduciendo con el tiempo. &lt;/li&gt;    &lt;li&gt;Tienen más test la partes más importantes: Es una simple cuestión de economía, si tus recursos son limitados, y siempre lo son, debemos enfocar nuestros esfuerzos en aquellas partes en las que el testeo nos va a dar mejores resultados. Prestar más atenciones a aquellas partes de nuestra aplicación más propensas a cambios, luego aquellas de las que dependen otras, luego aquellos que son compartidos por varios proyectos, etc… &lt;/li&gt;    &lt;li&gt;Cuál es la relación coste beneficio de nuestro testeo unitario: debemos valorar situaciones como ¿realmente interesa complicar el proyecto con una librería de mockeado solo para ganar cobertura marginalmente?, ¿añadir un poco más de cobertura será a costa de enlentecer significativamente nuestros test?, ¿por un puntito más de cobertura vamos a añadir nuevas dependencias a nuestros test?, etc.. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cuando &lt;strong&gt;la cobertura muestra toda su potencia, como en general cualquier métrica, es cuando se estudia cómo está evolucionando.&lt;/strong&gt; La evolución de la cobertura es lo realmente importante. Ese es el aspecto clave. El problema es que casi cualquier framework de testeo unitario, por si mismo o combinado con alguna herramienta especifica, es capaz de darte informarte de cual es tu cobertura en un momento determinado, pero recoger la evolución de la cobertura es algo mucho más complejo. Para empezar necesitas como mínimo un proceso de construcción automatizado, un repositorio donde recoger la evolución de la cobertura, y un mecanismo para representarla.&lt;/p&gt;  &lt;p&gt;Los afortunados que usamos Visual Studio y Team Foundation Server contamos con todo lo necesario para tirar del hilo y mirar nuestro testeo unitario de manera poliédrica.&lt;/p&gt;  &lt;p&gt;Podemos ver la cobertura por modulo, namespace o clase de nuestra aplicación:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.buffington.com/Blog/image.axd?picture=image_thumb_43.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Podemos ver cómo evoluciona la cobertura en relación a los cambios en el código y el número de bugs:&lt;/p&gt;  &lt;p&gt;&lt;img alt="Example Build Quality Indicators report" src="http://i.msdn.microsoft.com/Dd380683.ProcGuid_BuildQualityIndicators(en-us,VS.100).png" /&gt;&lt;/p&gt;  &lt;p&gt;Ver si nuestras builds tienen cobertura suficiente y sobre todo si están pasando de situaciones de cobertura suficiente a menos cobertura:&lt;/p&gt;  &lt;p&gt;&lt;img alt="Healthy and Unhealthy version of Build Success" src="http://i.msdn.microsoft.com/Dd380643.ProcGuid_BuildSuccess_Unhealthy(en-us,VS.100).png" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="Example Build Summary report" src="http://i.msdn.microsoft.com/Dd380708.ProcGuid_Reports_BuildSummary(en-us,VS.100).png" /&gt;&lt;/p&gt;  &lt;p&gt;En conclusión ojo con pensar que un porcentaje de cobertura determinado es indicador suficiente.&lt;/p&gt;  &lt;p&gt;Un saludo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=184157" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hYw5Sx2ByMw:eygDw5TSwYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hYw5Sx2ByMw:eygDw5TSwYg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=hYw5Sx2ByMw:eygDw5TSwYg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=hYw5Sx2ByMw:eygDw5TSwYg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/hYw5Sx2ByMw" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Calidad/default.aspx">Calidad</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/11/02/la-cobertura-de-c-243-digo-no-significa-nada.aspx</feedburner:origLink></item><item><title>Haz que tu código fluya</title><link>http://feedproxy.google.com/~r/mlbb/~3/EYvox5WZOHA/haz-que-tu-c-243-digo-fluya.aspx</link><pubDate>Thu, 14 Oct 2010 14:53:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:183223</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=183223</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=183223</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/10/14/haz-que-tu-c-243-digo-fluya.aspx#comments</comments><description>&lt;p&gt;Sin duda la expresividad, la facilidad para leerlo y tener clara su intención y efectos sobre el sistema, es una de las características más importantes del código. Si por algo son interesantes las interfaces fluentes son por que aumentan extraordinariamente.&lt;/p&gt;  &lt;p&gt;Los primeros en describir formalmente esta técnica fueron Eric Evans y Martin Fowler, aunque el origen de la misma esta en el &lt;em&gt;idiom, &lt;/em&gt;descrito para C++, &lt;em&gt;method chaining&lt;/em&gt;. Quizás la primera librería que presenta un uso acusado de este idioma es la Iibrería iostream de C++ que permite construcciones de estilo de out &amp;lt;&amp;lt; “hola” &amp;lt;&amp;lt; “ “&amp;lt;&amp;lt; “mundo” &amp;lt;&amp;lt; endl, aplicando &lt;em&gt;method chaining&lt;/em&gt; al operador &amp;lt;&amp;lt;. Además en C++ se hace a menudo uso del &lt;em&gt;&lt;a href="http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.20" target="_blank"&gt;named parameter idiom&lt;/a&gt;&lt;/em&gt;, que también está en la base de las &lt;em&gt;fluent interfaces&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Cómo implementamos &lt;em&gt;fluent interfaces&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La técnica es sumamente sencilla en cualquier lenguaje orientado a objetos. Se trata básicamente en crear métodos que además de realizar una labor, que generalmente es cambiar el estado del objeto sobre el que se invoca el método devolver como resultado de la función el propio objeto (this, en los lenguajes de la familia C) de manera que podamos encadenar la siguiente llamada.&lt;/p&gt;  &lt;p&gt;Miremos el siguiente ejemplo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p style="background:white;"&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:10pt;"&gt;File&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; f = OpenFile(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;foo.txt&amp;quot;&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ReadOnly()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .CreateIfNotExist()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .AppendWhenWriting()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .BlockSize(1024)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Unbuffered()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ExclusiveAccess();&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Si el método ReadOnly de la clase está implementado de esta manera:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:10pt;"&gt;OpenFile&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; ReadOnly()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; _ReadOnly = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;…podemos encadenar la llamada a CreateIfNotExists sin problemas, dotando a nuestro código de una expresividad mayor que si simplemente hubiésemos hecho:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:10pt;"&gt;File&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; f = OpenFile(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;foo.txt&amp;quot;&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.ReadOnly = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.CreateIfNotExist = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.AppendWhenWriting = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.BlockSize = 1024;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.BufferMode = BufferMode.Unbuffered;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.AccessMode = AccessMode.ExclusiveAccess;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Vemos que implementar &lt;em&gt;fluent interfaces&lt;/em&gt; es trivial en casi cualquier lenguaje orientado a objetos. Pero que sea fácil no quiere decir que sea adecuado siempre ¡ojo!. Ahora bien, cuando es adecuado, la potencia de esta técnica es clara y notoria. Esta técnica esta especialmente indicada cuando tenemos una serie de métodos y/o propiedades que tiene en la mayoría de las ocasiones tienen sentido invocar uno tras otro sobre el mismo objeto. Por ejemplo, una variación de esta técnica se usa para implementar las continuaciones en la Taks Parallel Library de .Net, permitiendo que podamos expresar de manera muy simple el encadenamiento de una serie de tareas:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background:white;"&gt;     &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:10pt;"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Task&lt;/font&gt;&lt;/span&gt;().ContinueWith(…)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ContinueWith(…)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ContinueWith(…)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ContinueWith(…)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Cómo nos ayudan las &lt;em&gt;fluen interfaces?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hay dos librerías que son un claro ejemplo de la potencia de esta técnica y que son sumamente útiles.&lt;/p&gt;  &lt;p&gt;La primera es una librería &lt;a href="http://fluentvalidation.codeplex.com/" target="_blank"&gt;Fluent Validation&lt;/a&gt; que permite expresar validaciones de manera sumamente elegante:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="background-color:white;"&gt;     &lt;pre&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font size="2" face="Consolas"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="2" face="Consolas"&gt; FluentValidation;

&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; CustomerValidator: AbstractValidator&amp;lt;Customer&amp;gt; {
  &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; CustomerValidator() {
    RuleFor(customer =&amp;gt; customer.Surname).NotEmpty();
    RuleFor(customer =&amp;gt; customer.Forename).NotEmpty().WithMessage(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Please specify a first name&amp;quot;&lt;/font&gt;&lt;/span&gt;);
    RuleFor(customer =&amp;gt; customer.Company).NotNull();
    RuleFor(customer =&amp;gt; customer.Discount).NotEqual(0).When(customer =&amp;gt; customer.HasDiscount);
    RuleFor(customer =&amp;gt; customer.Address).Length(20, 250);
    RuleFor(customer =&amp;gt; customer.Postcode).Must(BeAValidPostcode).WithMessage(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Please specify a valid postcode&amp;quot;&lt;/font&gt;&lt;/span&gt;);
  }

  &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; BeAValidPostcode(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; postcode) {
    &lt;span&gt;&lt;font color="#008000"&gt;// custom postcode validating logic goes here&lt;/font&gt;&lt;/span&gt;
  }
}

Customer customer = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; Customer();
CustomerValidator validator = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; CustomerValidator();
ValidationResult results = validator.Validate(customer);

&lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; validationSucceeded = results.IsValid;
IList&amp;lt;ValidationFailure&amp;gt; failures = results.Errors;
&lt;/font&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;La otra, &lt;a href="http://fluentassertions.codeplex.com/" target="_blank"&gt;Fluent Assertions&lt;/a&gt;, es una librería que permite expresar aserciones en nuestras pruebas unitarias utilizando una &lt;em&gt;fluent interface&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div style="background:white;"&gt;
    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;" color="#008000"&gt;// Example&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:10pt;"&gt;string&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; actual = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;ABCDEFGHI&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;actual.Should().StartWith(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;AB&amp;quot;&lt;/font&gt;&lt;/span&gt;).And.EndWith(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;HI&amp;quot;&lt;/font&gt;&lt;/span&gt;).And.Contain(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;EF&amp;quot;&lt;/font&gt;&lt;/span&gt;).And.HaveLength(9);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;" color="#008000"&gt;// Example&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;IEnumerable collection = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;[] { 1, 2, 3 };&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;collection.Should().HaveCount(4, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;because we thought we put three items in the collection&amp;quot;&lt;/font&gt;&lt;/span&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;" color="#008000"&gt;// Example&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:10pt;"&gt;var&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; recipe = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; RecipeBuilder()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160; .With(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; IngredientBuilder().For(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Milk&amp;quot;&lt;/font&gt;&lt;/span&gt;).WithQuantity(200, Unit.Milliliters))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160; .Build();&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;" color="#008000"&gt;// Act&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:10pt;"&gt;Action&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt; action = () =&amp;gt; recipe.AddIngredient(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Milk&amp;quot;&lt;/font&gt;&lt;/span&gt;, 100, Unit.Spoon);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;" color="#008000"&gt;// Assert&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;action&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160; .ShouldThrow&amp;lt;RuleViolationException&amp;gt;()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160; .WithMessage(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Cannot change the unit of an existing ingredient&amp;quot;&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160; .And.Violations.Should().Contain(BusinessRule.CannotChangeIngredientQuanity);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ambas librerías están disponibles a través de &lt;a href="http://nupack.codeplex.com/" target="_blank"&gt;NuPack&lt;/a&gt;, así que no tienes disculpa para no probarlas.&lt;/p&gt;

&lt;p&gt;¡Un saludo!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=183223" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=EYvox5WZOHA:l0L1FsGFkxs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=EYvox5WZOHA:l0L1FsGFkxs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=EYvox5WZOHA:l0L1FsGFkxs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=EYvox5WZOHA:l0L1FsGFkxs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/EYvox5WZOHA" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Patrones/default.aspx">Patrones</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/10/14/haz-que-tu-c-243-digo-fluya.aspx</feedburner:origLink></item><item><title>Leer antes de motivar… o lo que debe saber todo jefe de proyecto sobre la motivación</title><link>http://feedproxy.google.com/~r/mlbb/~3/gnAO05KnoxM/leer-antes-de-motivar-o-lo-que-debe-saber-todo-jefe-de-proyecto-sobre-la-motivaci-243-n.aspx</link><pubDate>Mon, 11 Oct 2010 10:32:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:183153</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>24</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=183153</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=183153</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/10/11/leer-antes-de-motivar-o-lo-que-debe-saber-todo-jefe-de-proyecto-sobre-la-motivaci-243-n.aspx#comments</comments><description>&lt;p&gt;Lo más bonito de mi trabajo es que los clientes no dejan de sorprenderte nunca. Hace unos días llegue a un cliente, en el que recientemente hemos arrancado un piloto de un equipo. De las primeras cosas que llamaron mi atención fue ver tres líneas diferentes en su burndown chart. Tras preguntar, el jefe de desarrollo y el Scrum Master del equipo, me contaron, no sin cierto pudor, que las líneas representaban diferentes grados de cumplimiento de los objetivos del sprint, ¡cómo si fuese posible cumplir en diferentes medidas el trabajo comprometido para un sprint!.&lt;/p&gt;  &lt;p&gt;Me reacción fue de clara contrariedad. Ellos sabían que la cosa no me iba a hacer gracia, pero se veían en la necesidad clara de ¡motivar al equipo!. Yo sabía que no era buena idea intentar ‘motivar’ al equipo prometiéndoles recompensas económicas por cumplir ‘más’ el sprint. Lo sabía porque ya había sufrido estos intentos de ‘motivarme’ durante mi carrera profesional y siempre habían tenido resultados dañinos. Lo sabía empíricamente, pero claro, cuanto te pagan por tu conocimiento, generalmente, no vale solo con decir, ‘tu idea no vale porque yo ya la he visto fallar’. Se espera una respuesta más analítica. Les apunté un artículo de Joel Spolky sobre el tema, titulado, &lt;a href="http://spanish.joelonsoftware.com/Articles/IncentivePayConsideredHar.html" target="_blank"&gt;Los pagos de incentivos considerados dañinos&lt;/a&gt;, pero me quede con la sensación de no haber respondido a su necesidad. La gente cuanto te paga por responder preguntas y ayudarles no quieren solo saber que puede pasar y como debe actuar sino los porqués…&lt;/p&gt;  &lt;p&gt;La siguiente cuestión que se puso sobre la mesa fue: &lt;strong&gt;¿tú qué haces para motivar a tu equipo?&lt;/strong&gt; Mi respuesta es clara: &lt;strong&gt;tratar de no desmotivar&lt;/strong&gt;. Hace tiempo leí o alguien me conto, que una buena forma de actuar es tratar de no hacer lo que a ti te han hecho y te ha desmotivado. Y a eso me suelo ceñir en lo que ha motivación se refiere.&lt;/p&gt;  &lt;p&gt;Automáticamente me di cuenta de una realidad: ¡No sabía gran sobre la motivación! Y &lt;strong&gt;la motivación es el factor que más influye en el rendimiento de un equipo de desarrollo&lt;/strong&gt;, eso sí que lo tengo muy claro, gracias al trabajo de Boehm que Steve McConnell refleja en sus libros que yo he leído con deleite. Si queremos equipos motivados no es para ser nominados a gestores del año, no, es simple egoísmo (léase sin connotaciones negativas) económico. Los desarrolladores motivados producen más.&lt;/p&gt;  &lt;p&gt;En esta tesitura, tras dejar al cliente y llegar al aeropuerto, en una de esas casualidades que tiene la vida, mirando libros en el aeropuerto, tras el enésimo retraso del Vueling, encontré ‘La sorprendente verdad sobre qué nos motiva’ de Daniel H. Pink. Y ahora, unos días después de devorar el libro, puedo escribir este post.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Por qué mi intuición de que ofrecer dinero a un equipo de desarrollo por completar más historias que las comprometidas para un sprint no funciona es cierta?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo que debemos saber es que hay dos tipos de labores que los empleados pueden realizar. &lt;strong&gt;Hay tareas que son algorítmicas, que consisten en repetir una determinada receta para lograr un determinado objetivo productivo sin cabida para la creatividad o tareas heurísticas en las que el componente creativo es un factor relevante.&lt;/strong&gt; ¿Alguien duda de que el desarrollo de software es una tarea de creación? Desarrollar software exige tomar continuamente decisiones de diseño. Cada línea es una decisión de diseño o varias. No es para nada una tarea repetitiva. Un desarrollador está continuamente solucionando problemas.&lt;/p&gt;  &lt;p&gt;Hay un experimento esclarecedor descrito en el libro de Pink que demuestra científicamente que para tareas que requieren de creatividad y de dotes de resolución de problemas los incentivos económicos son dañinos. El experimento consistió en proponer a dos grupos de personas la resolución de un problema, el problema de la vela, cuyo planteamiento y solución podéis ver en la siguiente imagen, que exige cierta componente de pensamiento creativo. Se trata de sujetar la vela a la pared sin derramar una sola gota de cera. La solución una vez la conoces parece obvia, pero exige cierto pensamiento lateral para ver que es necesario sacar los clavos de la caja y que no es necesario usar las cerrillas. &lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Experimiento de la vela" border="0" alt="Experimiento de la vela" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/Experimiento_2D00_de_2D00_la_2D00_vela_5F00_4E6D727F.jpg" width="321" height="335" /&gt;&lt;/p&gt;  &lt;p&gt;A un grupo se le dijo que se le pagaría una cantidad si lograba resolver el problema, y a otro no. Sorprendentemente, el grupo remunerado obtuvo peores resultados a la hora de resolver el problema. El experimento demuestra que el hecho de establecer una recompensa económica automáticamente desvía nuestra atención de resolver el problema a obtener la recompensa.&lt;/p&gt;  &lt;p&gt;El libro de Pink describe un motón de experimentos similares que llegan a una conclusión que es contraintutiva: &lt;strong&gt;tratar de motivar el trabajo mediante incentivos económicos solo funciona para tareas muy simples. &lt;/strong&gt;Y desarrollar software no es una tarea simple. Además y de manera sorprendente, los incentivos económicos no solo no mejoran el rendimiento de los equipos de desarrollo, sino que además, a menudo ¡lo empeoran!. Es curioso ver en libro ejemplos de investigaciones que demuestran resultados muy ‘extraños’: incentivar económicamente la donación de sangre se traduce en una menor tasa de donaciones, los artistas realizan obras de peor calidad cuando están trabajando por encargo, los escolares que reciben un diploma por pintar pierden el interés por esta actividad… ¡cuando menos sorprendente!. Esto resultados ponen en evidencia la creencia general en gestión de que las personas respondemos al palo y la zanahoria, a un esquema de incentivos y castigos.&lt;/p&gt;  &lt;p&gt;Para conocer el porqué hay que tener en cuenta que existen dos tipos fundamentales de motivación: la motivación extrínseca, es aquella que aparece cuando lo que atrae no es la acción que se realiza en sí, sino lo que se recibe a cambio de la actividad realizada (por ejemplo, dinero, comida o cualquier otra forma de recompensa) y la motivación extrínseca, que aparece cuando el individuo realiza una actividad por el simple placer de realizarla, sin que nadie de manera obvia le de algún incentivo externo. Cuando hablamos de trabajos en los que la creatividad juega un papel, la motivación intrínseca es sumamente importante, muchísimo más que la motivación extrínseca. Y lo que es más relevante, la motivación extrínseca forzada daña el rendimiento en este tipo de actividades.&lt;/p&gt;  &lt;p&gt;No hay mejor manera de convertir un trabajo interesante y motivador en una pesada carga que tratar de incentivarlo. Si a un desarrollador le ofreces incentivos por realizar su trabajo, automáticamente le estas lanzando el mensaje de que el trabajo que realiza no debe despertar en él el interés suficiente por si mismo. Todos los desarrolladores odiamos los trabajos que no son interesantes, que no plantean un reto o una oportunidad de aprendizaje. Evidentemente en el desarrollo de software hay muchos trabajos que son repetitivos, pero por suerte, esto son susceptibles de ser automatizados, pedir a un desarrollador que automatice un trabajo repetitivo es mucho más productivo que remunerarle por realizar un trabajo que considera desagradable. &lt;/p&gt;  &lt;p&gt;La psicología ha dado la explicación a algo que se sabía hace mucho tiempo. Fijaros en los factores que motivan a los desarrolladores, descubiertos por Barry Bohem hace décadas, tal y como aparecen en recomendable artículo &lt;a href="http://www.sciinfo.com/resources/SCI_Best_Practices_to_Increase_Productivity.pdf" target="_blank"&gt;Best Practices to Increase Productivity and Decrease Turnover&lt;/a&gt; de Janet Amirault:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/image_5F00_133996B4.png" width="701" height="375" /&gt;&lt;/p&gt;  &lt;p&gt;El salario, en el caso de los desarrolladores de proyectos y los gestores aparece en el noveno lugar, tres más abajo que para la gente en general. Vamos que intentar motivar a desarrolladores con dinero, no da buenos resultado, hay factores mucho más influyentes y adecuados.&lt;/p&gt;  &lt;p&gt;El corolario, expresado por Pink en su libro es que debemos recordar siempre que &lt;strong&gt;los incentivos basados en ‘si haces esto obtendrás aquello’ pueden eliminar la poderosa motivación intrínseca, reducir el rendimiento, dañar la creatividad, apartarnos de una conducta adecuada para lograr los objetivos volverse adictivos (necesitándose mayores y mayores incentivos cada vez) y potenciar el pensamiento cortoplacista.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Veamos qué escenario nos encontraríamos si cogemos un equipo y le ofrecemos dinero por terminar más historias de las comprometidas para un sprint. Para empezar, algo que es una meta loable, conseguir los objetivos marcados, algo a lo que nuestro ‘buenismo’ natural nos empuja, se convertiría en algo por lo que debemos ser sobre compensados. Implícitamente es admitir que el trabajo no es interesante, o no es motivador por si mismo o que los objetivos solo son factibles con una sobre motivación. Además la gente, como demuestra el experimento de la vela la gente se concentraría en fin, y olvidaría los medios. El fin de obtener el objetivo haría que fuésemos menos eficientes en el proceso de obtenerlo. Además seguro que algunos desarrolladores, sino todos, tomarían atajos de calidad, o no escribirían test unitarios o actualizarían la documentación solo para cerrar un historia más y obtener la recompensa, sutilmente estaríamos recompensando comportamientos anómalos. En el hipotético caso de que los incentivos funcionasen a corto, nunca funcionarían a largo plazo, pues cada vez serían necesarias mayores dosis para lograr los mismos resultados, algo insostenible económicamente.&lt;/p&gt;  &lt;p&gt;Lo que si funciona, siempre administrándolo con juicio, son las recompensas no esperadas. Y sobre todo, aunque parezca mentira, lo que más funciona, es el reconocimiento al trabajo bien hecho. Un simple reconocimiento explícito es lo que mejor resultado da según muestran los estudios que Pink muestra en su libro.&lt;/p&gt;  &lt;p&gt;Creo que después de todo, mi táctica de simplemente tratar de no desmotivar, es más que acertada. Y &lt;strong&gt;creo que la táctica de las metodologías ágiles de establecer metas claras, dar voz a los desarrolladores y permitir la excelencia son poderosos catalizadores de la motivación intrínseca.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Por si este post no ha despertado suficiente interés en vosotros sobre este tema, os dejo un video (en inglés) resumen brutal del libro de Pink, espero que lo disfrutéis:&lt;/p&gt;  &lt;p&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/u6XAPnuFjJc?fs=1&amp;amp;hl=es_ES&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube-nocookie.com/v/u6XAPnuFjJc?fs=1&amp;amp;hl=es_ES&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;p&gt;¿A vosotros que os motiva?.&lt;/p&gt;  &lt;p&gt;P.D.: Los videos con subtítulos en español (&lt;a href="http://www.youtube.com/watch?v=wUIvS7KL2Ik" target="_blank"&gt;La soprendente verdad sobre los que nos motiva 1/2&lt;/a&gt; y &lt;a href="http://www.youtube.com/watch?v=mMZmcDlLeSY" target="_blank"&gt;La sorprendente verdad sobre lo que nos motiva 2/2&lt;/a&gt;).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=183153" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=gnAO05KnoxM:sSXrIZCyj0o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=gnAO05KnoxM:sSXrIZCyj0o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=gnAO05KnoxM:sSXrIZCyj0o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=gnAO05KnoxM:sSXrIZCyj0o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/gnAO05KnoxM" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Opini_26002300_243_3B00_n/default.aspx">Opini&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/10/11/leer-antes-de-motivar-o-lo-que-debe-saber-todo-jefe-de-proyecto-sobre-la-motivaci-243-n.aspx</feedburner:origLink></item><item><title>Experiencias en la implantación de metodologías ágiles con Visual Studio Team System</title><link>http://feedproxy.google.com/~r/mlbb/~3/Vv2jg2ldoZw/experiencias-en-la-implantaci-243-n-de-metodolog-237-as-225-giles-con-visual-studio-team-system.aspx</link><pubDate>Fri, 01 Oct 2010 08:52:36 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182689</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=182689</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=182689</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/10/01/experiencias-en-la-implantaci-243-n-de-metodolog-237-as-225-giles-con-visual-studio-team-system.aspx#comments</comments><description>&lt;p&gt;Cuando Microsoft lanzo Visual Studio Team System hace unos cuatro años, muchos desarrolladores vimos como se cumplían nuestras expectativas de lograr que Visual Studio se convirtiese en una herramienta al servicio de los equipos de trabajo y no solo al servicio de los desarrolladores. Además personalmente vi colmada otra expectativa, contar con una herramienta en entornos Microsoft que acercase las metodologías a los equipos de desarrollo, con independencia de la metodología elegida y del tamaño del equipo de desarrollo. En estos cuatro años he participado en multitud de proyectos de implantación de Team System, y Team System y las metodologías ágiles forman parte de mí día a día como desarrollador. En este artículo pretendo compartir lo aprendido sobre la implantación de metodologías ágiles con Team System, las dificultades encontradas, como las hemos abordado y que resultados hemos obtenido.&lt;/p&gt;  &lt;h3&gt;¿Por qué metodologías ágiles?&lt;/h3&gt;  &lt;p&gt;En Team System cuando creamos un nuevo proyecto en nuestro Team Foundation Server, la primera elección que debemos hacer y sin duda una de las más importante para el futuro de nuestros proyectos será la metodología que queremos usar. Las opciones son variadas y cada vez lo serán más, pues cada poco tiempo aparecen nuevas plantillas metodologías que podemos instalar en nuestro Team Foundation Server. No me voy a extender mucho en este punto, más siendo que en este mismo número podéis encontrar información sobre este tema. Simplemente me gustaría recalcar la importancia de que esta elección sea fundamentada y basada en el conocimiento de varias metodologías. &lt;/p&gt;  &lt;p&gt;Dicho esto, ¿por qué elijo metodologías ágiles en la mayoría de las ocasiones? El motivo es uno solo: economía de recursos. En la mayoría de las ocasiones, lo equipos que implantan Team System tiene un conocimiento más o menos profundo de la herramienta y una fuerte predisposición para usarla, pero es raro que la motivación principal sea implantar una metodología. En esta situación es evidente que un enfoque de menos a más es el adecuado. Yo siempre digo que las metodologías se ganan como las contrarreloj en ciclismo: yendo de menos a más. Es muy difícil saber qué ‘cantidad de metodología’ necesita un proyecto, un equipo y una empresa. Poder ir de menos a más, añadir paulatinamente elementos hasta lograr el equilibrio justo entre tener un ciclo de vida gestionado y coste de mantenimiento del proceso y evitar que un exceso de burocracia asesine la adopción de la metodología es el vital. Las metodologías ágiles permite esto precisamente. Otras metodologías imponen ya de entrada unos costes de implantación y de mantenimiento que no todos los proyectos, equipos o empresas necesitan o pueden asumir. Mantenerse ágil es utilizar el mínimo de elementos metodológicos que eligiendo aquellos que más valor aportan al equipo de desarrollo. &lt;/p&gt;  &lt;p&gt;Otro aspecto que me preocupa particularmente a la hora de elegir una metodología es que el desarrollador la perciba como algo familiar, que le puede ayudar en su trabajo diario. Los desarrolladores tienden a pensar en las metodologías ágiles de manera más amistosa mientras que ven otro tipo de metodologías como una imposición de más burocracia. No digo que esta percepción sea siempre correcta, pero sí que es cierto que contar con el apoyo y la comprensión de los desarrolladores es vital a la hora lograr implantar con éxito una metodología. El motivo es simple: ¡los desarrolladores son los más numerosos de todo los roles implicados en un proyecto!&lt;/p&gt;  &lt;p&gt;Más adelante hablaré de las buenas prácticas, aspecto clave para tener un ciclo de vida sano. La metodología es el pegamento que une esas buenas prácticas y que permite gestionar el proceso de desarrollo de principio a fin, iteración tras iteración. Señalar que Scrum y MSF Agile son las opciones más frecuentemente elegidas en las implantaciones de Team System utilizando metodologías ágiles.&lt;/p&gt;  &lt;h3&gt;Las buenas prácticas: claves para el éxito&lt;/h3&gt;  &lt;p&gt;Durante el tiempo que llevo trabajando con Team System he visto equipos brillar con diferentes metodologías, ágiles y no. Pensando en esto he llegado a una conclusión clara. Todos esos equipos tenían algo en común: habían elegido una serie de buenas prácticas, no siempre las mismas, y las habían incorporado al día a día de su ciclo de vida en el marco de una metodología. Además, todos esos equipos habían utilizado inteligentemente las posibilidades que Team System nos brinda a la hora de adoptarlas. Si importante es adoptar buenas prácticas, igualmente importante es apoyar esta adopción en una herramienta que facilite la vida la vida del desarrollador. Toda práctica que queramos introducir en nuestro ciclo de vida va a encontrar una resistencia inicial por parte del equipo, utilizar una herramienta natural para el programador es vital. Team System permite a los desarrolladores realizar todas las actividades relacionadas con el seguimiento del proyecto y la puesta en marcha de buenas prácticas desde el entorno que más natural les resulta, su herramienta de desarrollo, Visual Studio.&lt;/p&gt;  &lt;p&gt;Además de usar una herramienta que facilite la adopción de buenas prácticas, seleccionar qué buenas prácticas queremos incorporar a nuestro proceso de desarrollo es una cuestión que exige atención. &lt;/p&gt;  &lt;h3&gt;El difícil problema de la gestión de proyectos&lt;/h3&gt;  &lt;p&gt;Gestionar proyectos de software es una tarea difícil. Son muchos los aspectos relevantes y muchas las personas implicadas. Entre los aspectos relevantes podríamos citar una infinidad de ellos: las herramientas, los procesos, la gestión del riesgo, la involucración del cliente, la gestión de la configuración, la calidad, el retorno de la inversión, así, una larguísima relación de cuestiones relevantes. La dificultad está en elegir en cuales de estos aspectos vamos a centrar nuestros esfuerzos en primera instancia. Además, para más inri, ni siquiera serán los mismos de proyecto a proyecto. Evidentemente todos estos aspectos de la gestión de proyectos presentan dificultades, sobre las que podemos actuar para obtener ciertos resultados. Tras años de participar en la implantación de proyectos he llegado a valorar algunas de estos aspectos por encima de otros en base a su rango de aplicación en el espectro posible de tipos de proyectos, sus posibilidades de éxito y los resultados obtenidos una vez puestos en funcionamiento. Comentar las dificultades, las acciones realizadas en pos de su puesta en marcha y los resultados obtenidos es lo que viene a continuación.&lt;/p&gt;  &lt;h3&gt;El equipo multidisciplinar, auto-organizado y auto-gestionado&lt;/h3&gt;  &lt;p&gt;Las metodologías ágiles abogan por formar un equipo multidisciplinar, auto-organizado y auto-gestionado. Entender y formar este tipo de equipos es difícil, pero si logramos establecer un proceso de trabajo que promociones las relaciones entre iguales y el trabajo en pos de una meta compartida y con una visión común, las ventajas son muchas. Es evidente que cuando logramos trabajar en equipo la productividad se ve impulsada de manera importante. Un equipo de cuatro es mucho más productivo que la simple suma de cuatro individuos. Desde mi punto de vista hay varios puntos clave a la hora de lograr funcionar en equipo: establecer una visión común de proyecto, fomentar la participación de todos los miembros y la participación de compartida en los resultados y sobre todo permitir que sea el equipo quien en base a estimaciones establezca sus compromisos. Un equipo que establece compromisos claros, basados en un proceso formal de estimación, de manera consensuada y solidaria y los asume como suyos se deja la piel para cumplirlos. No aparece ningún dilema moral sin embargo cuando un equipo no logra cumplir compromisos que han sido establecidos por terceros en su nombre.&lt;/p&gt;  &lt;h3&gt;La estimación explicita como base de compromisos realistas&lt;/h3&gt;  &lt;p&gt;Evidentemente para poder establecer compromisos realistas es necesario realizar un proceso formal de estimación. Estimar la magnitud del proyecto y la magnitud de las porciones de proyecto que vamos a abordar en cada iteración es vital, puesto que solo así podremos establecer compromisos realistas, alineados con la capacidad del equipo. Un equipo de desarrollo solo va a tratar de cumplir aquellos objetivos que percibe que son realistas. Es necesario aprender a estimar y estimar en cada iteración. Un primer paso es comprender que &lt;strong&gt;las estimaciones solo son estimaciones&lt;/strong&gt;&lt;b&gt;.&lt;/b&gt; Esto que, a priori, es una perogrullada, se tiende a obviar. Los involucrados en los proyectos, especialmente los roles involucrados en la gestión del proyecto y la relación del cliente, tienden a olvidar esto. Tenemos que entender que cuando un desarrollador da una estimación no conoce muchos de los aspectos que con más fuerza influirán en la duración de la tarea, como, por ejemplo, la dificultad técnica. Además estos aspectos son mucho más difíciles de ver cuanto más lejano está el punto de inicio de la tarea. Las estimaciones con estimaciones, no contratos. &lt;strong&gt;Cuando alguien ajeno al equipo convierte las estimaciones en contratos está realizando un acto de adivinación&lt;/strong&gt; no de ingeniería del software. Si una estimación no nos gusta o no casa con las necesidades del proyecto solo podemos añadir recursos o recortar características para que se ajuste a nuestras necesidades. Estimar y re-estimar con frecuencia, al inicio de cada iteración y tratar las estimaciones con responsabilidad y con respeto es el camino que nos lleva a poder gestionar nuestros proyectos en base a datos objetivos. ¿Pero qué técnicas podemos usar para estimar con frecuencia y con la participación de todo el equipo de manera ágil? Las técnicas que estimación que más adopción y mejores resultados presentan, usadas en combinación, en proyectos ágiles son Wideband Delphi y Planning Poker. No entro en detalles, pero si invito al lector a visitar la &lt;a href="http://geeks.ms/blogs/rcorral/archive/tags/Estimaci_26002300_243_3B00_n/default.aspx" target="_blank"&gt;sección sobre estimación de mi blog&lt;/a&gt; donde encontrará información suficiente sobre estas técnicas.&lt;/p&gt;  &lt;h3&gt;Asumir el cambio como una oportunidad&lt;/h3&gt;  &lt;p&gt;Otro aspecto complicado en la adopción de metodologías ágiles es que estas asumen el cambio como algo positivo, inherente a todo proyecto de desarrollo de software. El cambio se debe percibir como una oportunidad más que como un problema. Mi experiencia es que este planteamiento choca de manera frontal con el estilo de gestión clásico al que muchos hemos estado acostumbrados. Cambiar esta mentalidad es un reto claro en toda implantación de metodologías ágiles. Es necesario comprender y explicar que si bien los cambios son bienvenidos para que estos nos asesinen el proceso de desarrollo es necesario arbitrar cuando se pueden producir. Que el cambio sea una realidad en todo proyecto, que lo gestionemos como una oportunidad y que bien gestionado el cambio nos ayude a cubrir las necesidades del cliente no quiere decir que el cambio constante sea bueno. Solo durante la planificación de una iteración es posible asumir cambios y estos deben estar fundamentados en necesidades reales surgidas de nuevas oportunidades o de cambios en el entorno. La manera en la que lidiamos con los cambios es simple: Iterar, iterar, iterar y volver a iterar… en iteraciones cortas durante las cuales los cambios están congelados y planificar, planificar, planificar y volver a planificar en base a estimaciones al comienzo de cada iteración. Evidentemente contar con una herramienta que nos permita gestionar de manera ágil y cómoda la información surgida del proceso es vital. Es aquí donde Team Foundation Server nos ayuda de manera clara.&lt;/p&gt;  &lt;h3&gt;Pruebas unitarias&lt;/h3&gt;  &lt;p&gt;En todo proyecto hay una frase que se oye a menudo: ‘si funciona, no lo toques’. Esta máxima es un exponente claro de la dificultad que los desarrolladores hemos padecido a la hora de mejorar, mantener y extender nuestro código. Todos sabemos que una función con mil líneas es una mala solución, pero solo si contamos con un mecanismo que nos permita saber que si mejorarnos esa situación no romperemos nada. Este mecanismo es son las pruebas unitarias. Si bien esta capacidad para integrar cambios con facilidad es a mi modo ver la principal ventaja de las pruebas unitarias no es la única:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;El conjunto de test unitarios proporciona constante retroalimentación de que cada uno de los componentes sigue funcionando. &lt;/li&gt;    &lt;li&gt;Los test unitarios actúan como documentación que no se queda obsoleta, al contrario que otros tipos de documentación. &lt;/li&gt;    &lt;li&gt;Cuando el test pasa y el código de producción es refactorizado para eliminar duplicidades, es claro que el código está terminado, y el desarrollador se puede mover a la siguiente tarea. &lt;/li&gt;    &lt;li&gt;El testeo unitario fuerza un análisis y diseño explicito porque el desarrollador no puede crear código de producción sin entender realmente cuales deberían ser los resultado deseados y como probarlos. &lt;/li&gt;    &lt;li&gt;El software tiende a estar mejor diseñado, esto es, menos acoplado y más fácilmente mantenible, porque el desarrollador es libre de hacer decisiones de diseño y refactorizar en cualquier momento con la confianza de que el software todavía funciona. &lt;/li&gt;    &lt;li&gt;El conjunto de pruebas actúa como una red de seguridad contra regresiones en los bugs: Si se encuentra un bug, el desarrollador debe crear un test que ponga de manifiesto el bug y después modificar el código de producción para eliminar el bug. En sucesivas ejecuciones de los test, todas las correcciones de bugs son verificadas. &lt;/li&gt;    &lt;li&gt;El tiempo de depuración se reduce.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;La principal dificultad a la hora de adoptar las pruebas de desarrollo en nuestro ciclo de vida es asumir que se trata de una inversión no de un coste. Es evidente que implementar las pruebas unitarias tiene un coste, y que este coste solo se rentabiliza cuando hay una base de código amplia. Es necesario hacer por tanto un acto de fe y creer que las pruebas unitarias nos ayudaran de manera cada vez más importante según la base de código vaya creciendo y el software se vaya complicando. Este acto de fe, muy sencillo para los equipos que han usado pruebas unitarias con anterioridad, es más difícil si ninguno de los miembros ha usado esta técnica antes. En estas situaciones, desde la dirección del proyecto se debe lanzar un mensaje claro: las pruebas unitarias no son opcionales.&lt;/p&gt;  &lt;p&gt;El testeo unitario se debe implementar desde la primera línea de código del proyecto para que sea totalmente exitoso. Si lo hacemos, sin un gran, esfuerzo conseguiremos reunir un conjunto de pruebas que actuarán como una red de seguridad en nuestro proyecto. Otro aspecto importante en relación a las pruebas unitarias es contar con una herramienta de desarrollo que facilite al desarrollador la escritura y la ejecución de las pruebas. Visual Studio Team System cuenta con un poderosísimo framework de pruebas unitarias y con un motón de facilidades a la hora de ejecutarlas desde dentro del propio entorno. Personalmente, si tuviese que elegir la técnica que más ha impactado en como desarrollo software en los últimos años, sin dudarlo ni un segundo, diría que es el testeo unitario y su integración en el entorno de desarrollo.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1. Testeo unitario" border="0" alt="1. Testeo unitario" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/1.Testeounitario_5F00_76859954.png" width="533" height="361" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Testeo unitario: Visual Studio Team System permite integrar con facilidad el testeo unitario en nuestra metodología de desarrollo.&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Integración frecuente y construcciones automatizadas&lt;/h3&gt;  &lt;p&gt;Una de las grandes novedades de Visual Studio Team System y Team Foundation Server es la posibilidad de crear construcciones automatizadas. Pero el simple hecho de contar con una herramienta que nos ayude en la tarea no significa que vayamos a adoptar una buena práctica. De hecho antes de Team System ya existía NAnt como herramienta de automatización de la construcción, y se trata de una gran herramienta, pero aun así pocos son los equipos de desarrollo que cuentan con la posibilidad de construir todo su proyecto con la simple ejecución de un comando, son pocos los que usan construcciones automatizadas. Conocer las ventajas que aporta las construcciones automatizadas es el único camino para que estas se popularicen y más y más equipos de desarrollo disfruten de sus bondades.&lt;/p&gt;  &lt;p&gt;El proceso de construir el software desde las fuentes es complejo. De hecho es cada vez más complejo: elegir la fuentes adecuadas, compilarlas con las versiones adecuadas de los componentes, asegurarnos que hemos compilado la configuración adecuada (debug o release), seleccionar de la salida del proceso de compilación aquellos archivos que debemos distribuir, no olvidar incluir aquellas librerías o componentes de los que depende nuestro software y asegurarnos de que su versión es la correcta, generar los archivos de ayuda, crear la estructura de directorios que espera como entrada nuestra herramienta de generación de instaladores, ejecutar el proceso de generación del instalador… y todo esto involucrando a un buen número de personas diferentes ¿de verdad alguien cree que es posible realizar este proceso manualmente sin cometer varios errores durante el mismo?. La cruda realidad es que no es posible. Y lo que es peor, a menudo los errores cometidos en alguno de los múltiples pasos que hay que dar se detectan solo al final del proceso. El resultado: ¡una enorme pérdida de tiempo!. Y lo peor del caso es que este es un proceso que se repite muchas veces a lo largo de la vida de un proyecto. Además, para agravar aún más la situación este problema ocurre cuando menos tiempo tenemos, ¡justo cuando alguien está esperando que le entreguemos el software!. &lt;/p&gt;  &lt;p&gt;En todo proyecto de software existe un ciclo que ser repite infinitas veces: escribir código, compilarlo, integrarlo y realizar pruebas. Contar con un proceso de construcción del software automatizado hace que este ciclo se acelere enormemente. &lt;/p&gt;  &lt;p&gt;El principal problema que plantean las construcciones automatizadas es que exigen una inversión de tiempo para ponerlas en marcha. Configurar un proceso de construcción completo que sea capaz de desde el código fuente de nuestro software construir el software completamente hasta el instalador y además desplegarlo en un sistema de prueba es complejo. De hecho es algo que solo es abordable y rentable si se realiza de forma incremental, haciendo que el proceso de construcción crezca de manera paralela a nuestro software. En cualquier caso, a menudo, en proyectos con problemas de integración, merece la pena invertir el tiempo necesario para configurar un proceso de construcción a posteriori. El esfuerzo es grande pero a menudo no hay otro camino para zanjar de raíz los problemas de integración en los proyectos de software. Resumiendo, más vale configurar pronto el proceso automatizado de construcción que hacerlo a posteriori cuando hay problemas. &lt;/p&gt;  &lt;p&gt;Si bien el simple hecho de poder construir nuestro software de manera automática nos proporciona claras ventajas, yendo un paso más allá y construyendo nuestro software diariamente (gracias a nuestro proceso automatizado de construcción esto es algo posible) podemos obtener ventajas añadidas. Si diariamente construimos nuestro software detectáramos rápidamente problemas de integración y corregirlos cuando los cambios que pueden ser la causa aun están frescos en nuestra memoria y por tanto nos es más fácil corregirlos. Además como parte del proceso de construcción podemos ejecutar nuestros test unitarios lo que nos proporcionará la posibilidad de detectar errores no solo relacionados con la integración. Adicionalmente, como colofón a nuestro proceso de construcción y aprovechando que nuestro proceso de construcción despliega el software construido a un entrono de pruebas podemos realizar un test de humo que asegure que el software construido tiene la calidad suficiente como para ser probado en profundidad. Este paso asegura que cualquier error relativo a la configuración del software desplegado se detecta pronto. &lt;/p&gt;  &lt;p&gt;A menudo se pone como escusa para no realizar construcciones diarias la magnitud del proyecto: ¿Cómo vamos a construir y desplegar un software tan complejo todos los días? Precisamente cuanto mayor es el proyecto mayores son las posibilidades de sufrir problemas de integración y de calidad pues más es el código que cada día se añade. Además el hecho de que grandes proyectos como por ejemplo Firefox lo haga, demuestra que es viable y rentable. Podéis ver el estado de las construcciones diarias de Firefox (http://tinderbox.mozilla.org/showbuilds.cgi?tree=Firefox). &lt;/p&gt;  &lt;h3&gt;Métricas&lt;/h3&gt;  &lt;p&gt;Las métricas son el camino hacia una gestión explicita de proyectos, basada en datos, no en intuiciones. La gran mayoría de los gestores de proyectos creen que las métricas son un instrumento poderoso, pero la gran mayoría de los proyectos no usan métricas. Este hueco se produce por la dificultad para recolectar los datos que fundamentan estas métricas. He visto implantaciones de metodologías fallar estrepitosamente por el hecho de que los desarrolladores tenían que pelear para abrir la hoja Excel en la que se realizaba el seguimiento del proyecto para alimentar los datos, con el resultado de que ese seguimiento se abandonaba.&lt;/p&gt;  &lt;p&gt;Si en algo ha cambiado Team System la gestión de proyectos es en la facilidad que tenemos para recolectar métricas de lo más variado sin interferir en el día a día del desarrollador, sin imponerle burocracia adicional. El desarrollador trabaja desde el entorno de desarrolla, realizando sus actividades habituales y de forma casi transparente alimenta un completísimo datawarehouse que permite que todo el equipo y los gestores del proyecto accedan a las métricas más relevantes relacionadas con la metodologías elegida.&lt;/p&gt;  &lt;p&gt;En las metodologías ágiles, la velocidad de desarrollo entendida como el trabajo realizado frente al trabajo que hemos estimado que nos queda por hacer es la principal métrica. Utilizar la velocidad como principal métrica está fundamentada en que incrementos en este aspecto del desarrollo son síntoma claro de mejora del proceso de desarrollo. Si desarrollamos más rápido, es que desarrollamos mejor. Además es una métrica difícilmente sesgable, si para mejorar la velocidad de desarrollo sacrificamos por ejemplo la calidad, olvidándola, o el equipo, forzándole por encima de su capacidad o cualquier otro aspecto, tarde o temprano esto se verá reflejado en la velocidad. Además la velocidad es una métrica que nos permite estimar con facilidad cuando el proyecto estará concluido o que magnitud de funcionalidad se debe quedar fuera para cumplir una fecha concreta.&lt;/p&gt;  &lt;p&gt;Implantar métricas de progreso clara, nos permite informar a partes ajenas al desarrollo de cuál es el comportamiento del proyecto de manera analítica, explícita y difícilmente rebatible. Esto hace que el resto de los afectados por un proyecto puedan actuar en fase a datos. Los comerciales no comprometen fechas imposibles, los redactores técnicos pueden planificar cuando podrán comenzar a capturar pantallazos de la documentación, el departamento de calidad final sabrá cuando debe esperar carga de trabajo relacionada con nuestro proyecto, etc…&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="2. Metricas" border="0" alt="2. Metricas" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/2.Metricas_5F00_541DDE0E.png" width="540" height="350" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Métricas: La velocidad es la métrica clave en las metodologías ágiles, Visual Studio Team System nos permite obtenerla sin imponer burocracia al desarrollador.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Facilitar la comunicación&lt;/h3&gt;  &lt;p&gt;La comunicación dentro de los proyectos y hacia afuera de los proyectos es un problema claro que todas las metodologías tratan de atajar. Algunas como RUP o CMMI ponen el peso en la documentación y en generara artefactos que actúen como repositorios de información que se mueven de un lado para otro. Otras como Scrum o XP y en general las metodologías ágiles asumen que las personas son el principal repositorio de conocimiento y tratan de habilitar mecanismos (como una serie de reuniones con propósito claro, asistentes determinados, duración preestablecida y entregables predefinidos) para promocionar que las personas compartan información. Sin duda en todo proceso de desarrollo ágil o no tendremos que mantener una magnitud mayor o menor de documentación.&lt;/p&gt;  &lt;p&gt;Es vital lograr que todo el equipo esté informado. Es aquí donde una herramienta de gestión de proyectos juega un papel vital. Contar con un lugar único donde el desarrollador pueda consulta sus tareas, sus bugs o donde el gestor del proyecto pueda consultar si un requisito esta implementado o probado o no facilita de manera radical el acceso a la documentación. Pero no solo eso, exprimir al máximo las capacidades de notificaciones que Team Foundation Server pone a nuestro servicio nos va a permitir lograr un enfoque ‘push’ en nuestra gestión de proyectos. Ya no es necesario recordar mirar nuestras métricas, podemos recibirlas en nuestro correo cada día. Unamos esto a la capacidad que tiene el portal del proyecto de Team System para radiar información hacia el exterior del proyecto, para actuar como repositorio de la información y sobre todo, para informarnos de cuando hay cambios en documentos de nuestro interés y veremos que la labor de gestión de proyectos será mucho más efectiva, gracias a la utilización de herramientas como gestores documentales, wikis y listas de discusión.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="3. Alertas" border="0" alt="3. Alertas" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/3.Alertas_5F00_49AC6E14.png" width="508" height="494" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Alertas: La capacidad de subscribirnos a información relevante facilita enormemente la gestión del proyecto&lt;/em&gt;.&lt;/p&gt;  &lt;h3&gt;Calidad, calidad y… calidad&lt;/h3&gt;  &lt;p&gt;Unos de los principios de MSF dice que ‘La calidad es el negocio de todos todos los días’. No dejar la calidad para el final es vital. Si algo he aprendido implantando metodologías es que es imposible pensar en tener un proceso de desarrollo sano y sostenible sin incorporar testers a los proyectos. Podéis ahondar en las justificaciones leyendo un artículo publicado en mi blog, titulado ‘Pon un tester en tus proyectos’ (&lt;a href="http://geeks.ms/blogs/rcorral/archive/2006/10/21/Pon-un-tester-en-tus-proyectos.aspx"&gt;http://geeks.ms/blogs/rcorral/archive/2006/10/21/Pon-un-tester-en-tus-proyectos.aspx&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Es difícil asumir que añadir calidad a nuestro software, hasta cierto punto, al contrario de lo que puede parecer a primera vista, reduce los costes de desarrollo y acorta los plazos. La reducción de costes se produce porque con un adecuado proceso de desarrollo, que tenga la calidad del software como un factor central, se descubre antes los errores. Y los errores, de cualquier índole, son más costosos cuanto más tarde se descubren, además estos coste se incrementan siguiendo un función exponencial. Descubrir que nuestra arquitectura no es capaz de gestionar el número requerido de transacciones por segundo, es infinitamente más costoso de corregir si se descubre durante las pruebas de aceptación que durante la revisión de la arquitectura. La reducción del tiempo de desarrollo se produce porque es mucho más fácil construir software sobre software estable que sobre software que no es estable. Hoy en día todos los procesos de desarrollo de software son en mayor o menor medida iterativos e incrementales. Es imposible construir un incremento de funcionalidad si la base de ese incremento no es estable.&lt;/p&gt;  &lt;p&gt;Debemos tener en cuenta que el nivel de calidad lo decide el cliente no nosotros. Ningún cliente aceptará de buen grado un software que no cumple sus estándares de calidad. Poner el esfuerzo en averiguar cuál es el nivel de calidad que nuestros clientes requieren y asegurar que durante todo el proceso de desarrollo estamos muy próximos a ese nivel. Pasarse es desperdiciar fuerzas y quedarse corto significa que en algún momento tendremos que hacer un esfuerzo añadido para alcanzar las expectivas de calidad de nuestro cliente. Si queremos poder actuar con agilidad, incorporar cambios de manera sencilla, y construir el software de manera iterativa e incremental es imprescindible lograr mantener el nivel de calidad a lo largo de todo el proceso.&lt;/p&gt;  &lt;p&gt;Cuando apareció Visual Studio Team System, Microsoft puso a nuestra disposición una herramienta de pruebas completamente integrada en el ciclo de desarrollo de la aplicación. Los testers son uno más del equipo de desarrollo, utilizan las mismas herramientas que los desarrolladores y consolidan la información sobre los resultados de las pruebas en el mismo servidor de gestión de proyectos. Esto hace que el proceso de compartir la información entre desarrolladores y testers sea mucho más eficiente.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="4. Calidad" border="0" alt="4. Calidad" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/4.Calidad_5F00_5DC23845.png" width="415" height="344" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Calidad: Visual Studio Team System proporciona las herramientas necesarias para hacer de la calidad un punto central de nuestro proceso de desarrollo.&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Conclusiones&lt;/h3&gt;  &lt;p&gt;Visual Studio Team System y las metodologías ágiles son una excelente pareja que me ha permitido ayudar a numerosísimos equipos a mejorar su manera de desarrollar software. Usar metodologías ágiles me ha permitido optimizar la relación entre el esfuerzo de implantación y los resultados obtenidos. Utilizar Visual Studio Team System ha sido vital a la hora de impulsar y facilitar la adopción de buenas prácticas de gestión de proyectos e ingeniería del software.&lt;/p&gt;  &lt;p&gt;Articulo publicado con anterioridad en &lt;a href="http://www.dotnetmania.es" target="_blank"&gt;DotNetMania&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182689" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Vv2jg2ldoZw:3RosllvOr0s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Vv2jg2ldoZw:3RosllvOr0s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=Vv2jg2ldoZw:3RosllvOr0s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=Vv2jg2ldoZw:3RosllvOr0s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/Vv2jg2ldoZw" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Opini_26002300_243_3B00_n/default.aspx">Opini&amp;#243;n</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Metodolog_26002300_237_3B00_as+_26002300_193_3B00_giles/default.aspx">Metodolog&amp;#237;as &amp;#193;giles</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/10/01/experiencias-en-la-implantaci-243-n-de-metodolog-237-as-225-giles-con-visual-studio-team-system.aspx</feedburner:origLink></item><item><title>Oferta de empleo: Desarrollador de software para Plain Concepts en Bilbao</title><link>http://feedproxy.google.com/~r/mlbb/~3/IhhuZbnm_Xw/oferta-de-empleo-desarrollador-de-software-para-plain-concepts-en-bilbao.aspx</link><pubDate>Wed, 29 Sep 2010 12:17:57 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182597</guid><dc:creator>Rodrigo Corral</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://geeks.ms/blogs/rcorral/rsscomments.aspx?PostID=182597</wfw:commentRss><wfw:comment>http://geeks.ms/blogs/rcorral/commentapi.aspx?PostID=182597</wfw:comment><comments>http://geeks.ms/blogs/rcorral/archive/2010/09/29/oferta-de-empleo-desarrollador-de-software-para-plain-concepts-en-bilbao.aspx#comments</comments><description>&lt;p&gt;&lt;img style="border-right-width:0px;margin:5px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="PlainConceptsBlackLogo" border="0" alt="PlainConceptsBlackLogo" align="right" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rcorral/PlainConceptsBlackLogo_5F00_19176959.jpg" width="240" height="79" /&gt;En Plain Concepts estamos buscando para nuestra oficina de Bilbao, un desarrollador de software apasionado por .Net, con experiencia, pero sobre todo con capacidad y aptitud.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Qué harías en Plain Concepts? &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Integrarte en un equipo de desarrollo que utiliza metodologías ágiles, que desarrolla diferentes tipos de proyectos utilizando metodologías ágiles siempre usando las últimas tecnologías. Además tendrás que impartir formación o ayudar a nuestros clientes presencialmente ocasionalmente. En Plain Concepts somos todo terreno, tenemos un equipo altamente multidisciplinar. No somos una ‘cárnica’, lo único que te garantizo es no vas a estar abandonado en un cliente sin saber quienes son tus compañeros. El resto depende de tus gustos y aptitudes.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Qué conocimientos valoramos especialmente?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Cualquier desarrollador de Plain Concepts es capaz de trabajar con soltura con las principales tecnologías del framework de .Net: ASP.Net, MVC, EF, WF, WCF, Silverlight, WPF, TFS, Azure, Blend... Esperamos además que tengas un nivel muy por encima de la media en alguna de estas tecnologías. Además deberías ser capaz de formar a otros y de transmitir los conocimientos que tienes. No esperamos que simplemente escribas código sino que tu código sea excelente, que participes en las decisiones de diseño, y que sepas plantear una arquitectura coherente. También deberías tener la capacidad de resolver problemas a nuestros clientes, no será en principio tu labor principal, pero si que esperamos que si es necesario puedas ayudar en labores de consultoría en aquellas tecnologías que domines.&lt;/p&gt;    &lt;p&gt;Las certificaciones de Microsoft son bienvenidas, pero no imprescindibles.      &lt;br /&gt;En esta ocasión en concreto valoraremos especialmente que te manejes con mucha soltura con Silverlight y que manejes Blend.&lt;/p&gt;    &lt;p&gt;¡Qué hablas inglés perfectamente! perfecto… así podrás colaborar con nuestra oficina de USA. Que no… mientras hables C# a nivel nativo y entiendas perfectamente documentación técnica… no pasa nada.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Qué aptitudes valoramos más?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Debes ser un jugador de equipo. Ser capaz de criticar constructivamente el trabajo de tus compañeros y estar abierto a recibir críticas sobre tu trabajo.      &lt;br /&gt;Tienes que tener interés constante por aprender y la capacidad de aprender rápidamente.       &lt;br /&gt;Tienen que apasionarte todas las actividad relacionadas con el desarrollo de software.       &lt;br /&gt;Tienes que tener capacidad de comunicación. Escribir un blog es un plus.       &lt;br /&gt;Si te gusta colaborar con la comunidad .Net mejor que mejor: eres habitual de un club de usuarios, has dado alguna charlita en la Universidad sobre .Net, eres un habitual de los foros de MSDN y ayudas a otra gente, etc…       &lt;br /&gt;Además puestos a elegir preferirías leer Silverligth in depth que Los pilares de la tierra.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Cómo será el proceso de selección?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Duro. Te va a entrevistar todo el equipo con el que vas a trabajar. Todos ellos con derecho a veto.      &lt;br /&gt;Es posible que queramos ver el código que escribes y algunas pruebas unitarias del mismo.       &lt;br /&gt;También sería un plus que nos sorprendieses con alguna aplicación de esas que todos hemos hecho alguna vez en nuestro tiempo libre por puro placer geek (una aplicación para gestionar la agenda de tu Nokia hecha en Mono, la web de la floristería de tu hermana, el backlog de la preparación de tu boda, el informe para TFS que dice quien es el que más días llega tarde al Daily de tu equipo, el pong en XNA…).&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Me va a tocar viajar?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ocasionalmente. El puesto que vas a ocupar ‘Software Development Engineer’ no debería exigir que este todo el día con la maleta, pero viajar no te debe importar demasiado.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Cuánto voy a ganar?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;El sueldo que seas capaz de justificar, no tenemos un límite claro por arriba… ni por abajo. Este aspecto, dentro de lo razonable, no va a ser un problema. Si eres una autentico crack, lo sabremos valorar. Queremos a los mejores en nuestro equipo.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Y además de sueldo?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Vas a tener la oportunidad de formarte, de acudir a eventos organizados por Microsoft, de acudir a cursos de tu interés, etc…&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Y el horario?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Pues el que mejor te venga, casi todos hacemos entre las 8:00 y las 18:00. Paramos a comer sobre las 13:30. Los viernes para las 15:00 nos solemos ir a casa. Nadie va a medirte por las horas que tu culo pasa en la silla, sino por tu capacidad para obtener resultados, cumplir tus compromisos y logra que nuestros clientes estén satisfechos.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Quién sería mi jefe directo?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ibon Landa, Software Development Team Lead de Plain Concepts.      &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/ilanda"&gt;http://geeks.ms/blogs/ilanda&lt;/a&gt;       &lt;br /&gt;&lt;a href="http://es.linkedin.com/in/ilanda"&gt;http://es.linkedin.com/in/ilanda&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Cuándo tendría que incorporarme? &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ASAP.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿No os pasáis un poco pidiendo?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Es por tu bien, ¿no querrás ser el menos hábil de Plain Concepts? ;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Puedo saber más de Plain Concepts?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;En serio no sabes que existe Google… ;).      &lt;br /&gt;Pero no dudes en preguntar.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Tengo más preguntas, ¿qué hago?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Utiliza los comentarios del post para preguntar.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;¿Y si prefiero contactar en privado o enviar mi currículo?&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Escribe a rcorral at plainconcepts dot com, con el subject ‘Desarrollador Bilbao’.      &lt;br /&gt;El subject es importante, si no le pones bien, descartado, por no fijarte en los detalles ;).&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Un saludo. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182597" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=IhhuZbnm_Xw:yq7PCtTUqhY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=IhhuZbnm_Xw:yq7PCtTUqhY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mlbb?a=IhhuZbnm_Xw:yq7PCtTUqhY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mlbb?i=IhhuZbnm_Xw:yq7PCtTUqhY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mlbb/~4/IhhuZbnm_Xw" height="1" width="1"/&gt;</description><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Off+Topic/default.aspx">Off Topic</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Trabajo/default.aspx">Trabajo</category><category domain="http://geeks.ms/blogs/rcorral/archive/tags/Plain+Concepts/default.aspx">Plain Concepts</category><feedburner:origLink>http://geeks.ms/blogs/rcorral/archive/2010/09/29/oferta-de-empleo-desarrollador-de-software-para-plain-concepts-en-bilbao.aspx</feedburner:origLink></item></channel></rss>
