Desarrollo web

ventajas de scrum

Ventajas de Scrum para gestionar proyectos web

¿Qué es Scrum?

Scrum es un marco de trabajo liviano que se utiliza para la gestión de proyectos.

Scrum no es una herramienta, ni un proceso, ni un método. Un método está pensado para algo que se hace más de una vez con cierta estabilidad y Scrum está indicado para entornos más inestables.

Scrum está basado en el empirismo y el surgimiento y emplea un enfoque iterativo e incremental. Por eso Scrum es muy adecuado para gestionar proyectos en los que se lanzan nuevos productos o servicios.

En Scrum es fundamental la transparencia que permite la inspección continua que a su vez permite la adaptabilidad.

Se realiza una inspección continua sobre el producto y también sobre el proceso mediante un enfoque empírico que permite la retroalimentación.

Historia de scrum

En el comienzo de la informática los proyectos se gestionaban con el modelo predictivo o en cascada en el que lo que hay que hacer se decide a priori antes de comenzar el desarrollo. El control está en un agente externo y las decisiones están centralizadas. Hay menos errores pero los que hay son de mayor impacto. Las personas tienen una mayor especialización. Es para contextos de problemas simples o complicados.

Este modelo predictivo estaba inspirado en la arquitectura que se utiliza para construir productos físicos como por ejemplo un edificio, pero no funcionaba realmente bien para proyectos informáticos. La programación consiste en construir un producto intelectual. El software no lo hacen máquinas, lo hacen personas, la parte clave es el equipo, no funciona la idea de cadena de montaje y especialización. Por eso poco a poco se va cambiando al marco Agile.

En 1995 se funda el framework Scrum por Jeff Sutherland y Ken Schwaber que soluciona los fallos del modelo predictivo.

En 2001 nace el manifiesto Agile. Scrum como marco de trabajo se apoya en el manifiesto Agile.

En 2010 se realiza la primera publicación de la Guía Oficial de Scrum.

El framework Agile se utiliza para entornos de menor estabilidad, menor previsibilidad y menor control. Es para contextos de problemas complejos o caóticos con mayor nivel de ambigüedad. Por eso las decisiones se toman sobre la marcha según lo empírico. Las decisiones están descentralizadas. Hay más errores pero de menor impacto porque se reacciona más rápido sobre la marcha.

El conocimiento proviene de la experiencia que vamos recolectando en el camino. Las decisiones son resultado de inspeccionar y adaptar de forma permanente. Destaca la flexibilidad, la adaptabilidad.

La clave de Agile es la adaptabilidad, la capacidad para adaptarse a los cambios. El error es inevitable pero se capitaliza como una inversión porque tenemos capacidad de adaptación. Las personas están menos especializadas, son multitarea.

Indicado para entornos complejos

La masificación de la tecnología hace que todo sea más impermanente y más complejo. Agile sirve para contextos de gran volatilidad e impermanencia.

que es scrum ventajas

Según la teoría de la complejidad explicada por el marco Cynefin, dependiendo del nivel de conocimiento y complejidad, un proyecto o una empresa puede ser:

  • Caótico
  • Complejo
  • Complicado
  • Simple

A medida que vamos ganado conocimiento y experiencia en un proyecto éste se va moviendo de caótico a complejo, de complejo a complicado, y de complicado a simple. En ocasiones, por la inercia y falta de adaptabilidad de los entornos simples, se puede pasar de simple a caótico.

Los proyectos que tienen más requerimientos y más herramientas serían simples y complicados, mientras que los proyectos que tienen menos requerimientos y menos herramientas serían complejos y caóticos.

El marco Agile es idóneo para entornos complejos y caóticos.

Ventajas de Scrum y los entornos ágiles

Las razones para la adopción de Agile en la gestión de proyectos son las siguientes:

  • Involucrar al cliente en el proceso de desarrollo
  • Reducir el horizonte de planificación para hacer una entrega temprana y frecuente de valor.
  • Acelerar la entrega de software
  • Responder mejor a los cambios
  • Capitalizar los errores puesto que representan un aprendizaje
  • Controlar el proceso de manera empírica. El control no está centralizado en una persona sino en todo el equipo que negocia con el dueño del producto.

Los valores de Agile

El marco Agile tiene cuatro valores:

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

Los valores de Scrum

Scrum tiene cinco valores de tipo conductual:

  1. Coraje para resolver problemas difíciles
  2. Foco en el Sprint
  3. Compromiso con el objetivo
  4. Respeto
  5. Apertura

Incorpora elementos de otras prácticas

Scrum incorpora elementos de otras prácticas como:

  • Lean
  • Kanban
  • EXtreme Programming (XP)

Lean

Lean es un paradigma inspirado en el sistema de producción Toyota. Se hace enfasis en la calidad y el cliente. Se busca siempre entender lo que el cliente necesita y poner al cliente en el centro.

EXtreme Programming (XP)

XP considera los cambios de requerimientos durante el ciclo de vida de un proyecto como algo natural. Se utiliza el pair programming, las historias de usuario, las pruebas unitarias y las pruebas automatizadas.

Kanban

Kanban es una herramienta de gestión visual para fomentar la transparencia. Se busca limitar el trabajo en progreso. El objetivo es comenzar algo y terminarlo y no aceptar más trabajo mientras estamos con trabajo en curso.

No empieces nada que no esté listo para ser terminado

Hay tres etapas:

  • To do
  • Doing
  • Done
ventajas de scrum y kanban

Para pasar a «To do» hay que tener todas las condiciones de inicio cumplidas (Definition of Ready, DOR).

Para pasar a «Done» hay que tener todas las condiciones de finalización cumplidas (Definition of Done, DOD).

Minimum Viable Product (MVP)

Un MVP es un producto vivo e inacabado al que se le va dando valor incremental a medida que se van lanzando prototipos al mercado de manera iterativa.

Esto es muy idóneo para lanzar nuevos productos que nunca antes se habían ofrecido en el mercado. Con un MVP, los usuarios reales lo pueden probar en cada iteración.

No estar en producción es gastar dinero sin hacer dinero.

Kent Beck (eXtreme Programming)

¿Cómo se planifica?

El proceso de crear software con valor tiene distintas etapas. La organización trabaja en una secuencia para lograr la visión, eliminar la ambigüedad y detallar el trabajo de forma que se logre un producto funcional.

Estas capas secuenciales son Estratégica, Táctica y Operativa. De esta forma vamos planificando de más general a más específico:

  • Project Plan (Épicas)
  • Release Plan (Temáticas)
  • Sprint Plan (Historias de usuario)
  • Task Board (Tareas y actividades)

Una épica es una historia de usuario que no puede ser entregada dentro de una sola iteración, o que es suficientemente grande como para ser partida en historias de usuario más pequeñas.

Es importante tener consensuada previamente una DOR (Definition of Ready) para empezar un nuevo sprint y una DOD (Definition of Done) para finalizar un sprint, y unas Condiciones de Satisfacción del Product Owner.

La Definition of Ready tiene que incluir los acuerdos con todas las dependencias:

  • Acuerdos con equipos externos que tienen que hacer algo durante el sprint
  • Input que necesito de otro equipo para poder comenzar con la actividad

En Scrum no es que no se planifique si no que se planifica con mayor frecuencia con un horizonte de planificación más corto. Al acortar el horizonte de planificación, el nivel de certidumbre es más alta. Se realiza una inspección diaria sobre el proceso y sobre el producto.

Se pasa por tres etapas: Product Discovery, Product Inception y finalmente Product Delivery.

Product Discovery

El Product Discovery lo hace el Product Owner con los stakeholders. Se crean las épicas que son agrupadores funcionales.

Son técnicas de ideación y convalidación de hipótesis que da lugar a una visión del producto y a un User Journey.

El User Journey son los pasos que hace el usuario desde el principio hasta el final.

Product Inception

El Product Inception se llama también Sprint 0.

El Product Owner se reune con el equipo de desarrollo y con el Scrum Master. La Épica se desagrega en Historias de Usuario y se establece el Release Plan. El Release Plan es el User Story Mapping.

Las historias de usuario son pequeños bloques funcionales más pequeños.

Un release es un conjunto de historias de usuario, priorizadas, con las que se elabora un MVP que entregue funcionalidad completa para el negocio y los usuarios, de valor incremental respecto a la versión anterior. Un release puede tener uno, dos o tres sprints. El release es un agrupador funcional de sprints.

En Product Inception se realiza también el Team Inception que son los acuerdos necesarios con otros equipos.

Product Delivery

Del Product backlog seleccionamos los elementos que van a formar parte del Sprint backlog. Finalmente concretaremos el Sprint backlog en los Backlog items que son las actividades y tareas.

Un sprint suele tener varias historias de usuario, por ejemplo entre 4 y 6.

El 10% del trabajo mensual del equipo se dedica al refinamiento en el que preguntamos dudas al Product Owner para quitar ambigüedades.

Si hemos cumplido la DOR pasamos a To Do, luego pasamos a Doing, y si hemos cumplido la DOD pasamos a Done.

Para hacer Scrum se tienen que dar todos sus elementos constitutivos

Para inspeccionar y adaptar el producto y el proceso necesitamos tener 3 roles, 5 eventos y 3 artefactos:

3 roles

Hay tres roles en Scrum:

  • Product Owner
  • Scrum Master
  • Equipo Scrum
product owner y scrum master

El Product Owner establece el qué y el equipo Scrum establece el cómo.

5 eventos

  • El Sprint
  • Sprint Planning
  • Daily Scrum o Daily Standup
  • Sprint Review
  • Sprint Retrospective o Retrospectiva

3 artefactos

  • Product Backlog
  • Sprint Backlog
  • Incremento

El Product Owner

El Product Owner define QUÉ vamos a hacer.

Es el que realiza el Product Discovery y el Product Inception.

Define el objetivo del incremento potencial del producto, así como el objetivo del Product Backlog para no perder foco y no desvirtuar el alcance.

Es el encargado de priorizar, así como de planificar junto con el equipo de desarrollo.

El Product Owner es el punto focal con el negocio y trata con los stakeholders para:

  • Mantener la visión del producto maximizando la entrega de valor
  • Es el dueño del Product Backlog y lo prioriza
  • Controla toda la inversión relacionada con el producto
  • Valida las funcionalidades
  • Está disponible para el equipo Scrum que le ofrece transparencia para que pueda tomar decisiones en tiempo real

El Product Owner no es un Analista Funcional ni un Jefe de Proyecto.

El sprint 0 (Alistamiento o Product Inception) sin fechas es potestad del Product Owner y ya cuando le ponemos una linea de tiempos interviene en la decisión el equipo Scrum y DevOps. Esto es muy importante para garantizar los plazos de entrega.

El Product Owner revisa solo lo que está en Done para ver si cumple con la DOD.

El Scrum Master

El Scrum Master es el que coordina el Product Delivery.

Es el que guía la daily standup para tener foco y así inspeccionar y adaptar.

Es un facilitador imparcial que ayuda a promover discusiones para que se puedan tomar decisiones.

El Scrum Master da servicio tanto al Product Owner como al Equipo de Desarrollo y se encarga de la eliminación de impedimentos y protege al equipo de interrupciones externas.

También es un agente de cambio. Busca generar los vínculos necesarios para promover interacciones que generen valor.

El equipo Scrum

El equipo Scrum define CÓMO lo vamos a hacer.

Es el que realiza el Product Delivery.

equipo scrum

El equipo Scrum tiene que ser autoorganizado y multifuncional.

Además de autoorganizado tiene que ir un paso más allá y ser autogestionado. Es un modelo de liderazgo distribuido en el que el responsable de la entrega es todo el equipo.

Un equipo autogestionado tiene que tener nivel de decisión, nivel de responsabilidad y nivel de autoridad. Son evaluados como un todo, como un equipo, y no como un idividuo.

Scrum busca menores depenencias (resolver lo más posible dentro del propio equipo) para así eliminar los tiempos de espera.

El Scrum Team presenta el resultado de la interacción al Product Owner. El equipo como un todo es responsable de cada entrega o release.

Es importante resaltar que el propio equipo es proactivo, autónomo y responsable.

¿Cómo se presupuesta?

En vez de presupuestar un proyecto completo, se presupuestan features con entrega de valor temprano. Se financian features y no proyectos.

¿Qué más es necesario para hacer Scrum?

La verdadera dificultad está en la integración entre lo técnico y lo social.

Además de hacer Scrum, hay que tener una mentalidad Agile que tiene que impregnar toda la complejidad social y cambiar el comportamiento social.

Qué es lo fundamental de Scrum

Lo fundamental de Scrum es gestionar todas las variables imprevistas tanto en lo técnico como en lo social.

Agilidad no significa más rápido, significa trabajar de forma más adaptable para entregar valor frecuente.

El sinónimo de Agile no es rápido, es adaptable.

agil es adaptable

No es la más fuerte de las especies la que sobrevive, tampoco es la más inteligente la que sobrevive. Es aquella que se adapta mejor al cambio.

Charles Darwin
que es angular

Qué es Angular y cómo instalarlo

¿Angular es un framework o una biblioteca?

Lo primero que tenemos que dejar claro es que Angular es un framework y no una biblioteca.

¿Qué es una biblioteca?

Una biblioteca es un conjunto de funcionalidades y objetos que cumplen una función acotada (por ejemplo React es una biblioteca cuya función es manejar la vista).

¿Qué es un framework?

Sin embargo, un framework es algo más amplio que una biblioteca.

Un framework es un marco de trabajo, un conjunto estandarizado de conceptos y prácticas para enfocar un tipo de problemática particular que sirve como referencia para resolver nuevos problemas de índole similar.

Un framework es un esqueleto con herramientas y librerías que nos ayudan a construir una aplicación de principio a fin.

Entonces, ¿qué es Angular?

Angular es un framework que facilita la construcción de aplicaciones web.

Angular es propiedad de la empresa Google

Angular puede incluir, entre otras herramientas, soporte de programas, bibliotecas, y un lenguaje interpretado para así ayudar a desarrollar y unir los diferentes componentes de un proyecto web.

En Angular está todo modularizado

Las aplicaciones Angular están modularizadas y Angular tiene su propio sistema de modularización llamado Angular Modules o NgModules.

Angular es un framework que está muy bien para Single Page Applications y que ofrece una experiencia de usuario más ágil.

Angular está pensado para trabajar con módulos y componentes

angular modulos componentes

Está pensado para dividir un proyecto en componentes, lo que permite una mejor reutilización de recursos.

Angular tiene herramientas de comunicación entre Frontend y Backend

Hay una relación uno a uno entre template (código html) y componente (código typescript que define el comportamiento del template).

Por cada template hay un componente

Una de las mejores cosas que tiene Angular es que es “componible”, esto significa que podemos construir grandes componentes a partir de componentes más pequeños.

Una aplicación es simplemente un componente que renderiza a otros componentes

Debido a que los componentes están estructurados en forma de árbol “padre/hijo”, cada vez que se renderiza un componente, éste hace que se rendericen también sus componentes hijos.

¿Cómo se instala Angular?

instalar angular

Para poder trabajar con Angular vamos a tener que instalar las siguientes herramientas:

  1. NodeJs
  2. NPM (en Windows se instala junto con NodeJs)
  3. Angular CLI (interfaz de línea de comandos para Angular)
  4. Un IDE, por ejemplo Visual Studio Code

Instalar NodeJs

Puedes instalar la version LTS de Node.js descargándola de:

https://nodejs.org/en/

Para comprobar si está instalado y ver la versión que tenemos de Node, puedes poner en la consola:

node -v

Instalar Angular CLI

Angular CLI es una herramienta de línea de comandos que nos permite crear un proyecto, agregar archivos y realizar una serie de tareas de desarrollo tales como testear y deployar.

Para instalarlo vamos a tener que abrir una terminal del sistema operativo y poner el siguiente comando:

npm install -g @angular/cli

Para comprobar qué versión tenemos instalada:

ng –version

Instalar Visual Studio Code

Puedes instalar el programa descargándolo de:

https://code.visualstudio.com/

Mi primer proyecto con Angular

primer proyecto angular

Para crear un nuevo proyecto en Angular y hacerlo en modo de desarrollo tenemos que poner lo siguiente en la consola:

ng new nombre-proyecto

Para este primer proyecto, podemos responder a las dos preguntas siguientes con NO y CSS

Dentro de la carpeta nombre-proyecto se crea todo el código necesario para el desarrollo con Angular:

En src/app es donde está nuestro código del proyecto

En la consola, nos situamos en la carpeta nombre-proyecto:

cd nombre-proyecto

Y lanzamos el proyecto para crear un servidor virtual en el puerto 4200 de localhost y así poder compilar según vamos desarrollando:

ng serve

También lo podemos lanzar poniendo npm run start  ya que en el archivo package.json, en «scripts», aparece el comando «start» para ng serve (se puede abreviar a npm start).

Es como un servidor para ver los cambios en tiempo real.

El proyecto por tanto se puede ver en:

http://localhost:4200/

¿Qué es un componente?

Un componente es la combinación de un template (en .html) y un controlador (en .ts). Los componentes son clases que interactúan con los archivos .html.

Cada componente está compuesto por tres partes:

  • Un decorador de componente
  • Una vista
  • Un controlador

Toda aplicación Angular tiene al menos un módulo, el “root module”, convencionalmente llamado “AppModule”.

Como hemos comentado, dentro de la carpeta src, nos vamos a encontrar con otra carpeta llamada app.

Dentro de esta carpeta tenemos los siguientes archivos:

  • app.component.css
  • app.component.html
  • app.component.spect.ts
  • app.component.ts
  • app.module.ts

La página de inicio del proyecto es el template:

src/app/app.component.html

El template es la parte visual del componente.

En el archivo app.component.ts, con la opción template en el @Component, declaramos el template HTML que ese componente va a usar.

De esta forma, el template app.component.html tiene relación con el componente app.component.ts.

El módulo inicial es:

app.module.ts donde se declaran todos los componentes de la aplicación.

Cómo crear un nuevo componente

Lo podemos crear manualmente

Crear una nueva carpeta dentro de src/app, por ejemplo home

Dentro de home crear los archivos:

home.component.ts
home.template.html

En home.component.ts:

import { Component } from ‘@angular/core’;

Y luego para que sea un componente, poner el decorador @Component:

La clase HomeComponent va a actuar como componente del template home.template.html:

@Component ({
selector: ‘app-home’,
templateUrl: ‘./home.template.html’
})
export class HomeComponent {
titulo : string = ‘Este es el título del proyecto’;
}

Luego hay que declarar el componente en el módulo principal app.module.ts en el import:

import { HomeComponent } from ‘./home/home.component’;

(no hace falta poner la extensión .ts)

Y lo agregamos al array declarations dentro de @NgModule:

@NgModule({
declarations: [
AppComponent,
HomeComponent
],

O lo podemos crear más rápido desde Angular CLI

En la consola:

ng generate component home

O con la versión abreviada:

ng g c home

Se crea automáticamente una carpeta nueva con el nombre home del componente y dentro está el controlador, el template, el css, etc.

Y lo agrega automáticamente en el app.module.ts

¿Cómo podemos ver el proyecto en el navegador?

En home.template.html utilizamos la técnica de la interpolación para que acceda a la variable titulo del componente, variable que puede contener por ejemplo el valor «Este es el título del proyecto»:

{{titulo}}

Por otro lado, el selector tiene la tarea de indicar cómo el componente va a ser reconocido cuando sea usado en un template.

De esta forma, podemos borrar todo el contenido que aparece por defecto en app.component.html y llamamos al componente home con el selector:

<app-home> </app-home>

Así, cuando veamos en el navegador http://localhost:4200/ podremos ver el contenido del componente home:

Este es el título del proyecto

¡Hasta el siguiente post!