Island of Automation, Thoughts on Modern Software Factories (2)
Thoughts on Modern Software Factories (1)
Before we start thinking about bottlenecks, measurable productivity and predictability in a Software Production Line, I want to elaborate more on Software Factories. A typical Software Factory consists out of one or more specific product lines. The focus in crafting software solutions is competitiveness, and the emphasis is on integration of specific domain knowledge, solution architectures, tools and other reusable assets of the future.

The picture above displays islands of automation where each technology solves a specific problem in the process of developing software solutions. Thus for example, code generators that where developed to take the output (e.g. the UML model of a component) from a UML modeling tool and generate artifacts directly from it. Interfacing islands of automation which have been designed in isolation will always be problematic (Microsoft here uses the term viewpoint for the technical solution). A viewpoint is not always based on a DSL because software factories can use code, sql and a variety of other formants and tools to describe a domain in addition to or instead of models. Relating viewpoints in MDA is done by transformation whereas Microsoft does this by nesting viewpoints and by a variety of operations such as trace, validation, analysis, refactoring, weaving or optimization. I agree with Jack Greenfield that it sometimes makes more sense to edit two viewpoints independently for example and to use a validation tool to make them mutually consistent (see Differences between DSL and MDA). Software Factories blend modeling with other software development practices by schema, template and an extensible development environment. The Software Factory methodology integrates model-driven development, component-based development and agile development practices, including the use of patterns and patterns languages with models, frameworks and tools.
Harry Pierson’s Architecture podcast