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

<channel>
	<title>Fernando Paz, Author at Software Evolutivo</title>
	<atom:link href="https://softwareevolutivo.com.ec/author/pazfernando/feed/" rel="self" type="application/rss+xml" />
	<link>https://softwareevolutivo.com.ec/author/pazfernando/</link>
	<description>Consultora de Software Empresarial</description>
	<lastBuildDate>Wed, 24 Jul 2024 21:37:12 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://softwareevolutivo.com.ec/wp-content/uploads/2024/03/cropped-Perfil-Redes-Iso-32x32.png</url>
	<title>Fernando Paz, Author at Software Evolutivo</title>
	<link>https://softwareevolutivo.com.ec/author/pazfernando/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GitHub Flow, una forma ligera y eficaz para gestionar tu Software</title>
		<link>https://softwareevolutivo.com.ec/github-flow/</link>
					<comments>https://softwareevolutivo.com.ec/github-flow/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Wed, 24 Jul 2024 20:38:09 +0000</pubDate>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub Flow]]></category>
		<category><![CDATA[versionamiento de código]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=10096</guid>

					<description><![CDATA[<p>En el mundo del desarrollo de software y la gestión de productos digitales, mantener un flujo de trabajo eficiente y colaborativo es crucial. Se presenta aquí a GitHub Flow, una forma ligera y eficaz para gestionar tu Software. Exploraremos qué es GitHub Flow, cómo funciona, y por qué podría ser la estrategia perfecta para tu [&#8230;]</p>
<p>The post <a href="https://softwareevolutivo.com.ec/github-flow/">GitHub Flow, una forma ligera y eficaz para gestionar tu Software</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="10096" class="elementor elementor-10096">
				<div class="elementor-element elementor-element-d8f38cc e-flex e-con-boxed e-con e-parent" data-id="d8f38cc" data-element_type="container" data-e-type="container" id="se-ol_li">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-90b7a0d elementor-widget elementor-widget-text-editor" data-id="90b7a0d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>En el mundo del desarrollo de software y la gestión de productos digitales, mantener un flujo de trabajo eficiente y colaborativo es crucial. Se presenta aquí a GitHub Flow, una forma ligera y eficaz para gestionar tu Software. Exploraremos qué es GitHub Flow, cómo funciona, y por qué podría ser la estrategia perfecta para tu equipo de TI.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-901236b elementor-widget elementor-widget-heading" data-id="901236b" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">¿Qué es GitHub Flow?</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-b04b3ef elementor-widget elementor-widget-text-editor" data-id="b04b3ef" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>GitHub Flow es un modelo de flujo de trabajo ligero y basado en ramas que facilita la experimentación y colaboración en equipos de desarrollo. Diseñado para ser simple y efectivo, este flujo se centra en la integración continua (CI) y la entrega frecuente de código.</p>								</div>
				</div>
		<div class="elementor-element elementor-element-dbeec9c e-grid e-con-full e-con e-child" data-id="dbeec9c" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-d778055 elementor-widget elementor-widget-text-editor" data-id="d778055" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h2>El proceso de GitHub Flow</h2><p>El siguiente diagrama muestra cómo el workflow propuesto de GitHub Flow para la gestión de los fuentes:</p><ol><li><span style="text-align: var(--text-align);"><b>Crear una rama</b>: Todo comienza con la creación de una nueva rama desde &#8216;main&#8217; (la rama por defecto), para trabajar en una nueva característica o corrección.</span></li><li><strong>Realizar cambios</strong>: En esta nueva rama, haces commits con tus cambios, iterando sobre tu trabajo.</li><li><strong>Abrir un Pull Request</strong>: Cuando estés listo para el feedback, abre un Pull Request (o un Merge Request si estás en GitLab). Esto inicia la conversación sobre tus cambios.</li><li><strong>Discusión y revisión</strong>: Tus colaboradores revisan el código, sugieren mejoras y discuten los cambios propuestos.</li><li><strong>Implementar cambios</strong>: Basado en el feedback, puedes seguir haciendo commits en tu rama para mejorar tu propuesta.</li><li><strong>Fusionar en main</strong>: Una vez que los cambios son aprobados, se fusionan en la rama principal (main).</li><li><strong>Desplegar</strong>: Con los cambios en main, puedes desplegar inmediatamente.</li></ol><p>La rama defecto es main, lo que significa que es la rama fuente para ambientes de producción y no tenemos ramas por versiones, tan solo las identificamos por tags, por ejemplo.</p><p> </p>								</div>
				</div>
				<div class="elementor-element elementor-element-f315419 elementor-widget elementor-widget-image" data-id="f315419" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img fetchpriority="high" decoding="async" width="277" height="1024" src="https://softwareevolutivo.com.ec/wp-content/uploads/2024/07/Github-Flow-2024-07-24-202902-277x1024.png" class="attachment-large size-large wp-image-10099" alt="GitHub Flow" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2024/07/Github-Flow-2024-07-24-202902-277x1024.png 277w, https://softwareevolutivo.com.ec/wp-content/uploads/2024/07/Github-Flow-2024-07-24-202902-81x300.png 81w, https://softwareevolutivo.com.ec/wp-content/uploads/2024/07/Github-Flow-2024-07-24-202902-415x1536.png 415w" sizes="(max-width: 277px) 100vw, 277px" />															</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6312cde e-flex e-con-boxed e-con e-parent" data-id="6312cde" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3ad11c6 elementor-widget elementor-widget-heading" data-id="3ad11c6" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Casos de uso sugeridos</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-6f3c3a7 elementor-widget elementor-widget-text-editor" data-id="6f3c3a7" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li>Desarrollo de nuevas características: Ideal para trabajar en nuevas funcionalidades sin afectar el código en producción.</li><li>Corrección de errores: Permite aislar y resolver problemas rápidamente.</li><li>Experimentación: Perfecto para probar nuevas ideas sin comprometer la estabilidad del proyecto.</li><li>Revisión de código: Facilita la revisión y discusión de cambios antes de integrarlos.</li><li>Releases continuas: Permite una entrega más frecuente y controlada de nuevas versiones.</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-e72209b elementor-widget elementor-widget-heading" data-id="e72209b" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Beneficios de adoptar GitHub Flow</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-53ad2e7 elementor-widget elementor-widget-text-editor" data-id="53ad2e7" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Se presentan los siguientes como los principales beneficios:</p><ol><li><strong>Simplicidad</strong>: Un flujo fácil de entender y seguir para todos los miembros del equipo.</li><li><strong>Flexibilidad</strong>: Se adapta a diferentes tamaños de equipos y tipos de proyectos.</li><li><strong>Rápida iteración</strong>: Permite ciclos de desarrollo más cortos y ágiles.</li><li><strong>Mejor colaboración</strong>: Fomenta la discusión y revisión de código entre el equipo.</li><li><strong>Calidad mejorada</strong>: La revisión constante ayuda a mantener un alto estándar de código.</li><li><strong>Despliegue continuo (CD)</strong>: Facilita la implementación de prácticas de CI/CD.</li><li><strong>Transparencia</strong>: Todos pueden ver y contribuir al progreso del proyecto.</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-3fe59d5 elementor-widget elementor-widget-heading" data-id="3fe59d5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Consideraciones y desafíos</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-986fccf elementor-widget elementor-widget-text-editor" data-id="986fccf" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Aunque GitHub Flow ofrece numerosos beneficios, es importante considerar también sus limitaciones:</p><ul><li><strong>Dificultad con versiones múltiples</strong>: <span style="text-decoration: underline;">GitHub Flow está diseñado principalmente para mantener una versión principal del software</span>. Si tu producto requiere mantener y dar soporte a múltiples versiones simultáneamente (por ejemplo, para diferentes clientes o plataformas), este flujo puede resultar complicado de gestionar.</li><li><strong>Complejidad en proyectos grandes</strong>: En proyectos muy extensos o con un gran número de colaboradores, el flujo puede volverse caótico si no se gestiona cuidadosamente. La cantidad de ramas y pull requests puede ser abrumadora sin una organización adecuada.</li><li><strong>Dependencia de CI/CD</strong>: GitHub Flow funciona mejor cuando se implementa junto con prácticas robustas de Integración Continua y Despliegue Continuo (CI/CD). Establecer y mantener esta infraestructura puede ser un desafío para equipos más pequeños o con recursos limitados.</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-8ac88d5 elementor-widget elementor-widget-heading" data-id="8ac88d5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Conclusiones</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-40345a3 elementor-widget elementor-widget-text-editor" data-id="40345a3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>GitHub Flow ofrece un enfoque ágil y efectivo para la gestión de versiones en productos digitales. <br />Su simplicidad lo hace accesible, mientras que su potencia lo hace escalable para proyectos de cualquier tamaño. <br />Al adoptar GitHub Flow, los equipos de TI pueden mejorar su colaboración, aumentar la calidad del código y acelerar el ciclo de desarrollo, llevando sus productos digitales al siguiente nivel.<br />Por supuesto hay otras propuestas para la gestión del versionamiento , como GitFlow o GitLab Flow, que pueden aplicar en escenarios donde necesitamos más control o tenemos que dar mantenimiento a versiones específicas.</p>								</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/github-flow/">GitHub Flow, una forma ligera y eficaz para gestionar tu Software</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/github-flow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arquitectura de Microservicios: qué es, ventajas y desventajas</title>
		<link>https://softwareevolutivo.com.ec/arquitectura-de-microservicios/</link>
					<comments>https://softwareevolutivo.com.ec/arquitectura-de-microservicios/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Thu, 21 Jul 2022 19:57:23 +0000</pubDate>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[microservicios]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">http://softwareevolutivo.com.ec/?p=6347</guid>

					<description><![CDATA[<p>Existen dos grandes paradigmas a la hora de diseñar Software: la Arquitectura Monolítica y la Arquitectura de Microservicios. En este artículo vamos a revisar qué es la Arquitectura de Microservicios, y cuáles son sus ventajas y desventajas. Qué es la Arquitectura de Microservicios Características de los Microservicios Ventajas de la Arquitectura de Microservicios Desventajas de [&#8230;]</p>
<p>The post <a href="https://softwareevolutivo.com.ec/arquitectura-de-microservicios/">Arquitectura de Microservicios: qué es, ventajas y desventajas</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="6347" class="elementor elementor-6347">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-4f2c10a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4f2c10a" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3f546e59" data-id="3f546e59" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1c4a4f0b elementor-widget elementor-widget-text-editor" data-id="1c4a4f0b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p>Existen dos grandes paradigmas a la hora de diseñar Software: la Arquitectura Monolítica y la Arquitectura de Microservicios. En este artículo vamos a revisar qué es la Arquitectura de Microservicios, y cuáles son sus ventajas y desventajas.</p>



<ul class="wp-block-list"><li><a href="#que-es">Qué es la Arquitectura de Microservicios</a></li><li><a href="#caracteristicas">Características de los Microservicios</a></li><li><a href="#ventajas">Ventajas de la Arquitectura de Microservicios</a></li><li><a href="#desventajas">Desventajas de la Arquitectura de Microservicios</a></li></ul>



<h2 class="wp-block-heading" id="que-es">Qué es la Arquitectura de Microservicios</h2>



<p>Antes de hablar de la Arquitectura de Microservicios, vamos a partir identificando a su predecesor que es la Arquitectura Monolítica.</p>



<p>La <strong>Arquitectura Monolítica</strong>, es un enfoque en donde todos los conceptos y dominios de negocio de un producto de Software se implementan como componentes completamente acoplados, por lo que, tanto las entradas como las salidas de cada componente tienen su razón y especificación en contexto de un único producto de Software que es indivisible.</p>



<p>Iniciando desde la interfaz del usuario (en algunos casos), pasando por una o varias capas de lógica de negocio, la capa de persistencia, y, hasta la base de datos, el producto de Software se construía como un solo concepto, y a menudo se ejecuta como un solo binario o unidad entregable (JAR, WAR, EAR, Folder, etc.).</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="373" height="303" src="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Monolitica.jpg" alt="Arquitectura Monolítica" class="wp-image-6349" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Monolitica.jpg 373w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Monolitica-300x244.jpg 300w" sizes="(max-width: 373px) 100vw, 373px" /></figure>



<p>La <strong>Arquitectura de Microservicios</strong> es un enfoque para el desarrollo de un producto de Software, en donde cada concepto específico de negocio es construido en una unidad pequeña de código accesible a través de una API liviana y bien definida.</p>



<p>El TODO del producto de Software entonces, constituye la ejecución sincronizada de un conjunto de estos servicios, cada uno con su propia e independiente definición, para el proceso de una transacción padre disparada desde una interfaz de usuario o sistema.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="611" height="301" src="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Microservicios.jpg" alt="Arquitectura de Microservicios" class="wp-image-6350" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Microservicios.jpg 611w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/Arquitectura-Monolitica-y-Microservicios-Microservicios-300x148.jpg 300w" sizes="(max-width: 611px) 100vw, 611px" /></figure>



<h2 class="wp-block-heading" id="caracteristicas">Características de los Microservicios</h2>



<p>Aunque parece no existir una especificación única para crear Microservicios, y más depende del caso de negocio y/o planificación; generalmente se sugiere que deban cumplir las siguientes características:</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/interface-icon.png" alt="" class="wp-image-6352" width="150" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/interface-icon.png 899w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/interface-icon-300x252.png 300w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/interface-icon-768x646.png 768w" sizes="(max-width: 899px) 100vw, 899px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<h3 class="wp-block-heading">Interfaz Única</h3>



<p>Cada Microservicio debe proveer una interfaz ligera y bien definida para consumo, que aísle todos los detalles técnicos, estructura de datos y datos de la capacidad de negocio que maneja, a sus clientes.</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon.png" alt="" class="wp-image-6354" width="150" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon.png 512w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon-300x300.png 300w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon-150x150.png 150w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon-450x450.png 450w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon-106x106.png 106w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/specialized_icon-70x70.png 70w" sizes="(max-width: 512px) 100vw, 512px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<h3 class="wp-block-heading">Especializado</h3>



<p>Cada servicio es diseñado con un conjunto limitado de capacidades que resuelvan uno y solo un problema de negocio, y que incluye su propia estructura de datos persistentes.</p>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/autonomuos.png" alt="" class="wp-image-6353" width="150" srcset="https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/autonomuos.png 492w, https://softwareevolutivo.com.ec/wp-content/uploads/2022/07/autonomuos-300x261.png 300w" sizes="(max-width: 492px) 100vw, 492px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<h3 class="wp-block-heading">Autónomo</h3>



<p>Cada servicio puede ser desarrollado, desplegado, operado y escalado sin afectar o depender de otros servicios o sistemas, o, de otros datos fuera de su especialización.</p>
</div>
</div>



<p>Claramente una Arquitectura de Microservicios es una aplicación del paradigma de <a href="https://es.wikipedia.org/wiki/Computación_distribuida" target="_blank" rel="noreferrer noopener">Cómputo Distribuido,</a> lo que representa muchas ventajas para el negocio pero también muchos retos en la operación y mantenimiento.</p>



<h2 class="wp-block-heading" id="ventajas">Ventajas de la Arquitectura de Microservicios</h2>



<figure class="wp-block-table setdverticaltop is-style-stripes"><table><tbody><tr><td><strong>Agilidad</strong><br>Este paradigma de desarrollo permite crear equipos pequeños e independientes que se apropian de la especialización de los servicios, acelerando el tiempo de desarrollo, facilitando la auto-organización e incluso el soporte post-producción.</td><td><strong>Escalamiento</strong><br>Esta división de funcionalidad hace más fácil la medición y observabilidad de la implementación, permitiendo planificar mejor la disponibilidad y escalabilidad.</td></tr><tr><td><strong>Simplificación de Despliegue</strong><br>Una unidad pequeña de implementación, permite ciclos de CI/CD más simples, reduciendo el tiempo de despliegue de la misma y el rollback en caso de fallos. Esto agiliza las operaciones y al mismo tiempo reduce el riesgo de innovación con nuevas características.</td><td><strong>Resiliencia</strong><br>A diferencia de una Arquitectura Monolítica, un fallo en una Arquitectura de Microservicios compete a un componente específico, lo que hace más fácil su recuperación y no desestabiliza el producto de Software por completo, sino la capacidad de negocio concreta que le compete.</td></tr><tr><td><strong>Independencia Tecnológica</strong><br>El uso de una sola tecnología no es una restricción en la Arquitectura de Microservicios, dado que su interfaz de consumo abstrae los detalles de implementación y habilita a la selección de la mejor herramienta de acuerdo a la especialización del servicio.</td><td><strong>Reutilización de Código</strong><br>Evidentemente una vez construido un servicio que atiende una capacidad de negocio, el mismo puede ser utilizado por otros productos de Software de forma que su construcción aproveche la funcionalidad ya implementada.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="desventajas">Desventajas de la Arquitectura de Microservicios</h2>



<p>Más que desventajas, se puede hablar de retos a la hora de adoptar una Arquitectura de Microservicios, y entre los principales tenemos:</p>



<figure class="wp-block-table setdverticaltop is-style-stripes"><table><tbody><tr><td><strong>Versionamiento</strong><br>Un Microservicio, al ser autónomo, suele evolucionar independientemente del producto o de los productos de Software a los cuales provee funcionalidad. Esto significa que su interfaz API y la validación del esquema de datos varía continuamente, sin embargo para no afectar la estabilidad de sus clientes antiguos debe mantener un versionamiento de los mismos y obviamente mantenerlos operando. Esto tanto para áreas de operaciones y de desarrollo implica una tarea adicional en su implementación.</td><td><strong>Pruebas</strong><br>Si bien un Microservicio por sí solo es más simple de probar, su orquestación con otros servicios (test de integración) y las pruebas integrales (pruebas end to end) son mucho más complejas. Esto resulta a menudo en una cobertura incompleta de escenarios de pruebas y un esfuerzo redoblado en su desarrollo.</td></tr><tr><td><strong>Rollback y Sistemas Distribuidos</strong><br>El reto más grande, para mí, es el diseño de sistemas distribuidos, puesto que hay que definir qué sucede en caso de fallos esperados o inesperados en la orquestación de los servicios, analizar patrones de resiliencia y recuperación de transacciones, mirar la atomicidad de operaciones y consistencia de datos, entre otros. Claro está, que para esto nos podemos apoyar en conceptos como “<a href="https://www.enterpriseintegrationpatterns.com" target="_blank" rel="noreferrer noopener">Patrones de Integración Empresarial</a>”, “<a href="https://www.redhat.com/es/topics/microservices/what-is-a-service-mesh" target="_blank" rel="noreferrer noopener">Mallas de servicios</a>” o similares, pero sin duda estas decisiones son extremadamente relevantes no solo para el desarrollo sino para el soporte post-producción.</td><td><strong>Coordinación de equipos</strong><br>Si bien, al desarrollar un Microservicio, paradigmas como la Agilidad y un equipo responsable puede representar una gran ventaja para generar valor e innovación constante en su implementación, al tener decenas o centenas de microservicios con decenas o centenas de equipos responsables, la cooperación y comunicación de estos equipos es un reto, pues el TODO de un Sistema y su evolución se puede poner en riesgo cuando se carece de una acción combinada.</td></tr><tr><td><strong>Sobrecarga de infraestructura</strong><br>En la Arquitectura Monolítica un operador a menudo mira un servidor y un Software correspondiente con su archivo log; en un paradigma de Arquitectura de Microservicios puede enfrentarse a escenarios donde un Software tiene 100 servicios y centenas de servidores, con uno o varios balanceadores, muchos archivos de logs y decenas de formatos. Aunque hoy existen esquemas de contenerización como <a href="https://softwareevolutivo.com.ec/docker-primeros-pasos/" target="_blank" rel="noreferrer noopener">Docker</a> y Kubernetes, la administración sigue siendo un reto y se necesita varias tecnologías complementarias para enfrentarlo.</td><td><strong>Tiempo y esfuerzo 1x</strong><br>A este punto del artículo ya hemos descrito muchas actividades adicionales en el diseño, implementación, operación y mantenimiento de la Arquitectura de Microservicios, por su característica de Sistema Distribuido. Por este motivo es importante sopesar el beneficio de este paradigma en contraste con el caso de negocio y los resultados esperados a corto, medio y largo plazo; del mismo modo debemos pensar en el soporte post implementación, en relación al equipo, sus capacidades.</td></tr><tr><td><strong>Despliegue</strong><br>¡Si!, desplegar un solo microservicio es simple, sin embargo desplegar cientos de ellos de forma manual se vuelve imposible. El orden de despliegue, los cambios de base de datos que implica, la estratégia de entrega (Blue-Green, Canary, etc.), entre otros, son cosas a planificar y deben estar automatizadas, con prácticas DevOps entre otras como Integración Continua (CI) y entrega Continua (CD).</td><td><strong>Logs y Monitoreo</strong><br>De la misma manera, un producto de Software Monolítico deja un solo log de operación y se puede medir su performance centralizadamente. En una Arquitectura de Microservicios, vamos a tener tantos logs como servicios implementados para el producto de Software y además si estos son redundantes, tendremos logs multiplicados por cada servicio. Debemos planificar una estratégia para rastrear errores, identificar la salud de cada servicio y del sistema como tal.</td></tr><tr><td><strong>Debug</strong><br>Encontrar un problema no siempre va a ser posible revisando logs (que al ser tantos ya nos agrega una complejidad), a veces vamos a tener que depurar la implementación y esto en un sistema distribuido no va a ser factible, por lo que se requerirá de otras técnicas y patrones que permitan repetir ciertas ciclos de transacciones.</td><td></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Pensamientos Finales</h2>



<p>A este punto del artículo, puede sonar complejo decidir por microservicios, y la verdad lo es; sin embargo, esta complejidad no se evidencia desde el momento cero de una implementación, sino que irá apareciendo gradualmente mientras vamos creando más microservicios y escalándolos.</p>



<p>Son muchas sus ventajas, y aunque hay retos, en una estratégia digital a largo plazo es sin duda el camino a adoptar, y así mismo, debe venir acompañada de un soporte directivo dado que la estructura organizacional, técnica y de costos va a tener que evolucionar también.</p>



<p>¿Debo usar Microservicios? La realidad es que muchos desarrollos de Software nacen con este enfoque, sin abordar en un primer momento las soluciones a estos desafíos, pero eventualmente lo harán. Les invito a ver una interesante conversación entre <a href="https://youtu.be/GBTdnfD6s5Q" target="_blank" rel="noreferrer noopener">Martin Fowler y Sam NewMan sobre cuando usar microservicios y cuando no</a>.</p>



<p>El soporte de este tipo de aplicaciones es complejo, pues detectar un fallo en una Arquitectura de Microservicios requiere de un entrenamiento en el flujo de negocio, en los puntos de integración y en la interpretación de los logs de información. En muchos casos al soporte de primera línea le faltan insumos para responder y el escalamiento de las incidencias es muy rápido al equipo técnico, resultando en una sobrecarga de operación y costo.</p>
								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/arquitectura-de-microservicios/">Arquitectura de Microservicios: qué es, ventajas y desventajas</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/arquitectura-de-microservicios/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kata Juego de la Vida</title>
		<link>https://softwareevolutivo.com.ec/kata-juego-de-la-vida/</link>
					<comments>https://softwareevolutivo.com.ec/kata-juego-de-la-vida/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Wed, 18 May 2022 19:35:27 +0000</pubDate>
				<category><![CDATA[Agilidad]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[coding dojo]]></category>
		<category><![CDATA[tdd]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=1671</guid>

					<description><![CDATA[<p>Una de las katas más populares al hacer Coding Dojo es la Kata Juego de la Vida, y de hecho la más usada en Code Retreat.</p>
<p>The post <a href="https://softwareevolutivo.com.ec/kata-juego-de-la-vida/">Kata Juego de la Vida</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Una de las katas más populares al hacer Coding Dojo es la Kata Juego de la Vida, y de hecho la más usada en Code Retreat.</p>



<h2 class="wp-block-heading">Descripción del problema</h2>



<p>Este Kata se trata de calcular la próxima generación del juego de la vida de Conway, dada cualquier posición inicial. Consulta&nbsp;<a href="https://es.wikipedia.org/wiki/Juego_de_la_vida" target="_blank" rel="noreferrer noopener">Juego de la vida de Conway</a>&nbsp;para conocer los antecedentes.</p>



<p><strong>Comienza con una cuadrícula bidimensional de celdas</strong>, donde cada celda está viva o muerta. En esta versión del problema, la cuadrícula es finita y no puede existir vida fuera de los bordes.&nbsp;</p>



<p>Al calcular la próxima generación de la red, sigue estas reglas:</p>



<ol class="wp-block-list"><li>Cualquier celda viva con menos de dos vecinas vivas muere, como si la causa fuera la subpoblación.</li><li>Cualquier celda viva con más de tres vecinos vivos muere, como por superpoblación.</li><li>Cualquier celda viva con dos o tres vecinos vivos seguirá viva.</li><li>Cualquier celda muerta con exactamente tres vecinos vivos se convierte en una celda viva.</li></ol>



<h2 class="wp-block-heading">Pistas</h2>



<p>La posición inicial de entrada podría ser un archivo de texto que se vea así:</p>



<p>Generación 1 inicial:</p>



<p>4 (filas) 8 (columnas)</p>



<pre class="wp-block-code"><code>0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0</code></pre>



<p>Generación 2 próxima resultante por regla No. 4:</p>



<p>4 (filas) 8 (columnas)</p>



<pre class="wp-block-code"><code>0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0</code></pre>



<h2 class="wp-block-heading">Visualiza tus casos de prueba</h2>



<p>Hemos preparado la siguiente herramienta para que puedas dibujar (en caso remoto colaborativo) tus casos de prueba, revísalo en <a href="https://docs.google.com/spreadsheets/d/1cOW-opdduBJnf_0xTVfZkfDRI8a3aednSqFoStS3McQ/edit?usp=sharing" target="_blank" rel="noreferrer noopener">Juego de la vida visual</a>.</p>



<h2 class="wp-block-heading">Casos de prueba sugeridos</h2>



<p>Asegúrate de tener suficiente cobertura de casos en los extremos, en donde hay nacimientos y muertes en el extremo de la cuadrícula.</p>



<p class="has-text-align-center has-large-font-size"><strong>!Que te diviertas! En tu Kata Juego de la vida</strong></p>



<p><strong>DISCLAIMER</strong>: La mayoría de este texto es traducido del valioso aporte en <a href="https://codingdojo.org/kata/GameOfLife/" target="_blank" rel="noreferrer noopener">GameOfLife</a>, pero no está disponible en español.&nbsp; Pero hemos añadido varias cosas a la descripción y alguna herramienta, para hacerlo en nuestro entendimiento más comprensivo.</p>
<p>The post <a href="https://softwareevolutivo.com.ec/kata-juego-de-la-vida/">Kata Juego de la Vida</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/kata-juego-de-la-vida/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mejores Historias de Usuario para Scrum</title>
		<link>https://softwareevolutivo.com.ec/mejores-historias-de-usuario-para-scrum/</link>
					<comments>https://softwareevolutivo.com.ec/mejores-historias-de-usuario-para-scrum/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Tue, 25 May 2021 03:59:11 +0000</pubDate>
				<category><![CDATA[Agilidad]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[agilidad]]></category>
		<category><![CDATA[estimación Agil]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[product management]]></category>
		<category><![CDATA[ProductManager]]></category>
		<category><![CDATA[ProductOwner]]></category>
		<category><![CDATA[Puntos de Historia]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[Story Points]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=1109</guid>

					<description><![CDATA[<p>Las Historias de Usuario son una herramienta muy usada en el mundo de la Agilidad, vienen de Extreme Programming y han sido adoptadas en marcos de trabajo ágiles como Scrum.  Pero… ¿Cómo escribimos mejores Historias de Usuario para Scrum?</p>
<p>The post <a href="https://softwareevolutivo.com.ec/mejores-historias-de-usuario-para-scrum/">Mejores Historias de Usuario para Scrum</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1109" class="elementor elementor-1109">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-ad85b6b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="ad85b6b" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-58ce958" data-id="58ce958" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cac64a7 elementor-widget elementor-widget-heading" data-id="cac64a7" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h1 class="elementor-heading-title elementor-size-large">Mejores Historias de Usuario para Scrum</h1>				</div>
				</div>
				<div class="elementor-element elementor-element-bb2eb65 elementor-widget elementor-widget-text-editor" data-id="bb2eb65" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Las Historias de Usuario son una herramienta muy usada en el mundo de la <a href="https://softwareevolutivo.com.ec/infografia-agile-crisis/" target="_blank" rel="noopener">Agilidad</a>, vienen de Extreme Programming y han sido adoptadas en marcos de trabajo ágiles como <a href="https://softwareevolutivo.com.ec/introduccion-a-scrum/" target="_blank" rel="noopener">Scrum</a>.  Pero… ¿Cómo escribimos mejores Historias de Usuario para Scrum?.</p><p>Hay que decir primero que las Historias de Usuario no son solo para la Agilidad, sino más bien son algo que describe lo que hace un usuario en el sistema para completar una determinada tarea.</p><p>Nacieron precisamente de una carencia de los requerimientos, los requerimientos funcionales anteriormente tenían un enfoque desde el sistema. Por ejemplo:</p><blockquote><p><i><span style="font-weight: 400;">El sistema debe permitir &#8230;</span></i></p></blockquote><p><span style="font-weight: 400;">Las Historias de Usuario por otro lado sacan del contexto al sistema y expresan que necesita el usuario. Por ejemplo:</span></p><blockquote><p><i><span style="font-weight: 400;">Ana como ejecutiva de cuentas requiere &#8230; para &#8230;</span></i></p></blockquote><p><span style="font-weight: 400;">La gran diferencia es que el usuario nos transmite así su necesidad&#8230; desde su óptica, con libertad de expresarse, sin lenguajes restrictivos, para luego ser traducido a una perspectiva del sistema por un analista de negocios.</span></p><p><span style="font-weight: 400;">Para escribir mejores Historias de Usuario para Scrum, debemos regresar a ver los principios de la agilidad.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2e563c5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2e563c5" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-453b592" data-id="453b592" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-a7b259d elementor-widget elementor-widget-heading" data-id="a7b259d" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Manifiesto por el Desarrollo Ágil de Software y su conexión con las Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-43a8d83 elementor-widget elementor-widget-text-editor" data-id="43a8d83" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>El Manifiesto ágil nos dice: “Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar: &#8230;”.</p>								</div>
				</div>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-f18059a elementor-section-content-space-evenly elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f18059a" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-dc3023a" data-id="dc3023a" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5c3347f elementor-widget elementor-widget-text-editor" data-id="5c3347f" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p style="text-align: left;"><strong>Individuos e interacciones</strong> sobre procesos y herramientas</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-fd90d7a" data-id="fd90d7a" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5d5de28 elementor-widget elementor-widget-text-editor" data-id="5d5de28" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Las Historias de Usuario crean un entendimiento compartido de una conversación, para los miembros del equipo, los stakeholders y los usuarios finales.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-a828b43 elementor-section-content-space-evenly elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a828b43" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-5e56da0" data-id="5e56da0" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-76c6b90 elementor-widget elementor-widget-text-editor" data-id="76c6b90" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p style="text-align: left;"><strong>Software funcionando</strong> sobre documentación extensiva</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-a12f0d1" data-id="a12f0d1" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1d639b9 elementor-widget elementor-widget-text-editor" data-id="1d639b9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Un solo documento de acuerdos reemplaza a mil redacción de actas.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-498d9d2 elementor-section-content-space-evenly elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="498d9d2" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-9ca4d8a" data-id="9ca4d8a" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-95b2fa8 elementor-widget elementor-widget-text-editor" data-id="95b2fa8" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p style="text-align: left;"><strong>Colaboración con el cliente</strong> sobre negociación contractual</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-70af7af" data-id="70af7af" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cd2b2c5 elementor-widget elementor-widget-text-editor" data-id="cd2b2c5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><br />Queremos deleitar al cliente&#8230; y una negociación contractual no es la mejor manera. La colaboración continua y fluida es clave en los productos y esto representa un Historia de Usuario.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-234248e elementor-section-content-space-evenly elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="234248e" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-6cfb2c1" data-id="6cfb2c1" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4100ec1 elementor-widget elementor-widget-text-editor" data-id="4100ec1" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p style="text-align: left;"><strong>Respuesta ante el cambio</strong> sobre seguir un plan</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-b7b89d3" data-id="b7b89d3" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7128eb0 elementor-widget elementor-widget-text-editor" data-id="7128eb0" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es necesario tener un plan pero debe ser flexible, general y permitir reaccionar al cambio.  El feedback del cliente es el único que nos marca el éxito de un Producto, más allá de cumplir funcionalidades, tiempos y presupuestos.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<div class="elementor-element elementor-element-6133f46 elementor-widget elementor-widget-heading" data-id="6133f46" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Cómo se relacionan las Historias de Usuario con los principios de la Agilidad?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-c9fd427 elementor-widget elementor-widget-text-editor" data-id="c9fd427" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ol><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">La más alta prioridad es satisfacer al cliente mediante la temprana y continua entrega de software de valor, <span style="text-decoration: underline;">mismo valor que se expresa en la historia de usuario</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Los cambios son bienvenidos incluso si es tarde en desarrollo, <span style="text-decoration: underline;">y si dividimos bien las historias de usuario reducimos los impactos en desarrollo</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Entregar software frecuentemente, desde un par de semanas hasta máximo un par de meses, <span style="text-decoration: underline;">para esto hay que trabajar en historias pequeñas completas que realmente agreguen por si solas</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Las personas de negocio y los desarrolladores deben trabajar juntos diariamente a lo largo del proyecto, <span style="text-decoration: underline;">y las Historias de Usuario son por naturaleza escritas en colaboración continua y fluida</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Construir proyectos alrededor de gente motivada, darles el ambiente y soporte que necesitan, y confiar que van a realizar el trabajo, <span style="text-decoration: underline;">y aquí la colaboración y apropiación de la solución motiva a las personas alrededor de las conversaciones de la Historia de Usuario</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">La forma más eficiente y efectiva de transmitir información hacia y dentro del equipo es una conversación cara a cara, <span style="text-decoration: underline;">parte de la dinámica de las Historias de Usuario</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">El software funcionando es la principal medida de progreso, <span style="text-decoration: underline;">mismo progreso que se madura, prioriza, simplifica y entrega a través de mejores Historias de Usuario</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Un proceso ágil promueve un desarrollo sustentable, <span style="text-decoration: underline;">las Historias de usuario nos permite mantener un ritmo predecible de entrega de valor constante</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Poner continua atención a la excelencia técnica y un buen diseño mejora la agilidad.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Simplicidad, el arte de maximizar la cantidad de trabajo no hecho es esencial, <span style="text-decoration: underline;">hay que enfocarse en los resultados (valor expresado en la Historia de Usuario) y no en las salidas</span>.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">La mejor arquitectura, requerimientos y diseño emergen de equipos auto-organizados.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">En intervalos regulares, el equipo reflexiona en como ser mas efectivo, luego hace ajustes en su comportamiento acorde a las conclusiones.</p></li></ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-936ae37 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="936ae37" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2c74993" data-id="2c74993" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e932f0a elementor-widget elementor-widget-heading" data-id="e932f0a" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Escribiendo mejores Historias de Usuario para Scrum</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-724a4bb elementor-widget elementor-widget-text-editor" data-id="724a4bb" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Como se dijo anteriormente las Historias de usuario no son solo para Scrum pero es cierto que dado las dinámicas y artefactos de Scrum se pone énfasis en ciertos detalles que hacen que las mismas sean más adecuadas para implementar en los ciclos iterativos e incrementales de la propuesta Scrum.</p><p>En las siguientes secciones vamos a revisar en detalle las Historias de Usuario sus componentes, características y mejores pŕacticas.</p><p>Contenido:</p>								</div>
				</div>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-98446e8 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="98446e8" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5fe4d8e" data-id="5fe4d8e" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e851936 elementor-align-justify elementor-widget elementor-widget-button" data-id="e851936" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-intro">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Introducción a las Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
				<div class="elementor-element elementor-element-aff0515 elementor-align-justify elementor-widget elementor-widget-button" data-id="aff0515" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-criac">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Criterios de Aceptación​ de las Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
				<div class="elementor-element elementor-element-01ff167 elementor-widget elementor-widget-button" data-id="01ff167" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-escri">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Escribir mejores Historias de Usuario con INVEST</span>
					</span>
					</a>
				</div>
								</div>
				</div>
				<div class="elementor-element elementor-element-2104bf1 elementor-align-justify elementor-widget elementor-widget-button" data-id="2104bf1" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-nonhu">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Non-Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-81fe3e8" data-id="81fe3e8" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-f21f8dd elementor-align-justify elementor-widget elementor-widget-button" data-id="f21f8dd" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-esthu">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Estimando Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
				<div class="elementor-element elementor-element-425a26f elementor-align-justify elementor-widget elementor-widget-button" data-id="425a26f" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-divhu">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Dividiendo las Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
				<div class="elementor-element elementor-element-bf0194d elementor-align-justify elementor-widget elementor-widget-button" data-id="bf0194d" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="#mhss-retco">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-link"></i>			</span>
									<span class="elementor-button-text">Retos Comunes al Gestionar las Historias de Usuario</span>
					</span>
					</a>
				</div>
								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c7f5398 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c7f5398" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1447ce0" data-id="1447ce0" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-85baed8 elementor-widget elementor-widget-heading" data-id="85baed8" data-element_type="widget" data-e-type="widget" id="mhss-intro" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Introducción a las Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-c50fdaa elementor-widget elementor-widget-heading" data-id="c50fdaa" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Qué son las Historias de Usuario y por qué estas son usadas?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8c0c6bd elementor-widget elementor-widget-text-editor" data-id="8c0c6bd" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Es una pequeña unidad para trabajar, que dice desde la perspectiva del usuario cual es la funcionalidad deseada.</p><p dir="ltr">Mueve el foco de escribir requerimientos a conversar sobre los requerimientos, es decir el principal objetivo es habilitar la conversación y fomentar la colaboración.</p><p dir="ltr">Las Historias de Usuario ponen a los usuarios finales en el centro de la conversación.</p><p dir="ltr">Historias de Usuario además, nos provee un contexto no técnico para el equipo de desarrollo.  El equipo después de participar en una Historia de Usuario sabe porque ellos están construyendo lo que están construyendo y que valor la solución provee.</p><p dir="ltr">Una Historia de Usuario escrita efectivamente incrementa la colaboración, la creatividad y el producto en general.</p><p dir="ltr">Al escribir la Historia de Usuario debes preguntarte tres cosas básicas:</p><ol><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">¿Quién es tu cliente?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">¿Qué lo satisface? y,</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">¿Qué necesita?</p></li></ol><p dir="ltr">La Historia de Usuario ayuda a entregar el más alto valor enfocándose en pequeñas y urgentes necesidades del cliente. </p><p dir="ltr">Cuando la necesidad del cliente es descompuesta en pequeñas funcionalidades es posible entregar valor en días o incluso en horas.</p><p dir="ltr">Partiendo de un enfoque de entregar el más alto valor en cada Historia de Usuario, conseguimos que: </p><ul><li dir="ltr">el equipo esté empoderado</li><li dir="ltr">el equipo esté conectado</li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">el equipo pueda colaborar con el usuario final.</p></li></ul><p dir="ltr">Al enfocarse y brindar el mayor valor con cada historia de usuario, los equipos están empoderados, están conectados y pueden colaborar con el usuario final.  Y cuando se conectan directamente con el usuario final, los desarrolladores tienen una oportunidad de entender realmente desde la perspectiva del usuario, sus desafíos, sus puntos de dolor, y reciben esa retroalimentación temprana con cada entrega, para que puedan asegurarse que están construyendo un producto adecuado.</p><p dir="ltr">Formato de una Historia de Usuario:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-0325718 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="0325718" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-65f2ff1" data-id="65f2ff1" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-96a48e3 elementor-widget elementor-widget-image" data-id="96a48e3" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2021/05/Ejemplo-de-historia-de-usuario-en-espanol-Formato-de-historia-de-usuario.png" title="" alt="" loading="lazy" />															</div>
				</div>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-04bdf65 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="04bdf65" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-138db83" data-id="138db83" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4b07baf elementor-widget elementor-widget-text-editor" data-id="4b07baf" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr" style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; font-family: Roboto, sans-serif; font-style: normal; font-weight: 400; line-height: 1.38;"><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-weight: 400; color: #000000; background-color: transparent; font-variant-numeric: normal; font-variant-east-asian: normal; white-space: pre-wrap;">[who] as as &lt;type of user&gt;</span></p><p dir="ltr" style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; font-family: Roboto, sans-serif; font-style: normal; font-weight: 400; line-height: 1.38;"><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-weight: 400; color: #000000; background-color: transparent; font-variant-numeric: normal; font-variant-east-asian: normal; white-space: pre-wrap;">[what] I would like &lt;goal&gt;</span></p><p dir="ltr" style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; font-family: Roboto, sans-serif; font-style: normal; font-weight: 400; line-height: 1.38;"><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-weight: 400; color: #000000; background-color: transparent; font-variant-numeric: normal; font-variant-east-asian: normal; white-space: pre-wrap;">[why&gt; So that &lt;reason&gt; or &lt;why&gt;</span></p><p style="font-family: Roboto, sans-serif; font-style: normal; font-weight: 400;"><span style="font-weight: normal;"> </span></p><p dir="ltr" style="margin-top: 0pt; margin-bottom: 0pt; font-family: Roboto, sans-serif; font-style: normal; font-weight: 400; line-height: 1.38;"> </p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-439056a" data-id="439056a" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-17e6979 elementor-widget elementor-widget-image" data-id="17e6979" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2021/05/Formato-de-una-historia-de-usuario.png" title="" alt="" loading="lazy" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<div class="elementor-element elementor-element-e3def4c elementor-widget elementor-widget-text-editor" data-id="e3def4c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Siempre se expresa una Historia de Usuario desde la perspectiva del cliente “As a/an…”.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-8dfaee6 elementor-widget elementor-widget-heading" data-id="8dfaee6" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Quién escribe las Historia de Usuario y cuando estas son escritas?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-eac4114 elementor-widget elementor-widget-text-editor" data-id="eac4114" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Todos los integrantes del equipo pueden escribir Historias de Usuario sin embargo la mayoría del tiempo lo hace el Product Owner o el Analista de Negocio (Business Analyst), esto es más porque ellos están más tiempo cerca del cliente/usuario pero en realidad todo el mundo puede hacerlo.</p><p dir="ltr">Una de las mejores prácticas es que el equipo debe ser experto acerca del cliente y del producto por tanto estén en la capacidad de escribir Historias de Usuario.  No deben necesariamente hacerlo pero deberían tener esa capacidad y además la capacidad de conversar qué es lo siguiente que viene del Product Backlog.</p><p dir="ltr">Por ejemplo el Product Owner y analista de Negocio escriben la primera versión del Historia de Usuario, pero luego el equipo ayuda a madurarla, mejorándola y añadiendo detalles y cosas.</p><p dir="ltr"> </p>								</div>
				</div>
				<div class="elementor-element elementor-element-3e5bca4 elementor-widget elementor-widget-text-editor" data-id="3e5bca4" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr"><strong>¿Cuando son escritas?</strong> Pues en todo momento que llegan o surgen de conversaciones, a lo mejor en primera instancia es un borrador que se debe ir iterando con el equipo y priorizando pero lo importante es tomar nota de aquello que el usuario nos cuenta.</p><p dir="ltr">Hay que tomar en cuenta que una idea por si no es una Historia de Usuario, por lo que hay que tomar un tiempo para conversar y transformarla a una Historia de Usuario.  <u>Por esta razón es muy común que se manejen documentos alternativos al Product Backlog (donde ya están las Historias de Usuario) para ir desarrollando esas ideas</u>.</p><p dir="ltr">Uno de esos momentos es los <em><u>Demo</u></em> de productos en donde hay feedback de lo que se hizo y se expresan además cosas que se esperan tener del producto.  Estas conversaciones pueden llevarnos a nuevas Historias de Usuario y/o ajustes a Historias de Usuario existentes.</p><p dir="ltr">Otro instrumento que se suele tener en los equipos son los <strong>Talleres de Historias de Usuario</strong> (Story Workshops), que son sesiones cada cierto periodo de tiempo (2 o 3 meses) para escribir Historias de Usuario para los siguientes tres meses (al menos su versión inicial).</p><p dir="ltr">Hay otras sesiones importantes como el <strong>Backlog Refinement</strong> o (<strong>Grooming</strong>) en donde se crean nuevas Historias de Usuario, se descartan otras, y se estiman o se ajusta la estimación de Historias de Usuario faltantes.  Incluso en estas sesiones se Divide (Splitting)” las Historias de Usuario.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-1c1036a elementor-widget elementor-widget-heading" data-id="1c1036a" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">3 C's para escribir historias de usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-6cca1c2 elementor-widget elementor-widget-text-editor" data-id="6cca1c2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Las 3 C’s son las recomendaciones al escribir Historias de Usuario: Tarjeta (Card), Conversación (Conversation) y Confirmación (Confirmation).</p><p dir="ltr">La Historia debe ser lo suficientemente pequeña para que entre en una tarjeta y que invite a una conversación.</p><p dir="ltr">Hay que recordar que en un enfoque ágil de desarrollo no tienes que tenerlo todo perfectamente definido por adelantado antes de llevarlo al equipo. El equipo y el negocio realmente pueden trabajar juntos para descubrir la necesidad mientras trabajan juntos, y esto puede acordarse a través de la conversación y colaboración alrededor de las Historias de Usuario.</p><p dir="ltr">La tarjeta conduce a una conversación entre el Product Owner y los equipos, y esto debe suceder en persona tanto como se posible, y finalmente debe incluir una especie de confirmación.</p><p dir="ltr">Ese momento es cuando el equipo sabe realmente qué se debe hacer y en este momento es cuando entran los criterios de aceptación.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-210fa42 elementor-widget elementor-widget-heading" data-id="210fa42" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Diferencias entre Requerimientos y Historias de Usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-1fc15e1 elementor-widget elementor-widget-text-editor" data-id="1fc15e1" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Muchas veces las solemos intercambiar pero no son lo mismo de ninguna manera.</p><p dir="ltr">Existen 4 diferencias básicas:</p><ol><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Perspectiva:</p><ol><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">El requerimiento tiene perspectiva desde el sistema o desde la solución (el sistema debe&#8230;).</p></li><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">La Historia de Usuario lo mira desde el problema descrito desde el punto de vista del cliente (como supervisor… quiero… para..).</p></li></ol></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Cuando estas son usadas:</p><ol><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Los Requerimientos tradicionales se utilizan en proyectos no ágiles, por ejemplo en metodologías en espiral o cascada.</p></li><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Las Historias de Usuario se usan en proyectos ágiles mayormente.</p></li></ol></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Cómo son obtenidas/definidas:</p><ol><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Para los requerimientos tradicionales los Analistas de Negocio usan técnicas como entrevistas, encuestas u otras que extraigan respuestas en reacción a las acciones o preguntas, para luego documentarlas en los instrumentos que usen en la organización (ejemplo un BRD &#8211; Business Requirement document).  Suele ser una actividad única, el Analista de Negocio obtiene las respuestas las documenta y cambia a la siguiente cosa</p></li><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">En Agil la Historia de Usuario es una discusión y un esfuerzo colaborativo.  La manera en que son escritas ayudan a empujar una conversación, terminando en cosas como porque la necesitan realmente?, cuales son los detalles?, que sabemos y que no sabemos? cuales son los matices que la componen?.  Esto es un trabajo de salida constante de información y de conversaciones constantes que aseguran que se consideren todas esas pequeñas piezas desde la perspectiva del usuario.</p></li></ol></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Quien es el dueño:</p><ol><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Los requerimientos tradicionales normalmente pertenecen a quien lo escribió, dado que lo hizo en su lenguaje y en su entendimiento y más allá de eso lo hizo desde la perspectiva de sistema o solución, lo que los hace confusos si no entiendes el contexto desde donde fue escrito.  Generalmente el analista de Negocio es el dueño de esos requerimientos con su estructura y normalmente esto implica que se “deba” explicar el documento a otros lectores y de como hacer cambios en el mismo, sintaxis, etc.</p></li><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">En enfoque Ágil, el dueño es el Grupo ya que se escribió en grupo con muchas conversaciones y desde la perspectiva del usuario con lenguaje natural y propio del problema.  Todos sienten su piel en el juego y que han ayudado a desarrollar esa Historia de Usuario.</p></li></ol></li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-6950950 elementor-widget elementor-widget-heading" data-id="6950950" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Diferencias entre Casos de Uso y Historias de Usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-b802427 elementor-widget elementor-widget-text-editor" data-id="b802427" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Ambas describen una misma meta pero tiene diferentes propósitos: los Historias de Usuario son acerca de necesidades, mientras que los Casos de Uso ayudan a explicar el comportamiento que el sistema debe tener para ser exitoso.</p><p dir="ltr">Las Historias de Usuario son realmente pequeñas y concisas, su alcance es muy delgado y específico, en cambio las Casos de Uso describen las interacciones de todo el sistema y a veces con otros sistemas.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-5dd770a elementor-widget elementor-widget-heading" data-id="5dd770a" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Roles de Usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-638d50e elementor-widget elementor-widget-text-editor" data-id="638d50e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Cuando escribes Historias de Usuario tu vas a querer conocer a los usuarios de esas Historias de Usuario, saber qué rol cumplen, como operan, etc.</p><p dir="ltr">Al tener esta información sueles tener muchos roles y no tiene sentido y se vuelve inmanejable describir a cada uno en una historia de usuario.</p><p dir="ltr">Se recomienda crear grupos de usuarios/roles sobre los cuales discutir las características a implementar.</p><p dir="ltr">Según Scrum Alliance los Roles de Usuario son usuarios que comparten:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">necesidades comunes</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">intereses</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">expectativas</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">comportamientos</p></li></ul><p dir="ltr">Son entonces una manera de pensar en ciertos usuarios y conversar sobre ellos porque comparten cosas. </p><p dir="ltr">Aquí la recomendación siempre será hacer una lluvia de ideas de todos los roles y refinar  esta lista y agruparla según los criterios de Roles de Usuarios de Scrum Alliance por ejemplo.  Esto podría ser parte de la Incepción Ágil.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-62143bc elementor-widget elementor-widget-heading" data-id="62143bc" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Personas</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-046eb1b elementor-widget elementor-widget-text-editor" data-id="046eb1b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Una vez que tengas los roles puedes crear los “<strong>Personas</strong>”,  de forma que pueda visualizar mejor esa clase de persona:</p><p dir="ltr">Persona, es una representación ficticia del usuario, es como la figura Persona que se usa por ejemplo en procesos <span style="text-decoration: underline;">Customer Journey Map</span>.</p><h3 dir="ltr"> </h3>								</div>
				</div>
				<div class="elementor-element elementor-element-760a261 elementor-widget elementor-widget-heading" data-id="760a261" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Más de las Historias de Usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-25c230c elementor-widget elementor-widget-text-editor" data-id="25c230c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Ojo que las Historias de Usuario son como un punto de partida en donde puedes tener dentro cosas como documentos de respaldo, wireframes, maquetas de UI, diagramas de flujo, y una serie de estas representaciones visuales de requisitos.</p><ul><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Es importante esto porque a menudo significan un entendimiento común para todos los stakeholders así que no subestimes esta parte.</p></li></ul></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">No asumas que una Historia de Usuario tiene una funcionalidad implícita, esto por ejemplo en el caso de una Historia de Usuario que habla de crear registros, a menudo <span style="text-decoration: underline;">se suele omitir la actualización de esa información</span>, pero esto puede causar problemas ya que la actualización puede implicar por ejemplo connotaciones de recálculo de otros valores, o reprogramación de otras actividades. </p><ul><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Es importante ser explícito en las funcionalidades para describir que una Historia de Usuario incluye el CRUD completo o que hay otras Historias de Usuario que especifican tal feature.</p></li></ul></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Otro detalle importante es el “Porqué?”, ya que nos da el contexto del valor que representa la Historia de Usuario para el cliente y el negocio, y, nos ayuda a priorizarla en el Backlog.  </p><ul><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">A menudo las Historias de Usuario quedan mal documentadas y no proveen los suficientes detalles, no para estimarlas, pero si para entenderlas tanto que el “que busca”, así como el “porqué es importante” ya que es probable que después de un tiempo al regresar a retomar una conversación no podamos identificar realmente lo que quisimos expresar.</p></li></ul></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Hay veces que una Historia de Usuario involucra una funcionalidad compartida entre dos o más roles. Por ejemplo <span style="text-decoration: underline;">dar de alta a un usuario</span>, esta funcionalidad involucra crear un usuario en el sistema, que lo puede hacer el mismo usuario que desea darse de alta o un administrador de usuarios; sin embargo aunque las pantallas e input son similares no tienen los mismos detalles y accesos por lo que está bien y es correcto tener dos o más Historias de Usuario que representen cada caso con sus particularidades aunque cierta funcionalidad podría ser implementada por la otra Historia de Usuario.</p></li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-b0a567e elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="b0a567e" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-57205dc" data-id="57205dc" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-d0e3695 elementor-widget elementor-widget-heading" data-id="d0e3695" data-element_type="widget" data-e-type="widget" id="mhss-criac" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Criterios de Aceptación</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-daf438d elementor-widget elementor-widget-heading" data-id="daf438d" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Entendiendo los Criterio de Aceptación</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-79314ed elementor-widget elementor-widget-text-editor" data-id="79314ed" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">La Historia de Usuario no provee suficientes detalles por sí sola para que alguien pueda tomarla y crear algún tipo de solución.</p><p dir="ltr">Es por eso que tenemos los criterios de aceptación, que son una serie de condiciones que un producto debe cumplir para ser aceptado por un usuario, un cliente o otro sistema.</p><p dir="ltr">Provee estándares y requerimientos que el resultado final debe cumplir para ser exitoso.</p><p dir="ltr">Hay cuatro beneficios principales de los criterios de aceptación:</p><ol><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Crea un entendimiento común: provee detalles necesarios en una solución como criterio compartido por los stakeholders.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Define el alcance: le dice a los creadores de la solución dónde empezar y dónde terminar, y que es lo importante.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Valida que una Historia de Usuario está completada: provee un checklist o condiciones que al ser alcanzadas nos indican que finalizó de una forma certera.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Muestra que probar y si pasa la prueba la solución entregada.</p></li></ol><p dir="ltr">Normalmente obtenemos esos detalles faltantes para figurar una solución a través de preguntas poderosas como por ejemplo:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Cuál es la información más relevante a mostrar?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Cómo se va a obtener esa información?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">A qué se refiere tal o cual término mencionado?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Quién puede obtener esa información?, </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">etc.</p></li></ul><p dir="ltr">Su definición pasa por un proceso evolutivo en donde las preguntas fluyen conforme varias conversaciones suceden.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-5942f0e elementor-widget elementor-widget-heading" data-id="5942f0e" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Escribiendo un Criterio de Aceptación</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-b0d35af elementor-widget elementor-widget-text-editor" data-id="b0d35af" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hay varias formas de escribir los criterios de aceptación entre los cuales mencionamos las siguientes:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Checklist Format, listando esos detalles que hacer la solución exitosa.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Given-(And)-When-Then-(And) que es otro enfoque especialmente usado en pruebas BDD (Behavior Driven Development).</p></li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-7e10d0f elementor-widget elementor-widget-heading" data-id="7e10d0f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Quién escribe los Criterios de Aceptación y cuando son escritos?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-ea205c6 elementor-widget elementor-widget-text-editor" data-id="ea205c6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">El Product Owner generalmente escribe la Historia de Usuario inicial y luego suele recaer la responsabilidad de escribir los criterios de aceptación en el Analista de Negocios, en donde él aplica todo su expertise de análisis de negocios y elicitación (traspaso de información de forma fluida de un ser humano a otro por medio del lenguaje) para el fin. </p><p dir="ltr">Aquí el Analista de Negocios suele usar muchas cosas como entrevistas, sesiones de brainstorming, talleres, etc. de forma que pueda documentar con precisión los criterios de aceptación.</p><p dir="ltr">Normalmente al crear una Historia de Usuario no se escriben los criterios de aceptación, y la misma se va a iterando en conversaciones en el tiempo.  La idea es que la Historia de Usuario esté en un punto sólido de forma que el Analista de Negocios pueda en ese momento trabajar en los criterios de aceptación.</p><blockquote>Ninguna Historia de Usuario debería entrar en el Sprint Backlog si la misma no tiene criterios de aceptación.</blockquote>								</div>
				</div>
				<div class="elementor-element elementor-element-84380d5 elementor-widget elementor-widget-heading" data-id="84380d5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Mejores prácticas para los Criterios de Aceptación</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-643b129 elementor-widget elementor-widget-text-editor" data-id="643b129" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Escríbelos en texto simple, evita tecnicismos y modismos de forma que sea legible por todos los integrantes del equipo.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Explica la intención no la solución que se necesita.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Mantenlos medibles evita puntos grises, es decir, debe haber criterios blanco o negro porque el gris es sujeto a quien lo usa y como lo usa.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Listas extensas de criterios de aceptación son aceptables, luego preocúpate de dividir la Historia de Usuario; esto, al mismo tiempo significa para los stakeholders interiorizar cuan complejo puede ser la solución y entender que se requiere dividir dicha Historia de Usuario para poder cumplirla en un Sprint.</p></li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-90f2bec elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="90f2bec" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-efa1ee6" data-id="efa1ee6" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-340eba5 elementor-widget elementor-widget-heading" data-id="340eba5" data-element_type="widget" data-e-type="widget" id="mhss-escri" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Escribir mejores Historias de Usuario con INVEST</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-1dbb58f elementor-widget elementor-widget-heading" data-id="1dbb58f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Qué es INVEST?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-53832a6 elementor-widget elementor-widget-text-editor" data-id="53832a6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Una buena práctica al escribir Historias de Usuario es chequearlas con el criterio INVEST.</p><p dir="ltr">INVEST significa:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Independiente</strong>: la idea es ver si hay dependencias con otras Historias de Usuario ya que puede resultar en problemas de planificación.  Incluso afecta a la prioridad ya que una dependencia puede tener baja prioridad pero bloquea una de alta prioridad.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Negociable</strong>: la idea es que no es un contrato sino una invitación a una conversación en donde se acuerdan los detalles, los tiempos y los criterios de aceptación entre todo el equipo.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Valiosa</strong>: el valor de esa historia debe estar realmente claro para todo el equipo, no solo desde la perspectiva del cliente sino en términos de negocio, y como todas estas Historias de Usuario trazan el camino a los metas del negocio.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Estimable</strong>: debe tener los detalles suficientes para que el equipo las pueda estimar, no todos los detalles pero si lo relevante a la Historia.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Pequeña (Small)</strong>: si la Historia no puede ser completada en un Sprint es muy grande y debería ser dividida, de igual forma si no es necesario hacer una Historia más pequeña pues evite hacerlo ya que al dividirla puede quedar la sensación de trabajo incompleto en un todo.</p><ul><li dir="ltr" aria-level="2"><p dir="ltr" role="presentation">Por ejemplo separar un CRUD no tiene mucho sentido a menos que haya algo específico que cause una acción en particular.</p></li></ul></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation"><strong>Comprobable (Testable)</strong>: de modo que podamos decir que la implementación está finalizada correctamente.</p></li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-0edb9b0 elementor-widget elementor-widget-heading" data-id="0edb9b0" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Más del criterio INVEST</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-3902db3 elementor-widget elementor-widget-text-editor" data-id="3902db3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Una de las cosas más importante de una Historia de Usuario es mantenerla negociable, es decir que se permita cambios en la misma.  Recuerda que no es un BRD, esto especialmente si hablamos de un ambiente ágil, no tiene sentido hacer algo que nadie quiere por cumplir un BDR.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Otra cosa muy importante es siempre cuestionar si aporta valor, ya que muchas historias parecen aportar valor pero no es relevante frente a las prioridades funcionales y los objetivos de negocio por lo que no debería ser implementada.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Mantenerlas pequeñas por otro lado es crucial porque pueden liberarse al uso rápidamente y retornar la inversión al negocio.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Recuerda que <span style="text-decoration: underline;">INVEST es una guía y no son reglas estrictas</span> así que hay que tomarlas en cuenta para construir nuestro Backlog pero no tratar de forzar todas las ideas.</p></li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-93d3764 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="93d3764" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f61cbd3" data-id="f61cbd3" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-08b1e3e elementor-widget elementor-widget-heading" data-id="08b1e3e" data-element_type="widget" data-e-type="widget" id="mhss-nonhu" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Non-Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-35af3d1 elementor-widget elementor-widget-heading" data-id="35af3d1" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Entendiendo los Spikes</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8f0c288 elementor-widget elementor-widget-text-editor" data-id="8f0c288" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hay aspectos en la solución que no se relacionan al negocio en sí, como por ejemplo la arquitectura, que de acuerdo a los principios de Scrum debe evolucionar según sigue el desarrollo o la implementación del producto.  Esto significa que no toda la infraestructura como toda la arquitectura debe estar prediseñada antes de arrancar el Producto.</p><p dir="ltr"><strong>Spike es una investigación de un conocimiento o incluso la producción de un nuevo conocimiento que da una respuesta para la solución de algo en el Backlog</strong>.</p><p dir="ltr">Los Spikes son usados para responder a estos retos técnicos e incluso a problemas de diseño.</p><p dir="ltr">El resultado de un Spike puede derivar en una nueva Historia de Usuario o una actualización a una existente.</p><p dir="ltr">Una de las razones por las que los Spikes pueden ser usados es la investigación, cuando una Historia de Usuario es muy grande para ser estimada, así se analiza el comportamiento esperado, se divide la Historia en otras más pequeñas y se reduce significativamente el riesgo y la incertidumbre en una story.</p><p dir="ltr">Recuerda que no por estar en un enfoque ágil vas a dejar de necesitar analizar ciertos aspectos técnicos, de diseño o incertidumbres.</p><p dir="ltr">Debes ser documentados como cualquier Historia de Usuario (pero no son Historias de Usuario realmente), deben tener criterios de aceptación para saber qué preguntas tiene que responder o qué preocupaciones tiene que aclarar, y así mismo ir al Backlog ser priorizado y eventualmente incluido en un Sprint Backlog.</p><p dir="ltr">La diferencia principal es que en lugar de generar valor para el negocio debe responder preguntas al equipo, preguntas como:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Es esto factible?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Podemos hacer eso con nuestra actual tecnología?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Es esta la mejor opción o hay otras que deberíamos considerar para entregar la misma característica/valor?</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Cuáles son los riesgos de tomar cierto camino?</p></li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-b296ca5 elementor-widget elementor-widget-heading" data-id="b296ca5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Entendiendo las Historias de Usuario Técnicas y de Infraestructura.</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-1c2036b elementor-widget elementor-widget-text-editor" data-id="1c2036b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hay necesidades en la implementación de un producto que no tiene que ver con sus usuarios o el negocio, sino que son necesidades para poder crear el mismo Producto, esto incluye por ejemplo:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Implementación de herramientas de testing.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Implementación de automatizaciones de despliegues.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Implementación de servidores.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Implementación de esquemas de seguridad externos, etc.</p></li></ul><p dir="ltr">Estas Historias de Usuario de Infraestructura o Técnicas tiene el mismo tratamiento que las de negocio e igualmente con criterios de aceptación, adicionadas al Backlog, priorizadas y eventualmente incluidas en un Sprint.</p><p dir="ltr">La parte “como … “ (as a …) en la Historia de Usuario es confusa en esta clase de Historias pero a menudo el usuario que requiere dicha feature es el programador, el arquitecto, o incluso el equipo de desarrollo.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7b3f377 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7b3f377" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a286bd1" data-id="a286bd1" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e25ba03 elementor-widget elementor-widget-heading" data-id="e25ba03" data-element_type="widget" data-e-type="widget" id="mhss-esthu" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Estimando Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-631a2f4 elementor-widget elementor-widget-heading" data-id="631a2f4" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Conceptos Generales de Estimación</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-6e7cbdf elementor-widget elementor-widget-text-editor" data-id="6e7cbdf" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">En la metodologías tradicionales como cascada las estimaciones son absolutas y van en métricas como horas o días. </p><p dir="ltr">En proyectos ágiles son muy importantes las estimaciones pero tienen una diferencia… en los proyectos ágiles las estimaciones no son absolutas sino relativas.  Estas estimaciones son producto de comparar tareas unas con otras y así poderlas agrupar según el grupo la complejidad en la que cada una se ubique.</p><p dir="ltr">Una métrica bastante conocida es la <strong>T-shirt technique</strong> (tallas de camiseta) con medidas como <span style="text-decoration: underline;">pequeña, mediana o grande</span>.  Esto nos permite ubicar en un determinado conjunto a tareas que son parecidas unas con otras.</p><p dir="ltr">Otra técnica es la <strong>serie de Fibonacci</strong> que permite una una estimación relativa con un número que determina la complejidad.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-03411f3 elementor-widget elementor-widget-heading" data-id="03411f3" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Entendiendo la técnica de estimación Fibonacci</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-7b84113 elementor-widget elementor-widget-text-editor" data-id="7b84113" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Aquí los valores de la serie de Fibonacci representan el tamaño de la Historia de Usuario</p><p dir="ltr">Cada Historia de Usuario es comparada con otras y se les asigna un número de la serie de Fibonacci que representa el tamaño más adecuadamente.  Este número asignado es conocido como “<strong>Puntos de Historia</strong>” (<span style="text-decoration: underline;">Story Points</span>).</p><p dir="ltr">Cuando nos encontramos con Historias de Usuario con asignación mayor a 8 como tamaño deberíamos dividirla antes de pasarla a un Sprint Backlog.</p><p dir="ltr">En una iteración (Sprint) se implementa un número determinado de “Puntos de Historia”  por parte del equipo y el promedio de este número en varias iteraciones viene a ser la <strong>velocidad del equipo</strong>.  </p><p dir="ltr">Obviamente al principio, es decir en las primeras iteraciones, la velocidad del equipo no la vamos a tener porque va a depender del desempeño del mismo en el tiempo.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-310c20d elementor-widget elementor-widget-heading" data-id="310c20d" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Las Historias de Usuario Épicas</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-b7cb676 elementor-widget elementor-widget-text-editor" data-id="b7cb676" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Suele haber casos en que una Historia de Usuario es tan grande o compleja que no se puede estimar tan solo como una definición de “Grande” o con un número Fibonacci como 13, 21, 55 o superior, en este caso es mejor no estimarla y nombrarla como épica (Epic)</p><p dir="ltr">Epica marca a un Historia de Usuario, como una conversación pendiente acerca de un análisis más profundo de su complejidad, fases y partes para llegar a una definición derivada de 3, 4 o muchas más Historias de Usuario que permitan su implementación.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-e22c9d1 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e22c9d1" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-329214c" data-id="329214c" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-19d7724 elementor-widget elementor-widget-heading" data-id="19d7724" data-element_type="widget" data-e-type="widget" id="mhss-divhu" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Dividiendo las Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-a5934f5 elementor-widget elementor-widget-heading" data-id="a5934f5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Introducción al concepto de División (Splitting)</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-9780878 elementor-widget elementor-widget-text-editor" data-id="9780878" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">A menudo los equipos deben trabajar con Historias de Usuario grandes y muy grandes que no se pueden terminar en una iteración, aquí es cuando es necesario dividir esa gran Historia de Usuario en varias más pequeñas de forma que sea posible implementarlas en una iteración y que por supuesto traten de estar lo más cercano a los principio INVEST.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-af51e0e elementor-widget elementor-widget-image" data-id="af51e0e" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2021/05/Cuando-se-escriben-las-historias-de-usuario.jpg" title="" alt="" loading="lazy" />															</div>
				</div>
				<div class="elementor-element elementor-element-c1298f3 elementor-widget elementor-widget-heading" data-id="c1298f3" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">¿Por qué dividir la Historias de Usuario?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-e3b641b elementor-widget elementor-widget-text-editor" data-id="e3b641b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Una de las ventajas principales de dividir una Historia de Usuario es que las Historias de Usuario resultantes explican de mejor manera el todo y a menudo se las puede priorizar y evaluar en cuanto a qué valor aporta, así es probable que muchas de estas pierdan prioridad en el todo o no se las deba implementar realmente.</p><p dir="ltr">Al final esta actividad deriva en optimizar y enfocar el esfuerzo en el 20% del trabajo que tiene una alta aportación de valor, y, asignar una priorización más baja a esas stories que no aportan tanto.</p><p dir="ltr">La otra gran razón, como ya lo mencionamos, es que una Historia grande no se puede implementar en una iteración (1 o 2 semanas), y dividirla permite implementar parte de ella con un valor determinado en una iteración.  </p><p dir="ltr"><b>La idea es: algunas historias de Usuario implementadas es mejor que ninguna Historia de Usuario implementada.</b></p><p dir="ltr">La última razón más importante es que una estimación de una Historia de Usuario grande a menudo es errónea ya que no se entiende la complejidad o tamaño de la misma.  Dividirla ayuda al equipo a clarificar algunos detalles que son importantes para tener una estimación real del esfuerzo, y así no dar falsas promesas.</p><p dir="ltr">Tener divididas las Historias de Usuario también ayuda a que estas sean testeables, y se evidencia con el cómo testear las mismas por ejemplo en ambientes e2e, ambientes mock y/o prueba unitarias solamente.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-72124e9 elementor-widget elementor-widget-heading" data-id="72124e9" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Dividiendo con simplicidad</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-4813831 elementor-widget elementor-widget-text-editor" data-id="4813831" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hazlo simple al principio y luego empieza con variaciones.</p><p dir="ltr">La idea es que uses primero opciones simples respecto a una solución, y luego las complejas.  </p><p dir="ltr">Las opciones más complejas puedes escribirlas en las siguientes iteraciones pero al principio mantenlo simple.</p><p dir="ltr">Por ejemplo: </p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Historia de Usuario A: como comprador quiero poder hacer transferencias bancarias entonces puedo cancelar mi pedido.</p></li></ul><p dir="ltr">Dividiéndola:</p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Historia de Usuario A-1: como comprador quiero poder hacer transferencias bancarias manuales entonces puedo cancelar mi pedido. </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Historia de Usuario A-2: como comprador quiero poder hacer transferencias bancarias a través de un link de pagos de mi banco entonces puedo cancelar mi pedido. </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Historia de Usuario A-3: como comprador quiero poder hacer transferencias bancarias conectando automáticamente a mi banco entonces puedo cancelar mi pedido. </p></li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-d660aad elementor-widget elementor-widget-heading" data-id="d660aad" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Dividiendo con un Workflow</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-07d6b61 elementor-widget elementor-widget-text-editor" data-id="07d6b61" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Las Historias de Usuario grandes a menudo están compuesta de pasos para ser implementadas.  </p><p dir="ltr">Por ejemplo una Historia de Usuario como “Comprar en la Tienda en línea” involucra cosas como: </p><ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Buscar productos, </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Comparar productos, </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Seleccionar forma de pago, </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Crear una cuenta, </p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">Especificar dirección de entrega, etc.</p></li></ul><p>Cada uno de estos pasos son en sí una Historia de Usuario por lo que una forma de muy evidente de dividir Historias de Usuario es discutir en el proceso que envuelve su cumplimiento.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-3c9d583 elementor-widget elementor-widget-heading" data-id="3c9d583" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Dividiendo con CRUD (Crear, Leer, Actualizar y Borrar)</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-00f7f46 elementor-widget elementor-widget-text-editor" data-id="00f7f46" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Se puede dividir una Historia de Usuario pensando en las operaciones normales del registro de información: crear, leer, actualizar y borrar.   </p><p dir="ltr">Tiene sentido si alguna de estas operaciones tiene una complejidad particular y/o son usadas por diferentes roles.  </p><p dir="ltr">En la mayoría de casos un CRUD es una sola Historia de Usuario aunque operaciones relacionadas como búsquedas, reportes o clasificaciones pueden resultar en otras Historias de Usuario.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-30ef9e8 elementor-widget elementor-widget-heading" data-id="30ef9e8" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Dividiendo por el Método de Ingreso</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-57ed339 elementor-widget elementor-widget-text-editor" data-id="57ed339" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hay Historias de Usuario que involucran una entrada de información y esta entrada se puede hacer por varios canales.  </p><p dir="ltr">Un ejemplo es la función de “añadir fotos en Word”, se puede hacer subiendo las fotos del sistema de archivos, se puede hacer referenciando a un URL, se puede hacer usando un servicio como Pexels, etc.  Cada una de estos métodos de ingreso representa una Historia de Usuario en particular y forman parte de una Historia de Usuario más grande que es “añadir fotos en Word”.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-ed77402 elementor-widget elementor-widget-heading" data-id="ed77402" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Dividiendo con Spikes</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-cd4b591 elementor-widget elementor-widget-text-editor" data-id="cd4b591" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Considera una Historia de Usuario en donde necesitas hacer una investigación previa de las alternativas de implementar una solución, es decir un Spike.  </p><p dir="ltr">Por ejemplo: quieres “pagar con la integración a un Gateway de pagos”, pero no sabes cómo se integra y que necesitas.</p><p dir="ltr">En este caso parte de la Historia de Usuario, es esta investigación y debe ir como una Historia de Usuario, la idea es que esa Historia esté planteada con criterios de aceptación de manera que clarifiquen esas dudas que necesitan respuesta antes de la implementación de la funcionalidad.</p><p dir="ltr">Ojo <strong>debe hacerse un &lt;timebox&gt; en la investigación</strong> porque de lo contrario es muy fácil entusiasmarse en más y más investigación de alternativas y dilatar los objetivos de la Historia de Usuario.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-9b2c444 elementor-widget elementor-widget-heading" data-id="9b2c444" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Más acerca de Dividir las Historias de Usuario</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-0a0f38c elementor-widget elementor-widget-text-editor" data-id="0a0f38c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">No trates de agrandar una iteración para lograr implementar una Historia de Usuario.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">No dividas las Historias de Usuario en fases: diseño, desarrollo y testing.</p></li><li dir="ltr" aria-level="1"><p dir="ltr" role="presentation">No partas con la mentalidad fija que una Historia de Usuario no se puede dividir, a menudo tener la mente abierta y pensar y hacer preguntas, te llevan a técnicas con las cuales llegas a dividir esa Historia de Usuario.</p></li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-f2e7cd9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f2e7cd9" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-773856b" data-id="773856b" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-850e914 elementor-widget elementor-widget-heading" data-id="850e914" data-element_type="widget" data-e-type="widget" id="mhss-retco" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Retos Comunes al gestionar las Historias de Usuario</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-5471967 elementor-widget elementor-widget-heading" data-id="5471967" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Proporcionando el Quién y el Porqué?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8c9c222 elementor-widget elementor-widget-text-editor" data-id="8c9c222" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">No olvides que especificar con precisión quién necesita la funcionalidad en una Historia de Usuario es útil para el enfoque de la solución, el equipo así sabrá quien es esa persona y cuál es su comportamiento normal.  </p><p dir="ltr">Poner algo como “Como Usuario&#8230;” es decir genérico no ayuda al entendimiento de la necesidad.</p><p dir="ltr">El “Porqué” en la Historia de Usuario es extremadamente fundamental, y a veces olvidamos describirlo o detallarlo con precisión.  </p><p dir="ltr">El “Porqué” da el contexto de la necesidad y suele llevar a preguntas adicionales que clarifican la solución.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-ede3235 elementor-widget elementor-widget-heading" data-id="ede3235" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Manejando defectos y bugs</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-f9aa580 elementor-widget elementor-widget-text-editor" data-id="f9aa580" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Es normal que aparezcan de cuando en cuando defectos o mal funcionamientos en el Software, pues se considera que estos al final son parte de la solución o de la creación de la solución.</p><p dir="ltr">Muchos equipos tratan de resolver mágicamente estos problemas encontrando tiempo al parecer de la nada, pero hay que recordar que el equipo tiene ya una carga de trabajo asociada a las Historias de Usuario que se hayan comprometido entregar en la iteración que transcurren en ese momento.</p><p dir="ltr">Este enfoque es frecuentemente erróneo ya que no terminan de completar las Historias objetivo del Sprint, afectando a su velocidad y expectativas del cliente.  La mejor forma es documentar estas incidencias como cualquier otra Historia de Usuario de forma que nos lleve a una conversación, a su estimación y a una definición de criterios de aceptación que expliquen cuando esta incidencia ha sido superada, y, que de igual forma se priorice en el Backlog.</p><p dir="ltr">Hay que recordar que hay varios tipos de incidencias, unas que a lo mejor son inhabilitantes o otras que son de forma que no tienen porque ser resueltas de manera urgente.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-28e4c09 elementor-widget elementor-widget-heading" data-id="28e4c09" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Lidiando con las dependencias</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-7db94c5 elementor-widget elementor-widget-text-editor" data-id="7db94c5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">La mejor forma de lidiar con las dependencias es no tenerlas, y esto en un primer momento es usar prácticas o guías como INVEST que ya la conversamos anteriormente.  Aquí el principio de INDEPENDENCIA es un control sobre la definición de una Historia de Usuario que marca que la misma está lista para incluirla en una iteración (Sprint Backlog).</p><p dir="ltr">El típico ejemplo es una story que añade funcionalidad o complementa a otra story; aquí evidentemente la story a ser modificada debe existir antes y haber sido implementada en una anterior iteración, pues si las planificamos ambas en una misma iteración vamos a tener un inevitable tiempo muerto para el equipo y por consiguiente un desperdicio de su velocidad.</p><p><b>Combinando Historias de Usuario</b></p><p dir="ltr">Al encontrarnos con Historias de Usuario que son dependientes podemos intentar re-enfocar las mismas de forma que esa o esas dependencias se eliminen.  La práctica aquí es combinar las Historias y crear una sola gran Historia de Usuario y a partir de ella pensar en otras formas de dividirla, como por ejemplo encontrar hacerla en fases y no por segmentos de funcionalidad.</p><p><b>Intercambiando algunos de esos requisitos</b></p><p dir="ltr">La idea es que si tenemos dependencias entre Historias de Usuario, podemos identificar esos detalles que componen la dependencia y moverlos de una story a otra de forma que lleguen a un punto que sean independientes.</p><p><b>No hacer nada</b></p><p dir="ltr">Hay veces que estas dependencias no se pueden disolver, incluso aplicando los anteriores métodos.  </p><p dir="ltr">En estos casos monitorear estas Historias de Usuario es clave para asegurar que su implementación no esté causando problemas al negocio mientras se implementan las Historias dependientes.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-6baa22b elementor-widget elementor-widget-heading" data-id="6baa22b" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Cambiando las Historias de Usuario en medio de un Sprint</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-08d385f elementor-widget elementor-widget-text-editor" data-id="08d385f" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr">Hay que diferenciar el Product Backlog con el Sprint Backlog, ambas contienen Historias de Usuario pero el Sprint Backlog tiene solo aquellas Historia de Usuario priorizadas, estimadas, verificadas (con INVEST por ejemplo) y acordadas con los Stakeholders, antes de iniciar una iteración.</p><p dir="ltr">Una iteración (Sprint), normalmente de 2 semanas, tiene como base de trabajo estas Historias de Usuario que han pasado por un proceso y que son el compromiso del equipo.  No tiene que y no debe incluirse otras stories una vez comenzada la iteración pues esto genera varios problemas al equipo como por ejemplo: afecta a su velocidad ya que existe más trabajo, afecta a la solución pues no se ha conversado los detalles previamente y afecta la planificación comprometida a los stakeholders.</p><p dir="ltr">Si hay una necesidad urgente de una Historia de Usuario esta debe pasar por su proceso de maduración y ser priorizada en el Product Backlog para luego ser incluida, tras el descubrimiento de detalles e implicaciones, en el Sprint Backlog.</p><blockquote>El Sprint es un compromiso de trabajo del equipo con los stakeholders.</blockquote>								</div>
				</div>
				<div class="elementor-element elementor-element-6591df8 elementor-widget elementor-widget-heading" data-id="6591df8" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Retos usando estimación Ágil</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-5338523 elementor-widget elementor-widget-text-editor" data-id="5338523" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><strong>Mentalidad relativa a horas</strong></p><p>Hay que apoyar a los miembros del equipo que piensa aún en términos de horas (pues sabemos que están acostumbrados a esa referencia), y hacerlos estimar comparando esfuerzo de una story a otra.</p><p>Recuerden que la estimación se hace al tener los detalles suficientes sobre la Historia de Usuario, es decir deben haberse ejecutado esas conversaciones que la definen antes, así como tener esos criterios de aceptación.</p><p><strong>Comparación de estimaciones entre proyectos o equipos</strong></p><p>La estimación en agilidad es relativa a la comparación de stories, al contexto del proyecto y a la base que se haya tomado como métrica.</p><p>Por tanto, una estimación en “Puntos de historia” de una misma Historia de Usuario es diferente entre equipos pues su base o perspectiva es acordada en sus conversaciones.  21 Puntos de Historia como velocidad del equipo A puede significar más entrega de valor (funcionalidades) del Producto que 50 Puntos de Historia de velocidad del equipo B en el mismo Producto.</p><p>Incluso la velocidad de un mismo equipo puede ser diferente entre implementación de productos ya que son otros los puntos de vista y conversaciones que se acordaron en ese Producto en el equipo.</p><p>No es sano y no agrega valor comparar velocidades en ningún caso pero las estimaciones son relativas en proyectos ágiles.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5f21697 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5f21697" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-96a05b0" data-id="96a05b0" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-b0cfed3 elementor-widget elementor-widget-heading" data-id="b0cfed3" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-large">Pensamientos Finales</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-8a58a22 elementor-widget elementor-widget-text-editor" data-id="8a58a22" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Las Historias de Usuario son una herramienta muy utilizada en el mundo de la Agilidad, que viene en sus inicios desde el marco de trabajo &#8220;<a href="https://www.agilealliance.org/glossary/xp" target="_blank" rel="noopener">Extreme Programming (XP)</a>&#8220;, y que ha sido adoptada por varios otros marcos como Scrum.</p><p>La idea principal es recordar que la misma provoca varias conversaciones acerca de la necesidad del cliente y se robustece en el tiempo con otra información como diagramás, flujos, documentos, etc. que maduran la necesidad y sirven como datos para una solución efectiva.</p><p>Al final esta Historia de Usuario derivará en otras más pequeñas, hasta que tengamos una Historia de Usuario de un tamaño que puede implementarse en un Sprint.</p><p>La habilidad de escribir mejores Historías de Usuario para Scrum u otro framework es un conjunto de pasos y técnicas que se interiorizan en el tiempo por el equipo y que al final les permite crear funcionalidades de valor y con entendimiento común.</p><p>Esperamos que esta guía robusta de Historías de Usuario les ayude a mejorar esta habilidad y poder entregar cada vez mejor valor a su cliente.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/mejores-historias-de-usuario-para-scrum/">Mejores Historias de Usuario para Scrum</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/mejores-historias-de-usuario-para-scrum/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Código Limpio: Manual del Arte de Desarrollo Ágil de Software</title>
		<link>https://softwareevolutivo.com.ec/codigo-limpio/</link>
					<comments>https://softwareevolutivo.com.ec/codigo-limpio/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Tue, 14 Jul 2020 21:46:57 +0000</pubDate>
				<category><![CDATA[Agilidad]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[Tendencias]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Coding]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=805</guid>

					<description><![CDATA[<p>El arte del Software se desarrolla a través de la práctica y la experiencia... pero muchas actividades son útiles para acelerarla en los equipos como el Pair Programming y CI, de lo cual esperamos hablar en otros posts.</p>
<p>Hoy compartimos la primera parte de una serie de Cheat Sheets acerca del libro, MUST READ, para todos los desarrolladores de Software llamado Clean Code del autor Robert C. Martin.</p>
<p>The post <a href="https://softwareevolutivo.com.ec/codigo-limpio/">Código Limpio: Manual del Arte de Desarrollo Ágil de Software</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="805" class="elementor elementor-805">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-cb4c7db elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="cb4c7db" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2114888" data-id="2114888" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-369ba39 elementor-widget elementor-widget-text-editor" data-id="369ba39" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p id="docs-internal-guid-e86174bc-7fff-f56c-9bd8-138c23d47f54" dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 13.999999999999998pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Código Limpio &#8211; ¿Le mostrarías el código de programación a tu mamá? <br /></span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 13.999999999999998pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Le puede resultar difícil de entender por la semántica del lenguaje de programación y los conceptos de negocio, pero más allá de estos aspectos, escribir Software es un arte creativo en donde narras la solución de un problema. ¿Estás de acuerdo?</span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><b><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Que tal esto:</span></b></p>								</div>
				</div>
				<div class="elementor-element elementor-element-7686c9f elementor-widget elementor-widget-text-editor" data-id="7686c9f" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">var a&nbsp; = (m, t) =&gt; {</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">return m*(i/100) }</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-561ac51 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="561ac51" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55c48a5" data-id="55c48a5" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8dc62f9 elementor-widget elementor-widget-text-editor" data-id="8dc62f9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><b><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A esto:</span></b></p>								</div>
				</div>
				<div class="elementor-element elementor-element-ac2b3bf elementor-widget elementor-widget-text-editor" data-id="ac2b3bf" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">var impuesto = calcular_impuesto(monto, tasa);</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">function calcular_impuesto(monto, tasa) {</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">  var tasa_en_decimal = tasa / 100;</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">  var valor_impuesto = monto * tasa_en_decimal;</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">  return valor_impuesto;</span></p>
<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: 'Courier New'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">}</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-67f68ee elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="67f68ee" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eaadb7c" data-id="eaadb7c" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-d6d9d6d elementor-widget elementor-widget-text-editor" data-id="d6d9d6d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Esta narración permite contar la solución de forma clara a tus colegas (o a ti mismo en un futuro) pudiendo centrar sus esfuerzos en aportar más a ese producto de Software y le compromete dejar el lugar tan limpio como lo encontraron… </span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">¿</span>Todos cuidan un Ferrari verdad?</span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Hay mil cuestiones más atrás de crear un código limpio, pero la primera en mi concepción es tu profesionalismo y después algunas más importantes que contaremos en otros post:</span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><ul style="margin-top: 0; margin-bottom: 0;"><li dir="ltr" style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mantenibilidad</span></li><li dir="ltr" style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">escalamiento</span></li><li dir="ltr" style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">evolución</span></li><li dir="ltr" style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">deuda técnica</span></li><li dir="ltr" style="list-style-type: disc; font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">costo</span></li></ul><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">El arte del Software se desarrolla a través de la práctica y la experiencia&#8230; pero muchas actividades son útiles para acelerarla en los equipos como el Pair Programming, TDD y CI, de lo cual esperamos hablar en otros posts.</span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></p><p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Hoy compartimos la primera parte de una serie de </span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Cheat Sheets</span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> acerca del libro, MUST READ, para todos los desarrolladores de Software llamado </span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Clean Code</span><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>: A Handbook of Agile Software Craftsmanship</b> del autor <i><u>Robert C. Martin</u></i>.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-a6e7484 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a6e7484" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4faffb6" data-id="4faffb6" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c862f21 elementor-button-info elementor-align-center elementor-widget elementor-widget-button" data-id="c862f21" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
									<div class="elementor-button-wrapper">
					<a class="elementor-button elementor-button-link elementor-size-sm" href="https://drive.google.com/file/d/1NvJD_Oq19Pn2Jh1TLl4X3X8g3nH6Sjzk/view?usp=sharing" target="_blank">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon">
				<i aria-hidden="true" class="fas fa-download"></i>			</span>
									<span class="elementor-button-text">Descargar PDF - Código Limpio Cheat Sheet</span>
					</span>
					</a>
				</div>
								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/codigo-limpio/">Código Limpio: Manual del Arte de Desarrollo Ágil de Software</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/codigo-limpio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Liderazgo al Servicio</title>
		<link>https://softwareevolutivo.com.ec/liderazgo-al-servicio/</link>
					<comments>https://softwareevolutivo.com.ec/liderazgo-al-servicio/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Sat, 13 Jul 2019 16:35:51 +0000</pubDate>
				<category><![CDATA[Agilidad]]></category>
		<category><![CDATA[Liderazgo]]></category>
		<category><![CDATA[agilidad]]></category>
		<category><![CDATA[liderazgo]]></category>
		<category><![CDATA[management30]]></category>
		<category><![CDATA[organizaciones horizontales]]></category>
		<category><![CDATA[transformación digital]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=356</guid>

					<description><![CDATA[<p>Liderazgo al Servicio o Servant Leadership que significa y como encaja en nuevas organizaciones.</p>
<p>The post <a href="https://softwareevolutivo.com.ec/liderazgo-al-servicio/">Liderazgo al Servicio</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="356" class="elementor elementor-356">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-30605fca elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="30605fca" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-593be70c" data-id="593be70c" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-695cd74f elementor-widget elementor-widget-text-editor" data-id="695cd74f" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p></p>
<figure class="wp-block-image"><img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2019/07/servantleadership1-1024x427.jpg" alt="Liderazgo al Servicio" class="wp-image-361"><p></p>
<figcaption>Image by mohamed Hassan from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3610255">Pixabay</a></figcaption>
</figure>
<p></p>
<p></p>
<h2 class="wp-block-heading" style="text-align:center">¿Quiero ser Jefe, Gerente, Supervisor, Director…. en mi Trabajo?</h2>
<p></p>
<p></p>
<p>Mientras que esta pregunta puede tener múltiples respuestas en cada uno de nosotros hoy queremos poner a su consideración qué significa ser un Líder Servicial.</p>
<p></p>
<p></p>
<h3 class="wp-block-heading">Las buenas ideas</h3>
<p></p>
<p></p>
<p>La globalización y la tecnología, como sabemos, se ha acelerado en todas las industrias haciendo posible ofrecer nuestros servicios/productos a otros países o continentes sin casi limitaciones; sin embargo, al mismo tiempo ha creado contextos de competencia entre empresas similares y entre “aparentes” diferentes empresas.&nbsp; </p>
<p></p>
<p></p>
<p><a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://www.forbes.com/sites/samshead/2019/05/08/facebook-plans-to-build-new-whatsapp-payments-feature-in-london" target="_blank">Hoy Facebook planea permitir pagos en su plataforma compitiendo con la Industria Financiera.</a></p>
<p></p>
<p></p>
<p>Las buenas ideas no están más solo en los líderes, y la co-creación de conocimiento desde cada una de las arterias de una empresa es vital para el crecimiento y la supervivencia de la misma.&nbsp;</p>
<p></p>
<p></p>
<p>En ese contexto cada una de las personas que apoyan a una empresa son parte de su estrategia de operación, que por su puesto debe tener un <strong>“para qué?”</strong> significativo para todos.</p>
<p></p>
<p></p>
<blockquote style="text-align:center" class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>“Piensa ‘NOSOTROS’ en lugar de ‘YO’”</em></p>
<p><cite>Valor SEWorker</cite></p></blockquote>
<p></p>
<p></p>
<h3 class="wp-block-heading">Alineamiento</h3>
<p></p>
<p></p>
<p>Uno de nuestros valores como equipo en la empresa es “Piensa en NOSOTROS en lugar de YO”, sin embargo sin un “para qué?” el valor pierde su significado.</p>
<p></p>
<p></p>
<div class="wp-block-image">
<figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://lh6.googleusercontent.com/YRUgV_3OrjhRDQQqE7hJy2heKaloLz2V04b5JhJI5PHtaRRl9vv4dMichLIsK5It5_Q9iYmJPmBghNkqH4yszVf-WpneSpgMGlgBXGQneskF1UY6bO68sCP2t2ssdT9XgIdnVYIv" alt="" width="397" height="395"></figure>
</div>
<p></p>
<p></p>
<p>Un <strong>“para qué?” (Why según el Golden Circle)</strong> puede ser un objetivo que nos lleva a otro objetivo más grande y a su vez a metas… esas metas son las que llamamos <strong>Misión y Visión de nuestra Empresa</strong>.</p>
<p></p>
<p></p>
<p>Compartir esas metas y su significado como equipo en la empresa hace que cada miembro de él tenga su “para qué?” convencido del valor que le aporta.</p>
<p></p>
<p></p>
<h3 class="wp-block-heading">Dar más y esperar menos</h3>
<p></p>
<p></p>
<p>En su libro “Los Líderes comen últimos”, Simon Sinek menciona la importancia de ciertas hormonas que se generan en el equipo de una empresa.&nbsp; Dos muy importantes son las relacionadas a la gratificación por ayudar y el reconocimiento por hacer. La cultura de colaboración para <strong>todo el equipo</strong> nos ayuda a obtener estas sensaciones y el Líder debe promover este comportamiento desde el ejemplo.</p>
<p></p>
<p></p>
<p>El agradecimiento y reconocimiento a <strong>cada miembro del equipo</strong> por su esfuerzo, más la sensación de avance (“para qué?”), es la forma sugerida de mantener al colaborador motivado y enfocado en las metas.</p>
<p></p>
<p></p>
<blockquote style="text-align:center" class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“El compromiso individual en un esfuerzo de grupo hace que un equipo funcione, que una compañía funcione, que una sociedad funcione, que una civilización funcione”.&nbsp;</p>
<p><cite>Vince Lombardi</cite></p></blockquote>
<p></p>
<p></p>
<h3 class="wp-block-heading">Confianza</h3>
<p></p>
<p></p>
<p>Porque un soldado confía su vida a otro soldado?&#8230; porque el primero arriesgaría su vida si fuese al contrario. La confianza es una creencia que se cultiva en ambos sentidos y que un Líder Servicial debe depositar en su equipo para recibirla de él.</p>
<p></p>
<p></p>
<p>La creación de confianza comienza por un <strong>interés genuino en cada persona del equipo</strong>, teniendo <strong>empatía</strong> respecto a sus problemas laborales y personales, perfeccionando y fomentando la <strong>comunicación efectiva y escucha activa</strong> del equipo con el Líder y entre pares.</p>
<p></p>
<p></p>
<p>Un Líder Servicial se podría preguntar:</p>
<p></p>
<p></p>
<ul class="wp-block-list">
<li>“Cuán mejor puedo ser para mi equipo/colega?”</li>
<li>“De qué forma puedo aportar más a mi equipo/colega”</li>
</ul>
<p></p>
<p></p>
<h3 class="wp-block-heading">Quiero ser Jefe, Gerente, Supervisor, Director… porque&#8230;</h3>
<p></p>
<p></p>
<p>Dentro del contexto de un Líder Servicial y estructuras de las empresas que están en un proceso de Agilidad Empresarial, estos roles se definen como “<strong>líderes que se involucran, empoderan, delegan, entrenan e inspiran a los equipos</strong>”.</p>
<p></p>
<p></p>
<p>El Líder Servicial entonces está para su equipo, para su desarrollo de habilidades y mejorar sus debilidades, de forma que no haga la siguiente actividad correctamente, sino para que elija la siguiente actividad correcta.</p>
<p></p>
<p><br>
<!-- /wp:shortcode --></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/liderazgo-al-servicio/">Liderazgo al Servicio</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/liderazgo-al-servicio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[:es]PMP y Ágil, hacia el éxito del Software[:]</title>
		<link>https://softwareevolutivo.com.ec/pmp-y-agil-hacia-el-exito-del-software/</link>
					<comments>https://softwareevolutivo.com.ec/pmp-y-agil-hacia-el-exito-del-software/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Wed, 13 Sep 2017 20:17:47 +0000</pubDate>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[agilidad]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[PMO]]></category>
		<category><![CDATA[PMP]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[SAFe]]></category>
		<category><![CDATA[scrum]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=282</guid>

					<description><![CDATA[<p>By Easa Shamih (Flickr: Team Work) [CC BY 2.0]   “Los proyectos ágiles también fracasan”   En el Informe del Caos del 2015, publicado por el grupo Standish Group, se evidencia una tasa importante de fracaso en los proyectos de Software que han sido apoyados en prácticas Ágiles para su desarrollo, donde se ha utilizado</p>
<p>The post <a href="https://softwareevolutivo.com.ec/pmp-y-agil-hacia-el-exito-del-software/">[:es]PMP y Ágil, hacia el éxito del Software[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="282" class="elementor elementor-282">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-64d04e08 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="64d04e08" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e17848e" data-id="e17848e" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-3c49102c elementor-widget elementor-widget-text-editor" data-id="3c49102c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>[:es]</p>
<p style="text-align: right;"><img decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2017/09/team_work-jpg.jpeg" alt="Team_Work.jpg"> By Easa Shamih (Flickr: Team Work) [<a href="http://creativecommons.org/licenses/by/2.0" target="_blank" rel="noopener noreferrer">CC BY 2.0</a>]</p>
<p></p>
<h1 style="text-align: center;">“Los proyectos ágiles también fracasan”</h1>
<p></p>
<p>En el <a href="https://www.infoq.com/articles/standish-chaos-2015" target="_blank" rel="noopener noreferrer">Informe del Caos del 2015</a>, publicado por el grupo <a href="https://www.standishgroup.com/" target="_blank" rel="noopener noreferrer">Standish Group</a>, se evidencia una tasa importante de fracaso en los proyectos de Software que han sido apoyados en prácticas Ágiles para su desarrollo, donde se ha utilizado métodos o marcos de trabajo como Scrum, Kanban o SAFe. <img decoding="async" class="aligncenter" src="https://softwareevolutivo.com.ec/wp-content/uploads/2017/09/points-scored.png" alt="Points scored"></p>
<p style="text-align: right;">Extraido de https://versionone.com/pdf/VersionOne-10th-Annual-State-of-Agile-Report.pdf</p>
<p>Si bien existe al momento una notable diferencia con los porcentajes fallidos con metodologías tradicionales como Cascada, es importante por otro lado analizar las razones que llevan al 9% de los proyectos Ágiles al fracaso.</p>
<p>Según VersionOne, una de las organizaciones más grandes en el mundo Ágil, en su reporte anual del <a href="https://versionone.com/pdf/VersionOne-10th-Annual-State-of-Agile-Report.pdf" target="_blank" rel="noopener noreferrer">Estado de los Proyectos Ágiles 2015</a>, el <strong>46% de responsabilidad del fracaso de un proyecto Ágil se debe a la falta de alineamiento de la cultura y filosofía organizacional con los </strong><a href="http://agilemanifesto.org/iso/es/manifesto.html" target="_blank" rel="noopener noreferrer"><strong>principios ágiles</strong></a>.&nbsp; Pero existen también otros factores que han influido como <strong>la falta de experiencia en la implementación del agilismo en las organizaciones, con una incidencia del 41%</strong>.</p>
<p>Es de vital importancia para las empresas y todos los actores de los Proyectos de Software trabajar estos riesgos, para construir un camino que asegure el éxito de su trabajo.</p>
<h2>Sinergia PMP y Ágil</h2>
<p>La colaboración entre el área de Planificación de Proyectos y los practicantes Ágiles es clave en la desarrollo del Software.&nbsp; Es importante tener claro que la visión de trabajo es diferente para cada rol, pero el objetivo es el mismo y este es terminar con éxito el proyecto.</p>
<ul>
<li>El PMP mira Proyectos que tienen alcance, tiempo y costos muy bien definidos.</li>
<li>El Agilista mira Productos que evolucionan, cuyo alcance se valida constantemente y con costos y tiempos priorizados de acuerdo al valor de negocio.</li>
</ul>
<p>Si la visión es diferente, la métricas de interés también lo son, así como todo lo relacionado a la trazabilidad del Proyecto o Producto.&nbsp; En consecuencia es recomendable empezar con tres actividades cualquier proyecto Ágil:</p>
<ul>
<li>Capacitación introductoria al paradigma Ágil.</li>
<li>Acuerdo formal de trabajo.</li>
<li>Incepción ágil.</li>
</ul>
<p>Por supuesto estas actividades deben ser realizadas con los Stakeholders, Usuarios, Equipos IT, Gerentes de Proyecto y/o PMPs.&nbsp; Existe extensa literatura y programas de formación que nos pueden conducir al <a href="https://en.wikipedia.org/wiki/Agile_software_development" target="_blank" rel="noopener noreferrer">conocimiento del paradigma Ágil</a>; queremos en esta publicación enfocar el análisis hacia los retos que supone trabajar colaborativamente entre los dos paradigmas Ágil y PMP, para encaminar un Proyecto exitoso.</p>
<p></p>
<h1 style="text-align: center;">“Las prácticas Ágiles apoyan a las metodologías de Gestión de Proyectos, no las reemplazan”</h1>
<p></p>
<h2>Acuerdos formales de trabajo</h2>
<p>Toda organización cuenta con procesos establecidos en mayor o en menor medida para su funcionamiento, la carencia de estos procesos cuestan a las empresas dinero en términos operativos y de mercado, por consiguiente es obligatorio incluirlos dentro de una planificación de proyectos.&nbsp; Así como agilistas, la clave está en entender y aprovechar su valor de negocio con respecto al Producto o Proyecto;&nbsp; esto es uno de los trabajos en conjunto que requiere mayor dedicación de tiempo y de detalle pues es clave a la hora de medir resultados dentro de ambos paradigmas de consecución.</p>
<p>Entre otros se propone establecer acuerdos con respecto a temas como:</p>
<ul>
<li>Gestión de Comunicación: como vamos a formalizar nuestras conversaciones teniendo en cuenta los riesgos de no hacerlo y los riesgos de sobrecargar los protocolos.</li>
<li>Gestión de Cambios: negociar la planificación PMP <strong>en el contexto de la realidad del cambio</strong> pero al mismo tiempo basarla en un proceso <span style="text-decoration: underline;">suficiente y verificado con el negocio</span>, de modo que permita establecer un productos claros.</li>
<li>Productos Evolutivos: divide y vencerás&#8230;, que significa visualizar Productos dentro del TODO para planificar Proyectos concretos y medibles; de esta forma no desgastamos los esfuerzos de ambas partes en cronogramas de 6 meses o más y generamos factibilidad de medición de resultados.</li>
<li>Riesgos: los riesgos no se delegan entre sí, sino se mitigan con esfuerzos en conjunto.</li>
<li>Gestión de Documentación: bajo la premisa de que todo documento es importante en tanto y en cuanto alguien lo lea.</li>
<li>Mejora Continua: aquí es importante enfatizar la existencia de reuniones de evaluación inclusiva con los PMPs para tener su retroalimentación respecto a la ejecución del Proyecto y mejorar cíclicamente.</li>
</ul>
<p>Es requerido entonces <strong>mantener un estado de aprendizaje</strong> en cada ámbito, de forma que podamos cuestionar criterios y asimilar otros con el mismo objetivo final.</p>
<p></p>
<h1 style="text-align: center;">“Construir Software no es como Ensamblar Autos”</h1>
<p></p>
<p>Estimar realmente el tiempo que toma la implementación de una funcionalidad parte de un Proyecto es tan importante como la definición misma del requerimiento.&nbsp; Es responsabilidad de todos los practicantes ágiles (PO, Developers, etc.) tanto como de los líderes de la gestión del Proyecto (PMP, Gerentes, etc.) asegurar la no subestimación de los mismos, considerando que el proceso de desarrollo no es una actividad procedimental sino se trata de creatividad; <strong>se puede escribir la solución a un mismo problema de 100 formas diferentes con 100 impactos diferentes y con varios niveles diferentes de valor para el negocio</strong>.</p>
<p>Como desarrolladores nuestra función es hablar en términos de <strong>valor</strong> con el equipo del Proyecto, remarcando el aporte que produce al negocio diferentes actividades que ejecutamos en la construcción de Software como TDD, Pair Programming, Refactoring, etc.&nbsp; Siendo este tema un <a href="http://manifesto.softwarecraftsmanship.org/" target="_blank" rel="noopener noreferrer">tema tan extenso</a>, es necesario llevarlo al pragmatismo en la planificación de proyectos y <span style="text-decoration: underline;">ser ágiles tanto en la gestión como en la ejecución</span> de los mismos.</p>
<h2>CMMI, ISO u otra?</h2>
<p>Finalmente abordamos estos modelos de gestión que están presentes en muchas empresas, y que representan los lineamientos del “QUÉ” se debe hacer para alcanzar la gestión eficaz de la misma, sin embargo el “CÓMO” es el aporte posible del Agilismo; de modo que en el contexto de la sinergia PMP y Ágil, este “CÓMO” se puede mejorar para aportar a la razón del negocio y maximizar el valor.</p>
<p>Podemos referirnos a investigaciones sobre cómo se han complementado estos modelos en <a href="https://34slpa7u66f159hfp1fhl9aur1-wpengine.netdna-ssl.com/wp-content/uploads/2014/05/Scrum-and-CMMI-Level-5-A-Magic-Potion-for-Code-Warriors.pdf" target="_blank" rel="noopener noreferrer">Scrum and CMMI Level 5: The Magic Potion for Code Warriors</a>.</p>
<p></p>
<h2>Ideas Finales</h2>
<ul>
<li>Capacitar a todos los actores de Proyecto dentro del paradigma Ágil nos permitirá tener una sola visión del Proyecto y la propuesta del valor en el Negocio.</li>
<li>Pre-establecer un marco de trabajo con el área PMO e incluir una retrospectiva de los acuerdos, nos permite sentar la base para mitigar riesgos y generar valor para ambos paradigmas en la consecución del proyecto.</li>
<li>Las interacciones de sinergia presentadas en este artículo enfocan una adopción del paradigma Ágil en pequeños pasos y la constante mejora del proceso, sin embargo se puede partir de resoluciones <a href="https://www.mountaingoatsoftware.com/articles/patterns-of-agile-adoption" target="_blank" rel="noopener noreferrer">más corporativas a nivel de estrategia de empresa (top down)</a>.</li>
<li>Considerando que el desarrollo de Software es un proceso creativo se debe estimar el tiempo suficiente para la implementación de cada funcionalidad.</li>
<li>Se puede complementar metodologías de gestión como CMMI con las prácticas ágiles.</li>
</ul>
<p>Te animamos a que nos cuentes también: Como ha sido tu experiencia trabajando en conjunto PMP y Ágil?</p>
<p>&nbsp;[:]</p>
<p></p>
<p><br>
<!-- /wp:shortcode --></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/pmp-y-agil-hacia-el-exito-del-software/">[:es]PMP y Ágil, hacia el éxito del Software[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/pmp-y-agil-hacia-el-exito-del-software/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[:es]Implementación de Liferay 6.2 sobre JBoss 6.4.0 &#8211; Como[:]</title>
		<link>https://softwareevolutivo.com.ec/liferay-jboss-docker/</link>
					<comments>https://softwareevolutivo.com.ec/liferay-jboss-docker/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Mon, 12 Sep 2016 17:00:42 +0000</pubDate>
				<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[liferay]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=170</guid>

					<description><![CDATA[<p>Liferay es un producto para gestionar portales empresariales de información, construido sobre Java y con licenciamiento en Software libre LGPL define a esta tecnología como uno de los actores más importante y con mayores implementaciones en el mercado. Animados por nuestros valores empresariales que considera al conocimiento como fin social, dejamos una experiencia acerca</p>
<p>The post <a href="https://softwareevolutivo.com.ec/liferay-jboss-docker/">[:es]Implementación de Liferay 6.2 sobre JBoss 6.4.0 &#8211; Como[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="6004" class="elementor elementor-6004">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-13e504aa elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="13e504aa" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4eb4ad3a" data-id="4eb4ad3a" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7ea8c7b5 elementor-widget elementor-widget-text-editor" data-id="7ea8c7b5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>[:es]<strong>&nbsp;</strong></p>
<figure id="attachment_171" aria-describedby="caption-attachment-171" style="width: 1058px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-171" src="https://softwareevolutivo.com.ec/wp-content/uploads/2016/09/docker_jboss_liferay-png.png" alt="Esquema Instalación Liferay sobre JBoss usando Docker" width="1058" height="417"><figcaption id="caption-attachment-171" class="wp-caption-text">Esquema Instalación Liferay sobre JBoss usando Docker.&nbsp; Copyleft www.softwareevolutivo.com.ec</figcaption></figure>
<p><a href="https://dev.liferay.com/" target="_blank" rel="noopener noreferrer">Liferay</a> es un producto para gestionar portales <a href="https://en.wikipedia.org/wiki/Enterprise_portal" target="_blank" rel="noopener noreferrer">empresariales de información</a>, construido sobre Java y con licenciamiento en Software libre <a href="http://www.gnu.org/licenses/lgpl-2.1.html" target="_blank" rel="noopener noreferrer">LGPL</a> define a esta tecnología como uno de los actores más importante y con mayores implementaciones en el mercado.</p>
<p>Animados por nuestros <a href="https://softwareevolutivo.com.ec/mission-vision-and-values/" target="_blank" rel="noopener noreferrer">valores empresariales</a> que considera al conocimiento como fin social, dejamos una experiencia acerca de este portal y su despliegue en infraestructuras de software modernas.</p>
<p>Antes de continuar con la implementación nos referimos a los productos que usamos como software base:</p>
<ul>
<li><a href="http://www.docker.com/what-docker" target="_blank" rel="noopener noreferrer">Docker</a> es una tecnología que implementa contenedores livianos que complementan o sustituyen a las estrategias de virtualización tradicionales. Dado el aprovechamiento masivo del hardware y su rápido despliegue y replicación, es muy utilizado en la tendencia actual de la industria especialmente en áreas como: desarrollo de software, implementación de estrategias de <a href="http://martinfowler.com/bliki/ContinuousDelivery.html" target="_blank" rel="noopener noreferrer">entrega continua</a> y provisión de ambientes de producción con alto crecimiento por demanda.</li>
<li><a href="http://developers.redhat.com/products/eap/overview/" target="_blank" rel="noopener noreferrer">JBoss EAP</a>, es la versión empresarial de Redhat de un servidor de aplicaciones JEE, con una alta ocupación del mercado y una comprobada comunidad que lo desarrolla y potencia.</li>
</ul>
<p>&nbsp;</p>
<p><strong>Instalación:</strong></p>
<p>El desarrollo de esta instalación de Liferay, está apoyada por documentación existente en proyectos complementarios a este objetivo. Los pasos de estos proyectos complementarios, que serán detallados a continuación, cubren las siguientes actividades:</p>
<ul>
<li>Definición y creación de un contenedor Docker que contenga una implementación activa del servidor de aplicaciones JBoss 6.4.0.</li>
<li>Definición y creación de un contenedor Docker, a partir del contenedor anterior, que contenga una instalación activa del software Liferay 6.2.</li>
<li>Configuración inicial de software Liferay 6.2.</li>
</ul>
<p>Docker JBoss 6.4.0:</p>
<p>El primer paso es crear el contenedor Docker que soporte al servidor de aplicaciones JBoss 6.4.0, para este fin se puede revisar otra referencia de cómo podemos realizar esta implementación en <a href="https://github.com/pazfernando/jboss-eap-6.4.0-docker" target="_blank" rel="noopener noreferrer">https://github.com/pazfernando/jboss-eap-6.4.0-docker</a>.</p>
<p>Es muy importante, en este punto, revisar el README.md de este proyecto debido a que previamente requieren descargar por su cuenta la distribución de JBoss (por cuestiones de licencia) y adicionalmente el contenedor se crea con el nombre “<strong>jboss-eap:6.4.0</strong>” que es con el que partiremos esta instalación de Liferay 6.2.</p>
<p>Docker Liferay 6.2:</p>
<p>La propuesta de esta implementación de Liferay se basa en el contenedor anterior. La siguiente actividad será crear el contenedor Docker mismo de Liferay a partir del proyecto <a href="https://github.com/pazfernando/liferay-6.2-jboss-eap-6.4.0-docker" target="_blank" rel="noopener noreferrer">https://github.com/pazfernando/liferay-6.2-jboss-eap-6.4.0-docker</a>. Este proyecto usa el nombre “<strong>jboss-eap:6.4.0</strong>” como base de su implementación, y apoyado en esta infraestructura instala el producto Liferay. Para la consecución de esta actividad se debe seguir las instrucciones del archivo README.md.</p>
<p>El nombre “<strong>jboss-eap:6.4.0</strong>” por su puesto puede cambiar pero requerirá que esté coordinado con el primer proyecto base.</p>
<p>Configuración Liferay 6.2:</p>
<p>Esperamos que en este punto tengan instalado Liferay en esta infraestructura correctamente; Liferay en adelante tiene un <a href="https://dev.liferay.com/discover/deployment/-/knowledge_base/6-2/using-liferays-setup-wizard" target="_blank" rel="noopener noreferrer">wizard</a> el cual lo guiará con los pasos de configuración y datos iniciales. Hasta este momento y como pueden haberlo advertido, no se ha mencionado la <strong>base de datos</strong>, puesto que la definición de la misma es parte del wizard inicial de configuración de Liferay. Nuestra implementación ha sido pensada para ejecutar el producto sobre el motor <strong>Oracle 11g</strong>, para lo cual se ha adjuntado y configurado el driver en las actividades previas anteriores.</p>
<p>&nbsp;</p>
<p><strong>Recomendaciones finales:</strong></p>
<p>Este proyecto por supuesto es una implementación de una solución para ambientes de desarrollo o testing y requerirá de varios cambios para pensar en una automatización en producción.</p>
<p>Si se requiere profundizar en las configuraciones del producto Liferay en la tecnología JBoss, se puede partir de la URL: <a href="https://dev.liferay.com/discover/deployment/-/knowledge_base/6-2/installing-liferay-on-jboss-7-1" target="_blank" rel="noopener noreferrer">https://dev.liferay.com/discover/deployment/-/knowledge_base/6-2/installing-liferay-on-jboss-7-1</a>, estas configuraciones se han automatizado en el contenedor Docker utilizado en este tutorial. Básicamente son los mismos pasos, pero existen especificaciones concretas debido a que JBoss 7.2 fue la última versión antes de que Redhat lo renombrara como JBoss EAP Alpha 6.2; y de ahí en adelante al ser la versión comercial tiene ciertas diferencias a las versión Wildfly que es la comunitaria.</p>
<p>Adicionalmente y como siempre si tiene dudas, comentarios, erratas o algo que decir 🙂 los animamos a comentar en este blog para todos tener un mejor conocimiento y entendimiento.[:]</p>
<p></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/liferay-jboss-docker/">[:es]Implementación de Liferay 6.2 sobre JBoss 6.4.0 &#8211; Como[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/liferay-jboss-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[:es]Microservicios en aplicaciones empresariales[:]</title>
		<link>https://softwareevolutivo.com.ec/microservicios-en-aplicaciones-empresariales/</link>
					<comments>https://softwareevolutivo.com.ec/microservicios-en-aplicaciones-empresariales/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Paz]]></dc:creator>
		<pubDate>Mon, 18 Jul 2016 14:40:00 +0000</pubDate>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[microservicios]]></category>
		<category><![CDATA[monolítica]]></category>
		<category><![CDATA[soa]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=103</guid>

					<description><![CDATA[<p>El concepto de Microservicios está a la orden del día y muchas empresas miran o estudian esta alternativa para la implementación de su Software. Este artículo trata de analizar tres temas principales de esta tecnología para que los CIO de la empresas tengan más elementos a la hora de tomar decisiones: Concepto de Microservicios Escenarios</p>
<p>The post <a href="https://softwareevolutivo.com.ec/microservicios-en-aplicaciones-empresariales/">[:es]Microservicios en aplicaciones empresariales[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="103" class="elementor elementor-103">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-5ddfddf8 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5ddfddf8" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5d678a3c" data-id="5d678a3c" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-26adf16e elementor-widget elementor-widget-text-editor" data-id="26adf16e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>[:es]<a href="https://softwareevolutivo.com.ec/wp-content/uploads/2016/07/word-image-1.jpg"><img loading="lazy" decoding="async" class="aligncenter" title="Microservicios en aplicaciones empresariales" src="https://softwareevolutivo.com.ec/wp-content/uploads/2016/07/word-image-1.jpg" alt="https://en.wikipedia.org/wiki/Burr_puzzle#/media/File:Burr_Puzzles.jpg" width="430" height="286"></a></p>
<p>El concepto de Microservicios está a la orden del día y muchas empresas miran o estudian esta alternativa para la implementación de su Software. Este artículo trata de analizar tres temas principales de esta tecnología para que los CIO de la empresas tengan más elementos a la hora de tomar decisiones:</p>
<ul>
<li>Concepto de Microservicios</li>
<li>Escenarios para adopción de este diseño de Software</li>
<li>Características de la arquitectura y retos de implementación</li>
</ul>
<p>&nbsp;</p>
<p><strong>Concepto de Microservicios</strong></p>
<p>No existe una definición única, pero en general al hablar de microservicios nos enfocamos en una arquitectura en donde se implementa la funcionalidad en silos de programación específicos definidos por el dominio del negocio (DDD). Estos servicios en conjunto, unos con otros, sirven cierta funcionalidad que podríamos denominar el Software producto. Así, en un clásica aplicación de compras en línea podríamos decir que el Software producto está dividido en dominios como inventario de productos, carrito de compras, procesamiento de pagos, sistema de entregas, servicio al cliente, etc., cada uno de ellos se concibe como una micro aplicación que se despliega independientemente de las otras en su proceso y que en la mayoría de casos en general tiene su propio repositorio de datos.</p>
<p>Delante de ellos y por la dinámica de los negocios en la actualidad se construyen los “front-end” que van desde páginas web, aplicaciones móviles, etc., hasta aplicaciones de consolas como Xbox, los cuales interactúan con estas micro aplicaciones a través de API gateway. Muchas de estas aplicaciones se intercomunican entre sí para proveer su funcionalidad, de una forma auto-gestionada, natural en una práctica conocida como coreografía. (Esto a diferencia del concepto de orquestación que se define en SOA[1]).</p>
<p>Existen muchos comparaciones o símiles con una arquitectura SOA (incluso inicialmente Netflix llamaba a esta arquitectura como SOA finamente desglosado[3]), y de un lado y del otro las opiniones tienen puntos válidos acerca de las razones.</p>
<p>En esta perspectiva ponemos a consideración dos puntos:</p>
<ol>
<li>SOA es una estrategia empresarial que busca alinear la tecnología con la visión estratégica del negocio a través de la orientación a servicios.</li>
<li>Los Microservicios están pensados para simplificar la complejidad de una aplicación empresarial buscando productividad, escalabilidad y reutilización en base al diseño de funcionalidades en silos de programación concebidos como servicios.</li>
</ol>
<p>&nbsp;</p>
<p><strong>Escenarios para adopción de este diseño de Software</strong></p>
<p>La arquitectura de Microservicios en la mayoría de casos puede no ser necesaria pues las aplicaciones con la arquitectura monolítica tradicional funcionan y se vuelven menos complejas de administrar, siendo esta dinámica la más común en las empresas que no tienen un portafolio grande de aplicaciones y/o requerimientos funcionales.</p>
<p>En las empresas de mayor volumen la realidad es diferente, el negocio ha requerido un portafolio grande de software que cubre requerimientos operacionales y comerciales. Aquí la propuesta del uso de esta arquitectura tiene que ver con dos aspectos:</p>
<ul>
<li>Estrategia del negocio: En este contexto el negocio presenta una dinámica en la cual muchas funcionalidades son requeridas por otros sistemas propios o de terceros. Este podría ser el caso del sistema para emisión de boletos aéreos, el cual es requerido por diferentes canales como kioscos, la página web, los centros de servicio, los sistemas de las agencias de viajes, cajeros automáticos de bancos, etc. , aquí es importante poder cumplir con todos ellos y no perder la oportunidad. En un esquema monolítico donde existe un sistema principal, la disponibilidad de este producto estratégico depende de este sistema principal en donde existen otras funcionalidades no interesantes para el negocio como la administración de usuarios por ejemplo, y presenta riesgos asociados con su evolución, disponibilidad y escalabilidad como tal. Es razonable pensar en abstraer este producto del sistema principal, buscando responder al negocio y su dinámica de forma ágil con un enfoque apropiado buscando su innovación y escalabilidad, en consecuencia podemos pensarlo como un servicio.</li>
<li>Complejidad: En un sistema monolítico sumamente extenso, por toda la funcionalidad que provee, es complejo el mantenimiento porque conceptos como pruebas, validación, despliegue y el conocimiento en sí del negocio se entiende como un todo. Ponemos como ejemplo la adición del campo &#8220;referencia&#8221; en un formulario de datos de direcciones de los clientes, parte de un sistema de seguros; aquí la tarea se identificada como sencilla, pero dado a que el módulo de clientes es parte de una aplicación monolítica, el cambio tiene un impacto en todo el software, y como tal sus procesos de validación y puesta en producción son extensos, demorados y restringidos. En este escenario se evidencia que la administración debe dividirse para responder al negocio a la velocidad que lo requiere y evitar sobre esfuerzos en tareas simples. Si abstraemos este dominio del negocio y los demás es más probable que este requerimiento sea atendido con prontitud y evitar incluso costos asociados.</li>
</ul>
<figure style="width: 660px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2016/07/word-image-2.png" alt="Escalamiento Horizontal Aplicaciones Monolíticas, @Copyleft www.softwareevolutivo.com.ec" width="660" height="445"><figcaption class="wp-caption-text">Escalamiento Horizontal Aplicaciones Monolíticas, Copyleft www.softwareevolutivo.com.ec</figcaption></figure>
<figure style="width: 660px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://softwareevolutivo.com.ec/wp-content/uploads/2016/07/word-image-3.png" alt="Escalamiento Vertical Microservicios, @Copyleft www.softwareevolutivo.com.ec" width="660" height="394"><figcaption class="wp-caption-text">Escalamiento Vertical Microservicios, Copyleft www.softwareevolutivo.com.ec</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Características de la arquitectura y retos de implementación</strong></p>
<p>La adopción de la arquitectura en Microservicios requiere además, del análisis de varios aspectos técnicos y organizacionales que debe prever la empresa para no verse inmersa en problemas de gestión y en consecuencia implementaciones no exitosas y llenas de problemas.</p>
<p>Ponemos a consideración las siguientes características:</p>
<ul>
<li>La concepción de un servicio debe ser en función de un dominio específico y bien delimitado del negocio, generalmente organizados alrededor de una capacidad del negocio.</li>
<li>Los servicios deben ser independientes, disponibles en su propio proceso lo cual nos permite una escalabilidad vertical y no como en las aplicaciones monolíticas que es horizontal.</li>
<li>A un servicio se lo entiende como un producto, por tanto evoluciona como tal y cuenta con un equipo multidisciplinario de desarrollo, su objetivo siempre es mejorar la capacidad de negocio.</li>
<li>Un servicio tiene un punto de conexión inteligente que es capaz de reconocer el mensaje y el mecanismo de acceso con protocolos simples como HTTP básico.</li>
<li>La plataforma tecnológica de un servicio está pensada en la solución correcta y no en estándares corporativos, así podemos crear servicios con diferentes lenguajes de programación y con diferentes repositorios de datos como bases de datos relacionales. documentales o clave-valor.</li>
<li>Esta arquitectura al tener varios servicios requiere varios procesos de despliegue, por lo que es crítico tener un plan de automatización de los mismos evitando sobrecargas de esfuerzo y errores manuales, son muy útiles las tendencias de despliegue como Devops.</li>
<li>La transaccionalidad debe estar preparada para fallos, estamos en un escenario que básicamente es programación distribuida y este concepto requiere experiencia. La atomicidad de la transacción no existe debido al riesgo de falla por la latencia en redes o cortes de servicio, así mismo por otros temas como errores de ejecución</li>
<li>La sobre-arquitectura es una tendencia que puede afectar al diseño de servicios, la idea es crearlos simples pero con una visión evolutiva que crezca a la par del requerimiento de negocio. Aunque la tendencia es desarrollar servicios que toleran cambios en sus proveedores es probable que se requiera de estrategias/políticas más formales como versionamiento y niveles de servicio.</li>
</ul>
<p>&nbsp;</p>
<p><strong>Conclusión</strong></p>
<p>Este artículo presenta tres conceptos principales a tomar en cuenta para la adopción de la arquitectura Microservicios, si bien su adopción puede ser parcial o total se requiere planificar otros aspectos para que la empresa esté preparada para su implementación. Animamos a todos a exponer en este medio sus puntos de vista y su conocimiento para mejorar este contenido y crear elementos de decisión sobre el paradigma.</p>
<p><em>Casos de éxito:</em></p>
<p>Finalmente queremos dejar dos enlaces a casos de éxito en la implementación de esta arquitectura para su evaluación y como elemento de decisión:</p>
<ul>
<li>From a Monolith to Microservices + REST: the Evolution of LinkedIn&#8217;s Service Architecture[4]</li>
<li>A Microscope on Microservices[5]</li>
</ul>
<p><strong>Referencias:</strong></p>
<ol>
<li><a href="https://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios">https://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios</a></li>
<li><a href="http://martinfowler.com/articles/microservices.html">http://martinfowler.com/articles/microservices.html</a></li>
<li><a href="http://techblog.netflix.com/2013/03/karyon-nucleus-of-composable-web-service.html">http://techblog.netflix.com/2013/03/karyon-nucleus-of-composable-web-service.html</a></li>
<li><a href="https://www.infoq.com/presentations/linkedin-microservices-urn">https://www.infoq.com/presentations/linkedin-microservices-urn</a></li>
<li><a href="http://techblog.netflix.com/2015/02/a-microscope-on-microservices.html">http://techblog.netflix.com/2015/02/a-microscope-on-microservices.html</a></li>
</ol>
<p>&nbsp;[:]</p>
<p><br>
<!-- /wp:shortcode --></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/microservicios-en-aplicaciones-empresariales/">[:es]Microservicios en aplicaciones empresariales[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/microservicios-en-aplicaciones-empresariales/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
