Desarrollar software es y seguirá siendo una tarea intrínsecamente compleja. Entregar software con un nivel de calidad aceptable, en presupuesto y a tiempo requiere de una constante coordinación entre las diferentes actividades que realizan los integrantes de un equipo de desarrollo. La complejidad inherente a la administración de los proyectos se incrementa aún más cuando las organizaciones deciden basarse en modelos de desarrollo distribuidos o externos como el desarrollo offshore o el outsourcing. Como resultado de todo esto, la cancelación de proyectos, los atrasos, los presupuestos desbordados y la baja calidad de los entregables se han transformado en el común denominador de todas las organizaciones.

El camino hacia un Proceso de Desarrollo de Software Predictivo y Efectivo

Si queremos cumplir con la vieja promesa de satisfacer las necesidades del negocio, mejorar se hace impostergable. Instaurar un proceso de desarrollo de software que sea predictivo y a la vez efectivo debe transformarse en una de las máximas prioridades de cualquier departamento de tecnología. Para alcanzar este objetivo, deberíamos concentrarnos en ciertos aspectos que representan la base para comenzar a mejorar nuestro proceso de desarrollo actual:

-          La multiplicidad de roles

-          Un marco metodológico adecuado

-          Plataforma de desarrollo colaborativa

La multiplicidad de roles

Tenemos que asumir que aquella época en la que todo lo resolvía un programador en solitario ya es parte del pasado. Hoy día, la multiplicidad de roles y los niveles de especialización dentro de cada rol son fundamentales. Dentro de un equipo de desarrollo deben existir múltiples roles como ser Arquitecto, Jefe de Proyecto, Designer, Programador, Ensamblador, Tester, etc. Cada rol debe tener un conjunto de responsabilidades asignadas, independientemente de que un individuo asuma más de un rol. La interacción entre roles debe estar regulada por procesos que aseguren el cumplimiento de las responsabilidades individuales y comunes del equipo. El nivel de formalidad de cada proceso dependerá del marco metodológico adoptado, por ejemplo, las metodologías ágiles se basan principalmente en procesos informales basados en la comunicación oral entre los diferentes integrantes del equipo. Finalmente, nuestro proceso de desarrollo debe contemplar que cada uno de estos roles cuente con las herramientas adecuadas para poder desempeñar de la mejor manera posible las tareas asignadas a cada rol.

 

Un marco metodológico adecuado

Las metodologías de desarrollo de software definen las prácticas o disciplinas que aplicamos diariamente en nuestro trabajo como ser Project Management, Análisis, Diseño, Especificaciones, Testing, Aseguramiento de la calidad, etc. Actualmente, existen en la industria 2 tendencias vinculadas a este tema, las metodologías formales y las metodologías ágiles. Dentro de las metodologías formales encontramos Waterfall, Microsoft Solutions Framework for CCMI, Open Unified Process, etc. Bajo el marco de las metodologías ágiles tenemos Extreme Programming, SCRUM, Agile Modeling, etc. Mal o bien, todos trabajamos bajo algún tipo de marco metodológico. La clave en relación a este punto radica en adoptar y personalizar la metodología que más se adecue a las necesidades y características de mi empresa para posteriormente integrar las prácticas y disciplinas definidas por dicha metodología dentro de las actividades y herramientas que utilizamos día a día.

 

Plataforma de desarrollo colaborativa

Como mencionaba anteriormente, nuestro proceso de desarrollo debe contemplar que cada uno de los integrantes del equipo cuente con las herramientas adecuadas para desempeñar el o los roles asignados. Los desarrolladores necesitan utilizar un repositorio común de fuentes, integrar capacidades de testing unitario y vincular los trabajos realizados a las tareas asignadas. El Project Manager necesita administrar los requerimientos del proyecto, publicar la documentación, acceder fácilmente a dicha documentación y obtener automáticamente las métricas de avance generales del proyecto. El arquitecto debe poder definir y documentar visualmente la arquitectura de la aplicación. El Tester necesita integrar y automatizar las pruebas funcionales y las pruebas de carga del proyecto. La persona encargada de la integración y del ensamblaje del proyecto necesita automatizar las tareas de building para que se ejecuten en horarios donde el equipo no se encuentra trabajando. Los sponsors del proyecto necesitan acceder a los reportes de avance y a la información estadística que respalda el estado de salud actual del proyecto. Todos los integrantes del grupo necesitan compartir una infraestructura común para la asignación y el cumplimiento de tareas. Adicionalmente, todas las actividades realizadas y los entregables generados deben estar vinculados al marco metodológico definido. La metodología debe transformase en un elemento activo que ayude a regular el desempeño y el cumplimiento de las actividades realizadas durante todo el ciclo de vida del proyecto.

 

Microsoft Visual Studio Team System

Visual Studio Team System (VSTS) es la plataforma de desarrollo integral y colaborativa impulsada por Microsoft. VSTS ofrece un conjunto completo de herramientas especializadas para cada uno de los roles del equipo. Uno de los componentes principales de dicha plataforma es el nuevo servidor de desarrollo denominado Team Foundation Server (TFS). TFS ofrece todos los servicios requeridos para la implementación de un escenario de desarrollo colaborativo entre los que se destacan el repositorio centralizado y seguro de fuentes, la asignación de tareas y responsabilidades basadas en ítems de trabajo (Work Items), la generación y actualización automática del portal del proyecto y la creación de un Data Warehouse estadístico actualizado en forma automática en base a las actividades realizadas por el grupo. TFS combina todos estos servicios con el marco metodológico utilizado para cada proyecto. Ofrece templates para metodologías ágiles y para metodologías formales y la capacidad de personalizar dichos templates para adaptarlos a los requerimientos específicos de cada organización. 

 

Conclusiones

Instaurar un proceso de desarrollo de software que sea predictivo y efectivo debe transformarse en una de las máximas prioridades de cualquier departamento de tecnología. Desde Microsoft seguiremos trabajando en la evolución de Visual Studio Team System como una plataforma de Application Lifecycle Management (ALM) integral y extensible.