Domain engineering is the act of creating new computer software using bits and pieces of existing programs and what one knows about them. An important part of domain engineering is discovering how different software artifacts and domains are similar to a particular customer’s needs, so they can be properly pulled and used. While this means a customer’s software is just a variant on another system, there are unique parts to the software that are written in by the creators. The advantages of this include faster production time and fewer errors.
Unique programs are created on a daily basis but, in essence, many of them use the same coding for certain sections. Instead of writing an entirely new program that may use the same or similar coding, domain engineering reuses some sections in new programs. These typically are generic parts that can be easily recycled without any legal problems, because they are parts that can be found in most other programs. The parts can come from one program or many, depending on a customer's needs.
In domain engineering, software creators do not copy any part of the software to see if it works; they instead must be able to analyze the different programs. For example, if a customer wants a certain feature, the creators must analyze programs they have made to see if there are any with similar features. Without analysis, there is no guarantee that the copied code will work correctly.
This process may make it seem that domain engineering is just a template-based system in which software creators copy some code and call it a new program, but this is not true. The entire domain engineering process is rather intensive and goes beyond just finding similar parts. After the similar parts are found, they normally have to be customized for a customer’s needs, and the creators often build new code to satisfy other needs of the customer that aren't covered by the copied code.
Several advantages can be attributed to domain engineering. The program is not entirely made from scratch, so it should take less time to develop. This means the customer can use or sell the program faster, which often is desired. The copied coding used in domain engineering usually is tested beforehand to make sure it works, so this tends to result in fewer tests, which also decreases development time. The code has already been shown to work, so this often results in fewer software errors.