Mostrando las entradas con la etiqueta Capacitación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Capacitación. Mostrar todas las entradas

viernes, 20 de junio de 2014

Implementando agile en una empresa tradicional

Acabo de leer una nota de InfoQ acerca de la necesidad de entrenar y acompañar a los gerentes de IT (y sumaría de las áreas clientes) en metodologías ágiles para asegurar que se implemente de manera exitosa las políticas y prácticas propuestas.

Leer esta nota me hizo pensar en la tarea que estamos encarando en la empresa para cambiar la forma de trabajo en IT, buscar mayor agilidad, previsión y calidad en lo que producimos.

Desde fin del año pasado estoy empujando la implantación de metodologías ágiles en la empresa. Es un cambio cultural enorme y un desafío profesional que me propuse encarar con todas mis energías.

En un principio eramos unos pocos locos los que iniciamos con la idea de agilizar la forma en que producimos software, basándonos en metodologías ágiles (luego la base sería SCRUM), los principios de Lean y la filosofía de DevOps. Ese grupo de 3 o 4 locos con un conocimiento previo casi nulo comenzamos a estudiar y leer mucho, para luego sentar las bases de la nueva forma de trabajo que íbamos a proponer, y comenzamos la cruzada de sumar adeptos para formalizarlo.

Una vez que formamos una masa crítica de gente convencida de que era necesario cambiar, era necesario hacer que el efecto contagio escalara a toda la organización. Comenzamos de la manera tradicional, presentando al top management lo que proponíamos como cambio. Luego de una presentación de unas horas compraron el cambio (volveré a este punto en un rato), con lo que teníamos luz verde para seguir escalando a toda la empresa (una empresa con miles de empleados, con una base de personas que trabajan en IT del 5%). Las tareas que nos propusimos (y realizamos) fueron:

  1. Medir la temperatura de las ganas de cambio. Esto lo hicimos mediante presentaciones, charlas y talleres con el equipo IT. La conclusión de esta actividad fue que todos queríamos cambiar, que no podíamos seguir trabajando como lo estábamos haciendo. Eso era muy bueno. Pero también nos dimos cuenta que si bien todos querían el cambio, nadie quería empujar ese cambio, y esperaban que alguien lo hiciera. Decidimos ser nosotros el motor de ese cambio.
  2. Selección de herramientas que soportaran la metodología. Uno de los problemas detectados en las herramientas que soportaban la metodología actual era la falta de una herramienta que permitiera una trazabilidad end to end desde el requerimiento a la implementación, y el hecho de que dicha herramienta (o el proceso implementado) tenía mucha burocracia y una automatización casi nula. Luego de mucho analizar, decidimos implementar varias herramientas de Atlassian, sumadas a otras para resolver problemáticas puntuales (Grunt, Selenium, Bower, Artifactory)
  3. Organizar y dictar talleres sobre la nueva metodología, para establecer las bases teórico-prácticas. Preparamos y dictamos talleres sobre:
    1. SCRUM
    2. Gestión de requerimientos y planificación ágil (inception, user stories y user story mapping)
    3. Pair Programming, TDD y BDD como prácticas básicas para asegurar calidad y compartir conocimientos.
    4. Demo de la suite de herramientas que soportarán la metodología
    5. Talleres de acompañamiento prácticos para comenzar a trabajar con agile en un proyecto real.
  4. Proponer nuevas maneras de contratación para servicios de desarrollo y testing, de forma tal que se amoldaran a las filosofías agile.
  5. Contar con una consultora especializada en metodologías ágiles para ayudarnos a dar los primeros pasos, y brindar capacitaciones formales sobre agile.
  6. Sumar al área de recursos humanos al cambio cultural, para brindar soporte y acompañarnos con el gran cambio que significa salir de una metodología tradicional e ir a agile.
Este último punto es crucial, ya que es muy necesario ver este tipo de cambios como una modificación de la cultura organizacional, y no como un mero cambio de la forma en que trabaja IT. Hicimos y estamos haciendo un excelente trabajo en conjunto. Una de las tareas que realizó el equipo de gestión de cambio fue un assessment de las personas principalmente impactadas por el cambio, para entender que acciones se debían realizar. En las conclusiones de ese análisis surgió un punto que lamentablemente no me sorprendió, y que tiene mucha relación con como comencé este post. El principal punto de atención no era el miedo (que existía), ni la aversión al cambio (inexistente por suerte). Sino que veían que los gerentes no compartían la visión que comunicábamos y compartíamos con ellos.

Atentos a este warning, disparamos acciones adicionales:
  1. Sumar a los talleres al top management.
  2. Sumar al top management a las capacitaciones formales.
Es necesario que todos estén convencidos y sumados a la filosofía propuesta por agile, para lograr que sea un éxito. Ya que no es solo un cambio en la forma en que programamos, gestionamos requerimientos o analizamos. Es un cambio cultural y organizacional que abarca, también:
  • Como contratamos y gestionamos proveedores
  • Como planificamos un proyecto y medimos su avance
  • Como definimos y manejamos el budget
  • Como tratamos con nuestros clientes (internos y externos).
Podríamos haber hecho las cosas diferentes, seguro, pero estoy convencido que dimos y estamos dando todos los pasos necesarios para lograr trabajar de una manera mas eficiente, que nos permita crear software de calidad, y ser felices trabajando sin luchar contra las burocracias de una gran empresa.

viernes, 31 de octubre de 2008

Enterprise Architecture Training - Día 3

Este día, el tema con el que nos deleito Mike fue Arquitectura de aplicación y tecnológica.
Sigue un resumen de lo que vimos:

Arquitectura vs Estilos Arquitectónicos
Una arquitectura
Abarca las decisiones significantes acerca de:
  • La organización de los sistemas
  • La selección de los elementos estructurales que forman un sistema y sus interfaces, junto con el comportamiento que especifica la colaboración entre estos componentes
  • La composición de estos elementos dentro de sistemas prograsivamente grandes
  • Los estilos arquitectonicos que guían esta organización, estos elementos y sus interfaces, sus colaboraciones, y su composición.
Un estilo arquitectónico
  • Es un conjunto de principios, elementos, patrones, y restricciones diseñadas para llegar a un conjunto de requerimientos específicos, dentro de un alcance especifico
  • Un estilo puede ser pensado como un conjunto de restricciones sobre una arquitectura - restricciones sobre los tipos de componentes y sus patrones de interacción - y estas restricciones definen un conjunto o familias de arquitecturas que las satisfacen.
  • Proveen las "reglas de compromiso" a cumplir cuando se realiza una arquitectura.
Ejemplos de estilos arquitectonicos
Dió algunos ejemplos de estilos arquitectónicos, como:
  • cliente servidor,
  • 3-tier,
  • n-tier,
  • Message Queue (un punto importante aca fue su aclaración de que JMS no es un estandar, sino que un API). Respuesta a una discusión que tenemos muchas veces :)
  • MOM
  • SOA (en detalle en el día 4)
Colaboración
Definió a la colaboración como: "El proceso recursivo en el que dos o mas personas o empresas trabajan juntas para alcanzar un conjunto de objetivos mediante compartir conocimiento, aprendizaje, y creando consenso"

La arquitectura básica de colaboración esta compuesta por:
  • Elementos de colaboración: Herramientas que facilitan utilizan facilidades de comunicación para dar soporte a la colaboración. Ejemplo: Manejo de Documentos, Wiki, blogs, Redes Sociales.
  • Elementos de comunicación: Dan soporte a los elementos de colaboración, y se realizar sobre capacidades otorgadas por elementos de infraestructura. Ejemplos: Instant Message, Mail, Voice Mail, Video.
  • Elementos de infraestructura: Otorga facilidades básicas a los elementos de comunicación. Ejemplos: Redes, Mobilidad, Presencia, Identidad, Seguridad, Politicas
Patrones
Muy buena forma de demostrar para que sirve un patrón:
Supongamos que somos un jugador de ajedrez, queriendo convertirse en un maestro:
  • Primero, debemos aprender las reglas del juego, nombre de las piezas, movimientos legales, etc.
  • Luego, aprendemos los principios del juego: Valor de ciertas piezas, valor de ciertos cuadrados centrales, poder de un ataque, etc.
  • Finalmente, aprenden los distintos estilos de juego - las tretas y estrategias que utilizaron los pasados maestros
  • En otras palabras, se aprenden los patrones desarrollados y usados por los maestros
Haciendo la analogía con el software:
  • Primero uno aprende las reglas. Los algoritmos, estructuras de datos, y los lenguajes de programación. Podemos escribir programas, pero dificilmente serán buenos
  • Después, uno aprende los principios del diseño de software. Programación estructurada, programación modular, oop. Aprendemos la importancia de la cohesión y acoplamiento, el ocultamiento de la información y el manejo de la dependencia.
  • Pero no podremos decir que somos buenos programando, sin antes estudiar los diseños o soluciones de los maestros. Estas soluciones, o patrones, deben ser entendidos, memorizados, e interiorizados, para aplicarlos de manera natural.
Buenas prácticas
  • Un buen software es escrito adheriendo a los principios fundamentales: encapsulamiento, interfaces bien definidas - no solo se aplica a web services, se aclara-, estándares, bajo acoplamiento, alta cohesión.
  • Los patrones permiten utilizar la sabiduría de otros para incrementar el recurso mas valioso que tenemos en el desarrollo: tiempo
Tipos de patrones
  • Patrones de negocio: Identifica la interacción enre los usuarios, el negocio, y los datos. Se usan para crear aplicaciones de negocios simples. Ej: Self-service, collaboration
  • Patrones arquitecturales: Expresa la organización estructural fundamental de los sistemas, dando sus principales subsistemas, y la relación entre estos. Ej: Layers, Proactor, MicroKernel
  • Patrones de análisis: Describe la estructura y workflow de sistemas y aplicaciones in dominios específicos. Ej: Party, Contract
  • Patrones de diseño: Captura los roles estáticos y dinámicos y las relaciones entre componentes que solucionan problemas que ocurren repetidamente. Ej: Active Object, Bridge.
  • Idiomas: Describe estilos y convenciones para un lenguaje en particular. Ej: Scoped locking
Arquitectura aplicativa
Describe como se deben crear las aplicaciones. Incluye:
  • Como utilizar la arquitectura técnica
  • Elementos fundamentales de producción
  • Patrones de construcción comunes
  • Modelo de usuario
  • Frameworks de aplicación
  • Como configurar y manejar aplicaciones
Arquitectura conceptual
Este tipo de arquitectura pone al proyecto en un contexto: Contexto de la empresa, LOB, o tecnológico.
Muestra los datos fundamentales acerca de la arquitectura del proyecto (principales componentes, interacción entre estos), y la integración del sistemas con otros componentes o sistemas externos.
Define los conceptos, no técnicas.


Arquitectura técnica
Define la forma en que se debe organizar y administrar el hardware donde corren las aplicaciones, y de que forma se deben administrar, monitorear, e implementar las aplicaciones en estos entornos, para poder llegar a cumplir con los requerimientos de la arquitectura aplicativa, sin desperdiciar recursos.
Se ocupan de los atributos de calidad de performance, disponibilidad, capacidad. Es importante hacer un capacity planning
, para lo que es necesario que tengan relación o conocimiento de la arquitectura de negocio.

Esto es todo por hoy. Falta la ultima clase, SOA...

jueves, 30 de octubre de 2008

Enterprise Architecture Training - Dia 2

El día de ayer asisti a la segunda clase del curso de Arquitectura Empresarial. Esta vez, trató sobre arquitectura de negocios.

La clase estuvo dividida en dos partes, la primera orientada directamente a la arquitectura de negocios, o como un arquitecto tiene que estar orientado o siguiendo siempre la estrategia de la empresa, y otra parte enfocada a la arquitectura de datos.

Arquitectura Empresarial
Se puede definir como "Un blueprint formal de estructuras de gobierno, semánticas de negocio y cadenas de valor a través de toda una empresa".

Existen diferentes disciplinas dentro de una arquitectura de negocios. Estas son:
  • Visualización: Describir la arquitectura de negocio. Es crear vistas que permitan de una forma simple entender la arqutiectura de negocio.
  • Agregación: Unir diferentes vistas para facilitar el reconocimiento de comportamientos, entender redundancias e inconsistencias
  • Alineamiento: Transformación del negocio y IT, por fases, para que IT sea un facilitador de la estragiar, y el negocio vaya guiando a IT en la implementación de facilidades.
El negocio y IT deben estar alineados, definiendo como alineamiento a:
  • Estado en el cual las estructuras de gobierno, semánticas de negocio y reglas interactuan en armonía con los sistemas automatizados y datos.
  • El alineamiento de la arquitectura es un camino por recorrer, no es un objetivo a alcanzar. Es algo que se debe buscar en forma continua
  • Requiere la creación de un entorno que facilite la alineación continua, asi como la sincronización, entre el negocio y la arquitectura.
Estrategias de negocio y tecnológicas
Con el fin de conocer, analizar, y documentar la visión del negocio y porque no, de la arquitectura, tenemos diferentes estratégias o herramientas:

Ciclo de vida de las entidades
Algo que me pareció muy bueno, fue este tema del ciclo de vida de las entidades. Este concepto lo creo Michael Jackson (no el de los guantes, sino el guru del sw), en los 70s. Lo que hizo fue crear una forma de describir los estados de una entidad desde su nacimiento, hasta la muerte de la misma. Esta entidad puede ser un producto, cliente, o lo que sea.


Cadena de valor de Porter
Una buena forma de definir o mostrar las areas que dan valor a un determinado producto, en una empresa, es la cadena de valor de porter
. Lo que hace es definir los diferentes sectores de la empresa que van agregando valor a un determinado producto o servicio, de manera de identificar aquellos pasos que pueden mejorarse, agregarse, o eliminarse.
Ahi me pregunte, ¿es solo para una empresa, o podemos hacerlo nosotros para el area de arquitectura?

Rummler - Brache Enterprise System Model
Este modelo muestra a la empresa como una caja negra, con entradas y salidas. Las salidas son los productos o servicios que genera, a la que se le pueden aplicar metricas (como six sigma), para obtener una realimentación de lo producido. Estos servicios o productos son adquiridos o utilizados por clientes, que también nos dan un feedback. Dichos feedbacks tienen que ser utilizados para aplicar mejoras al proceso, dentro de la caja negra.
¿Podría aplicarse esto a un area de arquitectura, que da servicios a otras areas? Creo que si.

Arquitectura de datos
Después de habernos sentido como que estabamos en una clase de marketing (y teniendo regresiones de una semana que tuve el año pasado, investigando sobre marketing para una presentación), pasamos a un tema mas técnico, como la arquitectura de datos.
Se ve que este tema no le gustaba mucho a Mike, porque lo paso mas o menos de largo.

Principios de la información de negocios
  • La información es la base para el éxito del negocio
  • La información es un activo estratégico
  • El dueño de la información es el negocio
  • La información debe ser transparente y clara a todos los participantes interesados
  • La semántica debe ser la misma en toda la empresa.
La arquitectura de la información
  • Se trata de generación de vistas de la información empresarial
  • Se debe distinguir entre la información operacional y la informacional, o de análisis.
  • La arquitectura de datos esta basada en la arquitectura de negocios
  • Es una herramienta que permite la implementación de estrategias de negocio y tecnológicas uniformes.
¿De donde vienen los modelos de datos?
  • Los elementos clave en todos los buenos modelos de datos provienen de los modelos de negocio
  • Cuanto mejores sean los modelos o requerimientos del negocio, mas facil es crear buenos modelos de datos
  • Los modelos de datos simples toman mucho trabajo, es ucho mas facil producir modelos complejos (se debe pensar mas para simplificar los modelos).
Hasta aca, lo mas importante del segundo día.



martes, 28 de octubre de 2008

Enterprise Architecture Training - Clase 1

Hoy asisti a la primera de cuatro clases de Enterprise Architecture, cuyo orador es [Mike Rosen]

A continuación les dejo los puntos que mas me quedaron de este dia:

Comenzo hablando de para que es necesaria una arquitectura (complejidad del negocio y la tecnología, requerimientos de una semántica uniforme a toda la empresa, relacionar todos los activos implicados en el desarrollo de las soluciones, ...), y siguió definiendo que es una arquitectura. La definió de la siguiente manera:
  • "El diseño y especificación de la estructura de un sistema completo" David Garlan and Mary Shaw
  • "El concepto de mas alto nivel de un sistema en su entorno" IEEE
  • "La organización o estructura de los componentes significativos de los sistemas, interactuando a través de interfaces" RUP
Personalmente, no me cerró ninguna completamente.

Yendo al tema en cuestión del curso, Arquitectura Empresarial, se la definió como el entendimiento de todos los elementos que forman la empresa (personas, procesos, sistemas), y las decisiones necesarias para que estos elementos se relacionen de una forma tal que acompañen la estrategia empresarial.

La arquitectura debe responder las tres principales cuestiones:
  1. ¿Cuales son los conceptos importantes?
  2. ¿Cuales son las relaciones entre los mismos?
  3. ¿Como provee valor al negocio?

Objetivos de la arquitectura Empresarial

  1. Interoperabilidad entre sistemas
  2. Tecnología consistente
  3. Dar un maximo beneficio al negocio mediante el apropiado reuso de la tecnología
  4. Tecnología cost-effective, mediante la centralización de principios, políticas, estándares, y productos aprobados.

Repositorio

Es importante para una arquitectura empresarial, la existencia de un repositorio de activos de IT, entre los que se encuentran:


Activos de negocio
  • Estrategia de arquitectura
  • Organización del area de arquitectura
  • Productos de la empresa
  • Cadenas de valor de la empresa y arquitectura
Activos de solución
  • Procesos de negocio
  • Definición de la información
  • Diseño de Software
  • Catalogo de servicios
Activos IT
  • Aplicaciones
  • Productos IT
  • Plataformas SW
  • Hardware
Activos de arquitectura
  • Metamodelos
  • Arquitecturas de referencia

Architecture-Driven Design Process

Resumiendo, lo que dice este proceso o metodología de desarrollo es, en primera instancia, pensar el sistema totalmente agnóstico de tecnologías, basandose en los requerimientos del negocio (Arquitectura de Negocio).


Una vez definida la arquitectura agnóstica, decidir cual es la tecnología a implementar, y definir la arquitectura propia basada en la tecnología.


De esta manera, ganamos:

  • Flexibilidad de la arquitectura
  • No atar las decisiones de arquitectura a cuestiones propias de una tecnología
  • Maximizar la reutilización de componentes

Principios de arquitectura

Los principios que guían a una arquitectura, son:
  • Separación de incumbencias
  • Tener el cuenta el futuro (versiones de productos, estrategias de la empresa, nuevas tecnologías)
  • Ser riguroso en las definiciones
  • Enfocarse en la comunicación
  • Buscar el desarrollo de aplicaciones en forma consistente y efectiva
  • Buscar una implementación de los cambios por fases

Definición del área de arquitectura
Un punto que me intereso, fue como ve Rosen los pasos para establecer un grupo de arquitectura empresarial. Estos pasos son:
  1. Establecer un plan de implementación por fases (seleccionando los proyectos menos criticos pero mas visibles al principio, y luego buscar reutilizar lo maximo)
  2. Definir la estructura y staff del equipo (teniendo en cuenta tamaño de la empresa, y tipos de arquitectura)
  3. Definir interacciones con otros grupos de trabajo, y de que manera se va a realizar.
  4. Desarrollar estándares EA y arquitecturas de referencia
  5. Crear, mantener y distribuir un repositorio EA
  6. Capacitación, auditoría, consultoría, y mentoring dentro del grupo de EA y con el resto de IT
  7. Definir e implementar métricas

Para mi, le falta un punto antes, que es establecer en que estado se encuentra la arquitectura, y definir una visión para el grupo y un objetivo al que quiero llegar.

Factores de éxito
Para terminar, les dejo 10 puntos que segun Rosen son factores críticos para el éxito de una arquitectura empresarial:
  1. Enfocarse en los resultados. Permitir que los otros sean exitosos usando arquitectura. Remover las barreras entre los distintos grupos y EA.
  2. Entregar un valor al negocio en forma continua
  3. Implementar los cambios necesarios teniendo en cuenta toda la empresa (SOA, Enterprise Architecture)
  4. Integrar modelos empresariales para soportar los servicios de negocio, procesos de negocio, y procesos de desarrollo
  5. Implementar, recolectar y reportar métricas para demostrar valor
  6. Usar un enfoque de implementación por fases, teniendo siempre en cuenta la visión de la arquitectura
  7. Proveer una infraestructura que facilite la reutilización
  8. Integrar el programa de arquitectura con los procesos de IT
  9. Implementar una separación entre los procesos e información a nivel empresarial, de los datos y APIS de las aplicaciones
  10. Evitar esquemas de financiamiento complicados
Prometo agregar mas detalle de cada punto, pero como resumen, creo que me pase de largo!