Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools

Increasingly complex and rapidly changing requirements and technologies are pushing the limits of the current approach to application development. Because of these trends, stakeholders are increasingly turning to software product line practices to reduce risk, cost, and time to market while improving product quality through systematic reuse. Adopting organizations are starting to demand the kind of tool support available in Rapid Application Development (RAD) environments for software product lines. This talk describes a methodology developed at Microsoft called Software Factories. The goal of the methodology is to enable automation of life-cycle tasks in software product line contexts by integrating innovations in model-driven development (MDD), component-based development (CBD), and agile development methods. Software Factories is based on a four-part pattern for building patterns, models, frameworks, and tools for specific domains, such as user interface construction or database design. The key to the methodology is reducing the cost of implementing the pattern, making it cost-effective for narrower and more specialized domains, such as B2C application development and business process automation. The central concept is the software schema—a network of viewpoints describing the artifacts that constitute the members of a family of software products and identifying the patterns, languages, frameworks, tools, processes, and other assets used to build those artifacts. Mappings between viewpoints support artifact transformation and provide constraints on the development process that enable a scalable approach to agile development. By automating many aspects of the product development process, the Software Factories methodology provides a basis for industrializing software development and promotes the formation of software supply chains, paving the way for software mass customization.