Features are additional services or optional add-ons to a basic system. They began to be studied in the 1990s when they arose in the telecommunications domain: at that time, major telephony providers were adding services like 'call forwarding' and 'ring back when free' to their basic telephone service. Features occur whenever organizations compete by differentiating their products from those of rival organizations. They also occur when products are upgraded. New software releases are typically described in terms of the features added (and the bugs fixed!) since the last release.
Unfortunately, adding one feature may break another, or interfere with it in an undesired way. This phenomenon is called feature interaction. 'Feature interference' would have been a better term, since interactions can be good as well as bad, but the term 'feature interaction' has stuck. This book is devoted to exploring ways in which the feature interaction problem may be mitigated. This may be done in several ways:
• by developing new methods for designing and producing software, which support the introduction of features in a safe and understood way;
• by developing tools and techniques for detecting feature interactions once features have been introduced, but before the software is released (this is called off-line detection);
• by developing methods for managing feature interactions when they occur in live systems (this is called on-line detection and resolution).