Domain engineering

It is a key concept in systematic software reuse and product line engineering.

They repeatedly build similar systems within a given domain with variations to meet different customer needs.

This information is captured in models that are used in the domain implementation phase to create artifacts such as reusable components, a domain-specific language, or application generators that can be used to build new systems in the domain.

By developing reusable artifacts, components can be reused in new software systems at low cost and high quality.

[7] This produces not only a set of software implementation components relevant to the domain, but also reusable and configurable requirements and designs.

To effectively apply domain engineering, reuse must be considered in the earlier phases of the software development life cycle.

[11][15] However, unlike requirements engineering, domain analysis does not solely consist of collection and formalization of information; a creative component exists as well.

[19] In the same way that application engineering uses the functional and non-functional requirements to produce a design, the domain design phase of domain engineering takes the configurable requirements developed during the domain analysis phase and produces a configurable, standardized solution for the family of systems.

The architecture should be sufficiently flexible to satisfy all of the systems within the domain while rigid enough to provide a solid framework upon which to base the solution.

Domain engineering has been criticized for focusing too much on "engineering-for-reuse" or "engineering-with-reuse" of generic software features rather than concentrating on "engineering-for-use" such that an individual's world-view, language, or context is integrated into the design of software.

Domain engineering as compared to application engineering. The outputs of each phase of domain engineering feed into both subsequent phases of domain engineering as well as corresponding phases in application engineering.