Archivo de la etiqueta: Web

Redmine como herramienta para la gestión de un departamento TIC

En los últimos años, uno de los proyectos más interesantes en los que he participado es la implantación de un sistema de gestión de proyectos TIC en la unidad en la que prestaba servicios.  Las unidades TIC son, en general, complejas de organizar debido sobre todo a la variedad de aplicaciones y tecnologías existentes, a la gran demanda que las unidades de negocio hacen de dichos aplicativos y a lo complejo que es compaginar los proyectos que el negocio demanda con los proyectos que son requeridos por la propia organización TIC y por la evolución de la tecnología.

Existen muchos modelos de unidades TIC pero, además de lo comentado anteriormente, todas ellas comparten cierta complejidad derivada del modelo de contratación y del modelo de gestión de la demanda implantado. Podemos destacar los siguientes puntos a este respecto:

  • Gestión de la contratación con proveedores y acompasamiento de la misma con las necesidades de las unidades de negocio. La contratación en general, y la contratación TIC en particular, es compleja y requiere de una gestión muy pormenorizada para obtener la máxima eficiencia.
  • Gestión de los objetos de la contratación, los cuales pueden variar a lo largo de la vida del contrato a demanda de las unidades de negocio. Existen fórmulas de contratación que permiten este modelo de demanda cambiante, aunque tradicionalmente no ha sido así y las unidades han estado muy restringidas por la definición de los objetos de un contrato, realizada con mucha antelación y sin los datos adecuados (fallo del modelo tradicional de desarrollo en cascada).
  • Implicación y descripción funcional. Es complejo implicar a las unidades funcionales en el propio ciclo de desarrollo (por ejemplo como Product Owners si hablásemos de SCRUM) de forma que participen en las pruebas y evolución de los requisitos. Normalmente los requisitos llegan muy poco formalizados (lo cual no es un problema en un modelo iterativo cuando la implicación funcional posterior es alta pero si lo es en un modelo de definición previa de entregables) y , casi siempre, en el último momento y con poco margen de maniobra.

Es por todo esto que es necesario dotar a la unidad TIC de los más eficientes mecanismos de gestión que minimicen toda esta complejidad y, es ahí, donde alguna herramienta nos puede ser de gran utilidad. Creo que las organizaciones se dividen en dos tipos: las que cambian cuando lo hace su entorno y, por tanto, se ven obligadas a cambiar, o las que se adelantan al entorno para propiciar y gestionar sus propios cambios. Sin duda, las organizaciones tipo 2 son más eficientes por lo que no se deben posponer este tipo de proyectos internos para “cuando haya un hueco”, sino que deben ser acometidos como parte estratégica de la unidad. Como he comentado antes, no es fácil compaginar estos proyectos estratégicos internos con el despliegue de nuevas funcionalidades demandadas por el negocio pero es la labor del profesional TIC saber hacerlo porque de eso depende el éxito de la unidad ya que, inevitablemente, el desarrollo de negocio no podrá sostenerse en el tiempo sin una evolución continua en los métodos de gestión y en el aprovisionamiento de nuevas infraestructuras tecnológicas.

Centrándonos en el tema de las herramientas, muchas son las opciones disponibles. Lo que buscamos es un sistema que nos permita enlazar todas nuestras tareas de desarrollo (y explotación y sistemas) con los requisitos del negocio e incluso con la gestión de la configuración. De esta forma, es muy fácil obtener ventajas y resultados a corto plazo:

  • Alineamiento de cada actividad de la unidad con los objetivos de la organización. Su visualización en cuadros de mando puede ser de gran impacto para la dirección.
  • Seguimiento y gestión de las tareas desde un nivel de agregación propio de la dirección (TIC y no TIC) hasta el nivel más detallado posible.
  • Gestión de los objetos de la contratación e incluso, seguimiento de un contrato gestionado basado en unidades de trabajo (facturación, recepción, etc.). Esto puede ser de gran importancia incluso en contratos de servicios en los que el equipo de la empresa no está en nuestras instalaciones.
  • Gestión de la configuración como paso previo y necesario en la integración o despliegue continuo.
  • Etc.

El proyecto que describo partía de la utilización de unos ficheros Excell, de tratamiento muy complicado, en los que se reflejaban los principales proyectos e hitos de la Subdirección. Estos ficheros se revisaban en las reuniones mensuales que tenían lugar dentro de la gestión de las diferentes áreas de desarrollo y sistemas y eran la herramienta básica de control para la Oficina de Gestión de Proyectos, de reciente creación. Es cierto que se disponía, en algunas áreas, de la herramienta Team Foundation Server de Microsoft para la gestión de ciertos proyectos de desarrollo en tecnología .NET pero, claramente, estas herramientas no proporcionaban lo que la unidad demandaba por lo que optamos por realizar un proyecto de implantación y distribución al negocio de una herramienta para la gestión de procesos de la unidad TIC.

La herramienta que elegimos nosotros, después de sondear el mercado, fue Redmine, por ser software libre y, sobre todo, por ser sencilla y altamente configurable. Sobre la versión inicial del producto, que puedes instalar en una máquina física o virtual e incluso, de una forma más cómoda, como contenedor Docker, hicimos algunos cambios para “customizar” la aplicación a nuestro entorno corporativo. Para ello, lo primero que hicimos fue cambiar el tema y crear una división basada en las sub-unidades que componían la Subdirección TIC.

Áreas en Redmine

Obviamente, hubo que realizar un gran trabajo de instalación, configuración de roles y permisos, tipos de peticiones y campos de las mismas, parametrización de áreas, etc, y sobre todo, un gran trabajo de concienciación y gestión del cambio implantando la herramienta área por área. Destaco lo poco que tuvimos que invertir en optimización de la herramienta siendo un único nodo el que puede dar servicio a toda la subdirección sin ningún tipo de problema.

Configuración de Redmine

Es importante señalar que, como ocurre muchas veces en este tipo de proyectos, el principal escollo del proyecto no fue la parte tecnológica, sino la gestión del cambio. Hubo que realizar una gran labor de comunicación, formación y persuasión interna para minimizar la resistencia al cambio y conseguir llevar a cabo el proyecto con éxito implantándolo a nivel global dentro de toda la unidad.

Vistazo en el panel de Redmine

Mediante el uso de Redmine logramos dar un gran vuelco a la forma en la que se gestionaban los proyectos en la unidad consiguiendo llevar un control más exhaustivo y, por tanto, corrigiendo desviaciones mucho más rápido, así como dotando de transparencia a los diferentes procesos de la unidad.

Los usos principales que le dimos nosotros al sistema son los siguientes:

  • Gestión de proyectos de desarrollo y operación. Esto comprende la definición de requisitos (incluso con documentos adjuntos), la gestión de tiempos y calendarios, la gestión de sub-tareas y su asignación, etc. Esta gestión era especialmente útil en las diferentes reuniones de seguimiento que se llevaban a cabo en la unidad.
  • Seguimiento del trabajo por la dirección. A través de la herramienta es muy fácil ver en qué está la unidad y cual es su grado de avance de cara a presentar resultados a la dirección del organismo (no TIC). Igualmente, es muy fácil clasificar proyectos y alinearlos con la estrategia de la dirección del organismo obteniendo una alineación perfecta de la unidad TIC con los objetivos de la organización.
  • Seguimiento del trabajo por las unidades de negocio. A través de la herramienta las unidades de negocio pueden aportar requisitos, seguir la evolución de los desarrollos y comprender la complejidad y diferentes partes que entran en juego en el desarrollo de sistemas de información.  El sistema de avisos de Redmine, basado en el envío de correos, resultó muy útil para avisar de cambios en el estado de un desarrollo a una unidad de negocio, de forma que puede implicarse en la definición de objetivos, realización de pruebas y corrección de desviaciones. Destaco lo importante que puede ser para las unidades no TIC tener visibilidad y participación en el desarrollo, ya que reduce tensiones y aumenta la sinergia entre las unidades.
  • Gestión de la configuración. Cualquier cambio en código debe ser asociado a una petición (historia de usuario, tarea o error) de Redmine, permitiendo un seguimiento preciso de los requisitos de negocio que propiciaron un cambio. De cara a la implantación de un sistema de integración o despliegue continuo, esta conexión del código (que se despliega automáticamente) con el requisito es fundamental.
Conexión Redmine – Git
  • Seguimiento de la contratación. Los diferentes objetos fruto de la contratación de servicios, son seguidos y gestionados por la unidad desde esta herramienta, asociando proyectos a contratos.

Además de esto, la unidad hizo gran uso del módulo Wiki que incluye Redmine como herramienta colaborativa para la reducción de la documentación en la Subdirección, dentro de un desarrollo mucho más ágil y no basado en documentación.

Wiki en Redmine

Por último, añadir que esta herramienta puede ser utilizada para otros propósitos más generales, especialmente para la gestión de incidencias a modo a como actualmente se utiliza de forma muy extendida Jira (muy parecida a Redmine). La utilización de la herramienta  también para la gestión de las incidencias  de los aplicativos permite cerrar completamente el ciclo de desarrollo, es decir, permite tener enlazada una incidencia con  el código que la corrige y la historia de usuario que generó la funcionalidad a corregir, avisando de un evento a los distintos roles (funcionales o TIC) involucrados en el proceso cuando se produce una corrección.

Diseño de aplicaciones web

Actualmente, el uso de la tecnología web es predominante en el desarrollo de aplicaciones informáticas. En la Administración no somos ajenos a esa tendencia y la mayoría de aplicaciones que desarrollamos, ya sean sedes electrónicas o aplicaciones de uso exclusivamente interno, son aplicaciones web.

Una parte fundamental en el desarrollo de una aplicación web es el diseño de su interfaz de usuario, es decir, aquella parte de la aplicación que interactúa con el usuario directamente. No importa lo buena que sea la arquitectura de una aplicación o lo bien que esté programada si su interfaz de usuario no es usable y no responde a lo que el usuario demanda de ella.

Mientras que en el sector privado se cuida mucho el diseño de la interfaz de usuario de las aplicaciones web, en el sector público la tendencia no es tan clara. En el caso de las sedes electrónicas, se ha hecho un mayor esfuerzo en el desarrollo de interfaces agradables y, en aún pocos casos, adaptables al dispositivo desde el que se visualizan pero, ¿es esto usabilidad?

Hay mucha confusión con respecto a lo que significa usable. Mucha gente lo asocia a nuevas tecnologías como CSS3, HTML5 o jQuery ya que estas tecnologías son las que permiten implementar controles avanzados de visualización, como menús que se despliegan y repliegan, ventanas modales incrustadas en la ventana principal, etc.  Con el auge de los smartphones y de las tablets, actualmente decir usable también es decir responsive y adaptative, dos términos que tienen que ver con poder visualizar una interfaz de usuario desde diferentes dispositivos. Esta adaptación del contenido de una página al dispositivo desde el que se visualiza se consigue aplicando media-queries, tanto Javascript como CSS.

Sin embargo, más allá de aspectos puramente tecnológicos, la usabilidad de una aplicación es el grado de efectividad en la utilización que hace un usuario de una aplicación. La usabilidad está fuertemente condicionada por el diseño previo que se haga de la interfaz. Este diseño debe tener en cuenta no sólo la adaptación del contenido al dispositivo o la utilización de unas tecnologías u otras sino, por encima de todo, cómo representar la información de la forma que sea más intuitiva y productiva para el usuario. Esto, que parece trivial, no es una tarea nada sencilla. Tampoco es una tarea que pueda ser llevada a cabo por cualquier tipo de perfil, sino que requiere de gente especializada en el diseño de interfaces y en lo que ahora se denomina la “experiencia de usuario“.

Aunque parece que la tendencia está cambiando, es muy común ver equipos de desarrollo web en los que no existe ningún especialista en el diseño y la maquetación de los contenidos, sino que son los propios programadores los que implementan la interfaz. Aunque puede haber excepciones, los programadores no tienen el perfil adecuado para hacer este trabajo por lo que las interfaces que se desarrollan no son todo lo usables que deberían ser. ¿Por qué entonces se produce esta situación?

La respuesta en mi opinión tiene que ver con la errónea concepción que se tiene de la calidad del software en España, entendida siempre como un lujo. Seguro que habéis oído frases como “si haces tantas pruebas es que te sobra mucho tiempo” o “aquí no vendemos nada, ¿por qué deberíamos invertir en una buena interfaz?”. La respuesta es sencilla, por ahorrar dinero. En una empresa esto es muy importante. En la Administración es más importante aún. Un sistema de integración continua, una buena batería de pruebas unitarias, una planificación o un buen código ahorra tiempo y dinero en el mantenimiento de la aplicación e incluso evitando errores en el mantenimiento de ciertos datos, por ejemplo, tributarios. De la misma forma, una buena interfaz de usuario en una aplicación de uso interno hace que nuestros usuarios trabajen mejor, más rápido, más eficientemente y sin errores. En una sede electrónica, nos acerca al ciudadano más y mejor.

Una buena configuración del desarrollo corporativo de una organización es la existencia de un departamento común de diseño. Este departamento deberá estar a la última en aspectos de usabilidad y deberá implantar las mismas líneas de diseño en todas las aplicaciones corporativas, de forma que el usuario de las aplicaciones tenga una misma experiencia de usuario en todas ellas. Una forma sencilla de hacer esto es utilizar plantillas de diseño. Estas plantillas son diseñadas por expertos y son fácilmente adaptables a las aplicaciones. Además, hacen uso de las últimas tecnologías en materia de interfaces de usuario (jQuery, CSS3, HTML5, Enquire.js) y se actualizan cada poco tiempo. En una entrada posterior os comentaré como hemos implantado nosotros una plantilla basada en Bootstrap.