Various types of Product Architecture

Product architecture is the high-level definition of product structure. Product architecture defines the high-level modules which are used to construct product trees. Product architecture also defines dependency relationships between different components of the product tree.

Product Line Architecture (PLA) is a subtype of product architecture that is mainly focused on defining core commonalities across different products in a certain category.

The scope of PLA usually covers few interface layers and very few functional layers above those interfaces. All other parts are identical for each specific subcategory within the same product line family.

Product Suite Architecture (PSA) is another sub – types of product architecture that defines core generic functionalities required by all products under a certain business domain or technology domain.

These generic functionalities are implemented in a generic way, with looser coupling to specific products, where only a few details are tailored towards the particular product being developed.

Various types of product architecture are:

1. Product Line Product Architecture (PLPA)

2. Product Family Product Architecture (PFPA)

3. Product Suite Product Architecture (PSA)

4. Common Component Product Architecture (CCPA)

Product line product architecture defines a family of products that share a common feature set and are built from the same core technology platform, but which differ from one another in their specific usage scenario and select features.

The key attribute for this category is that all products within a product line have a much larger number of functional layers above those interfaces than any other type of product architecture.

Certain important characteristics of PLA are

The primary objective of Product Line Architecture is to identify commonalities between different products under a certain category so that these commonalities can be made available across all products in that family with minimal development effort for each specific product.

Hence, effectively identifying and separating core similarities from customization points reduces the long-run cost of customization in any new product developed later in time for that family.

Thus, investing early in initiatives to design Product Line Architecture yields benefits over the lifetime of the family by minimizing costs associated with developing enhancements or customizations to existing products or developing entirely new products.

Product Line Architecture can also reduce the cost of maintaining multiple product lines by avoiding the repetition of work effort across product lines, while at the same time allowing different teams to work independently on their specific product line(s).

Product Line is a key element in any organization’s portfolio product management process and it has been widely considered an effective means for achieving economies of scale and that there is a strong and direct relationship between investment in and benefits from a product line that strengthens over time.

A range of benefits has been reported when using a product line approach including understandability, code reuse/reusability, quality improvement, time to market advantages, and the possibility of sharing risks and costs across products or groups of product lines.

One of the most critical aspects in product line engineering is commonality and variability management which has been claimed as one of the major activities in a Product Line organization, where all artifacts used for developing product lines are stored including Domain Analysis models, Context diagrams, Component-based Architectures, Feature Models, Feature Trees, etc.

However, there is no standardized way on how to model/represent these elements in order to represent them more effectively across different views while allowing adaptability for future changes.

There is also a lack of support in the existing methodologies and tools for Product Line Variability Management, which requires modeling these elements so as to allow flexibility and adaptability to changes.

Thus it would be beneficial to model such artifacts as product line resources which will aid in offering standardization across dimensions allowing easy integration within product lines, providing ease of use through re-use and allowing easy extension through variability mechanisms.

Due to its nature, Product-line engineering aims at developing a family of similar products with commonalities and variabilities (i.e., variation points) where each member of this family is an individual product having both commonalities and variabilities inherited from its supertype/parent product.

Product-line engineering is a systematic way to develop a family of products that share common features and meet the specific needs of different customers or markets, within a fixed cost and schedule. In this context, product lines are built around a set of core assets (features) which represent an essential part of each member’s functionality.

To accommodate the business objectives, these core assets need to be extended with other features which might require specific conformance measures as defined by either the stakeholders or other requirements. These additional features can either enhance existing functionalities provided by the core assets or provide new ones.

In contrast to variability mechanisms in object-oriented programming languages such as inheritance, subtyping, and dynamic dispatch, variabilities in runtimes are not directly supported by the programming language constructs.

Run-time variability comes into play when a certain class of managed components is created. These managed components exist somewhere in the software product line and provide the base functionality to build additional features upon.

They are called product line archetypes. The archetypes can either be implemented as concrete classes or abstract classes which are realized via inheritance, subtyping, or dynamic dispatch mechanisms provided by the programming language at hand, e.g., C++ templates, Java generics, or .Net delegates.