Domain Engineering

Program-Transformation.Org: The Program Transformation Wiki
Domain Engineering involves creating a set of reusable assets for building systems in a particular problem domain. These reusable assets are then assembled to customer-specific systems in the complementary application engineering phase.

Domain engineering originates from research in SoftwareReuse. The activities of domain engineering play a role in the design of

Chapters 2-5 of GenerativeProgrammingBook cover domain engineering in considerable detail. They define it as the activity of

  • collecting, organizing and storing past experience in building systems or parts of system in a particular domain in the form of reusable assets (i.e., reusable work products),
  • as well as providing an adequate means for reusing these assets (i.e., retrieval, qualification, dissemination, adaptation, assembly, and so on) when building new systems.

They consider the notion of a FeatureModel, resulting from the DomainAnalysis phase, the most important contribution of domain engineering.

An earlier version of the generative programming survey on domain engineering is available from KrzysztofCzarnecki's home page.

Observe the emphasis in the above definition on past experience, making ReverseEngineering an important element of DomainEngineering. -- ArieVanDeursen.

The SEI describes domain engineering as

  • a process for creating a competence in application engineering for a family of similar systems. Domain engineering covers all the activities for building software core assets. These activities include identifying one or more domains, capturing the variation within a domain (DomainAnalysis), constructing an adaptable design (DomainDesign), and defining the mechanisms for translating requirements into systems created from reusable components (Domain Implementation). The products (or software assets) of these activities are domain model(s), design model(s), DomainSpecificLanguages, code generators, and code components.


There is an on line bibliography of domain engineering resources at

Several domain engineering methodologies have been published. See, for example,

CategoryDomainEngineering | CategoryEntryPoint | CategoryArchitecture | Contributions by ArieVanDeursen