Domain-specific Engineering

Key Concepts

Domain formalization
Requirements and design standardization
Component-based reuse
Reengineering for reuse
Process streamlining

Domain Formalization

Historically, the key to engineering discipline has been the standardization of problem and solution expertise within well-defined domains. For software/systems, this standardization takes the form of a product family. A domain is a product family augmented with a process and tools for the derivation of instance products. Domain-specific Engineering focuses an organization's existing expertise on the needs of a domain and the corresponding market, enabling their creation of high quality, low cost, easily changed systems.

Requirements and Design Standardization

The greatest challenge facing software/system developers is understanding their customers' requirements properly. A significant cause of this is the informal, non-standardized expression of requirements that is normally used. Within the context of a product family, both the form and content of requirements specifications can be standardized to greatly reduce misunderstandings, errors, and omissions. Standardizing requirements in an adaptable form reduces the costs of analysis and specification, improves the accuracy of development cost estimates, and aids the educating of new employees.

Component-based Reuse

DsE builds on a unique approach to the representation of reusable components, as Adaptable Components. This approach applies not only to software code but also to specifications, user and support documentation, planning documents, test support, and other artifacts of the software/system development process. This approach solves the key obstacle to component-level reuse: the inevitable need to tailor a component before it can be reused. Probable tailoring is often known to a component's developer. By giving developers the ability to create a family of similar components, the rapid generation of tailored components for integration with other generated or handcrafted components becomes possible. Adaptable components can be used to populate an economical reuse library or as elements of an architecture-based approach to reuse.

Reengineering for Reuse

Successful software organizations have extensive expertise and a substantial legacy of previously developed software. Both of these represent an investment that ought to provide leverage in future software development efforts. This leverage is missed if the software process does not provide an expertise- and legacy-based framework within which developers prefer to work. DsE promotes a reuse-driven approach to reengineering in which similar legacy software fragments are identified and reverse engineered to create adaptable components for use in future systems.

Process Streamlining

Domain-specific Engineering is most easily justified if it results in significant improvements in the productivity of the product development process. This is possible only if the process can be streamlined to eliminate a significant portion of the existing effort and to simplify the remainder. The DsE focus on a product family permits this streamlining, reorienting all creative effort to the specification and validation of the set of deferred decisions that characterize the particular family and the associated Adaptable Components that are instantiated and combined given specific decisions to create a customized product.