The traditional software process was conceived based on the simplifying assumption that the goal of development is to create a single, fixed solution to a well-defined problem. This is not the situation that confronts most software developments: real problems are poorly understood and constantly changing. Complicating this further, many people have similar problems to be solved. The traditional approach is either to have someone (often different people) solve each of these problems separately or to have someone create a single solution to all of these problems, either simplifying them into a single problem or complicating the solution for everyone by accommodating some of the differences as installation or usage choices. DsE is a reconception of the software process based on a more accurate view of the true nature of development.
The figures below progressively introduce the elements of a DsE process, down to the level of familiar activities. The DsE course fully defines the concepts and activities of DsE as a comprehensive engineering and manufacturing process. For greater detail, the RSP Guidebook presents (as of 1993) a uniform description of two of the specialized forms that a DsE process can take. For best fit to an organization's preferred practices, the PIr method provides guidance on defining a fully tailored DsE process.
- DsE context illustrates that, following DsE, the business of a successful software development organization is to build not individual products but sets of similar, changeable products.
- DsE process shows the nature of DsE as a dual-phased iterative process, distinguishing application engineering (the building of customer-specific products) from domain engineering (the creation of an infrastructure that standardizes and streamlines application engineering).
- DsE Application Engineering (augmented) process illustrates how a conventional approach to product building can be augmented for modest gains in productivity and quality while limiting organizational impacts.
- DsE Application Engineering (streamlined) process illustrates the form of a radically streamlined approach to product building, including a detailed formulation of distinct application modeling and application production activities.
- DsE Domain Engineering process defines the activities of domain engineering that are detailed in the DsE course and RSP Guidebook.
The traditional software process starts with a defined problem and creates a single solution to it. DsE starts with an organization's defined business objectives for a market and creates the framework for delivering customized solutions to any of a set of similar problems. Process adoption identifies those market-based objectives, in terms of targeted customers and the types of problems to be solved, and determines how DsE should be applied to achieve those objectives.
Application Engineering is the process by which a software development project builds a customized product to meet the needs of a particular customer.
Domain Engineering is the process for creating reusable assets and a supporting infrastructure that enables Application Engineering projects to be performed more effectively: faster, at lower cost, and with better quality.
The easiest Application Engineering process for an organization to adopt is one that closely resembles its existing software development process. Differences can be limited, for example, to the way in which individual work products are developed, with parts of some of these being created with reusable assets. This type of process, which is most suitable for sales-driven businesses, provides modest productivity improvements while requiring only modest efforts to institute.
Any engineering process can be adapted to a domain-specific context and provide benefits over that process used for a single product at a time. However, the DsE approach provides opportunities for much greater leverage through streamlining of the process. While an improved process can be introduced incrementally over several years for lower risk, many organizations opt for more rapid change so they can better respond to their customers' needs and gain a competitive advantage in their market. Adopting this type of process requires a substantial organizational commitment and effort but produces much greater productivity improvements for market-driven businesses.
Domain Engineering is organized into 5 activities:
- Domain Management is responsible for setting domain objectives and planning and managing the activities of domain engineering to achieve those objectives.
- Domain Definition is responsible for characterizing a product family with associated terminology and assumptions of commonality and variability and formalizing the variabilities into a decision model.
- Product Family Engineering is responsible for constructing a product family corresponding to the domain definition (e.g., defining requirements, design, implementation, tests, and documentation that is mechanically adaptable to the variabilities as expressed in the decision model).
- Process Engineering is responsible for defining an application engineering process for the domain and for producing a supporting infrastructure of tools and documentation. The decision model specifies the information that application engineers must provide to specify the application model that is applied to the product family to produce a customized product.
- Project Support is responsible for verifying and validating the domain as a framework for application engineering and providing support to application engineering projects in its effective use.