El Bruno

Blog dedicado a las experiencias del desarrollo con tecnologías Microsoft.
Software Factories: donde, cuando y como

Buenas,

una pregunta que usualmente muchas personas se hacen cuando comienzan un nuevo proyecto de desarrollo, suele estar relacionada con la utilización/creación de Factorias de Software.

No conozco a casi ningún desarrollador que no aproveche alguna de las factorías existentes, pero creo que antes de embarcarnos en la 2da opción (creación de una SF) debemos tener varios aspectos en cuenta. En este post no hablaré sobre la teoría que subyace las Software Factories, sino que comentaré mi experiencia personal trabajando en un proyecto para la creación de las mismas.

Comencemos por la definición de una Software Factory:

“A software factory is a structured collection of related software assets. When a software factory is installed
in a development environment, it helps architects and developers predictably and efficiently create high-quality instances of specific types of applications.”

Microsoft Patterns and Practices

In software engineering and enterprise software architecture, a software factory is defined as a software organization structured such that software projects are built in discrete work centers. Work centers generally represent, or specialize in, certain software disciplines such as architecture, design, construction, integration, test, maintenance, packaging, release, etc. Much like a true manufacturing facility, software factories require clearly defined product creation and management processes. By utilizing the fundamentals of industrial manufacturing - standardized components, specialized skill sets, parallel processes, and a predictable and scalable consistency of quality – a true Software Factory can achieve a superior level of application assembly even when assembling new or horizontal solutions. Industrialization of the software process can provide benefits in terms of economies of scale, geographic distribution, load leveling, and rigorous product and process control. Software factories have gained recent popularity as a cost-efficient way to reduce the time it takes to develop, create and/or construct software solutions.

Wikipedia

En otras palabras, y enfocándonos desde el punto de vista de un developer; podemos describir a una Software Factory como una o más herramientas que automarizan la creación de artefactos para resolver un problema de un dominio específico. Por lo general, las Software Factory generan código, pero también pueden generar documentacion, scripts, guidelines, etc.

El proceso de desarrollo de una Software Factory, es un proceso complicado y que difiere mucho al proceso clásico de creación de una pieza de software. Por ejemplo; en Avanade estamos distribuidos globalmente, y el número de empleados crece año a año. Como la mayoría de los proyectos son desarrollos basados en tecnologías Microsoft; existe un área de I+D en Seattle que se dedica a la creación de Assets/Activos para que los demás equipos en el mundo seamos más productivos y tal vez más eficientes. Desde mi punto de vista de usuario/developer de estos activos, pienso que algunos son muy poco aplicables pero también estoy muy contento con otros (Aca.Net/Enterprise Library es un buen ejemplo).

 

Dónde

Este tipo de apuestas por parte de una empresa, supone el primer filtro para decidir quienes van a apostar por la construcción de una Software Factory. La misma supone un coste adicional para una empresa. Entre otras cosas, porque los resultados de la aplicación de la misma no son visibles inmediatamente.

Es necesario ser concientes que la creación de una Software Factory como proyecto tiene las siguientes características:

  • Suele ser mas largo que un proyecto común de desarrollo, generalmente 2 ó 3 veces más largos .  
  • El ROI sobre el mismo, se puede esperar después de la 5ta o 6ta implantación de la SF.
  • Identificar este tipo de proyectos, requiere una gran visión de negocios; ya que el resultado final del mismo deberá ser implementado en 5 o mas proyectos para ser rentables.
  • Además de la inversión para la creación de la Software Factories, es necesario tener en cuenta otra inversión posterior para la formación de los profesionales que utilicen los assets que involucra la Software Factories.

 

Cuando

Si trabajas como consultor, seguramente cada tanto pensarás en automatizar algún tipo de proceso repetitivo que realizas en diferentes proyectos. Sin embargo, una Software Factory es algo más que un asset que se pueda reutilizar en varios proyectos.

  • Para comenzar a construir una Software Factories necesitamos tener un alto conocimiento sobre el dominio específico de la aplicación sobre la que trabajará los assets de nuestra Software Factory.
  • Cuando sin llegar a ser una factoría completa, tengamos una serie de assets que nos ayudan en el proceso de desarrollo; y se presente la oportunidad para empaquetar los mismos, es un buen momento.
  • Cuando nuestro negocio requiera un tipo de implementación frecuente que puede ser automatizada de forma organizada.

 

Cómo

Si después de realizar una evaluación, finalmente nos decidimos por la construcción de una serie de herramientas que puedan conformar una Software Factory; este pequeño diagrama puede ilustrar una primera aproximación para ver como gestionar el ciclo de vida de la misma.

 

Como podemos ver a diferencia de un proceso estandar de desarrollo, una Software Factory comienza a madurar luego de generar un producto a partir de la misma. Un detalle muy importante es que por lo general, este tipo de proyectos son proyectos muy ágiles y dinámicos que constantemente están madurando y adaptándose a las nuevos cambios del dominio donde trabajan. Además siempre es conveniente que estén basados en una implementación de referencia sobre la que se basarán las diferentes implementaciones de una versión específica de la Software Factory.

 

Actualmente, Visual Studio 2005 posee muchos recursos para la construccion de este tipo de proyectos. Visual Studio Extensibility Developer Center es un punto de referencia imprescindible para comenzar a conocer como extender las herramientas que posee Visual Studio. Particularmente creo que un buen punto para comenzar es conocer:

Además un recurso imprescindible puede ser Visual Studio Extensibility Guided Tour.

 

 

Saludos @ La Finca y happy factoring

El Bruno

Published viernes, 28 de septiembre de 2007 21:01 by elbruno

Comments

No Comments