Jack Greenfield and Keith Short wrote an excellent book called, . They define a Software Factory as, A software product line that provides a production facility by configuring extensible tools using a software template based on a software schema.
Wow! I think we are going to need a few more definitions to understand what this means. A definition of software product line
is: A software product line is a set of software-intensive systems sharing a common, managed set of features that satisfy the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way.
A software schema
is a document that categorizes and summarizes the artifacts used to build and maintain a system such as XML documents, models, configuration files, build scripts, sources code files, SQL files, localization files, deployment manifests and test case definitions, in an orderly way, and that defines relationships between them, so that we can maintain consistency among them. A software factory schema essentially defines a recipe for building members of a software product family.
A software factory template includes code and metadata that can be loaded into extensible tools, like an IDE or an enterprise lifecycle tool suite, (author note: like BRIDGEWERX for example), to automate the development and maintenance of family members. We call it a software factory template because it configures the tools to produce a specific type of software.
While customizing a software factory schema customizes the description of the software factory for the family member, however, customizing a template customizes the assets used to build the family member.
I will say it again, wow! Jack and Keith are introducing patterns of industrialization to the software world. Kudos to them.
Lets look at what they are saying using a concrete example. I can produce a software factory schema that will define a generic eCommerce web application. Most people know what these are if you have ever purchased a book from Amazon or a product at Costco.com and oh and there it is. Both Amazon and Costco are eCommerce web sites, and share many attributes from a definition (i.e. software factory schema) perspective.
Now based upon the needs and wants of both Costco and Amazon, we can customize the software factory schema (think of it like a bill of materials) for both. For example, we define that for a transaction engine, Amazon is going to use a third-party component, but Costco is going to use their own source code for the transaction engine. All we are doing here is defining the recipe, or bill of materials, using a software factory schema, to determine what is going to be built.
The software factory template determines how the eCommerce web application is to be built as it configures the tools that build the solution. As mentioned in the previous paragraph, while both companies accept credit card transactions, what components they are using for the transaction are different from an implementation point of view.
No problem, it is a customization of the software factory template, based upon the customized software factory schema, as an instantiated input to the factory template that determines which transaction engine asset is to be (re)used. In the case of Amazon, the factory template instructs the tools to go grab that named component from source control and include it in the build process for Amazons eCommerce product line. In the case of Costco, the factory template provides the location of Costcos source code for their transaction engine, and using a specified script, gets latest version out of the code repository and inserts into the proper build order so when the solution is generated, we have the right transaction engine for Costcos eCommerce product line.