Designing Software Architecture: Attribute Driven Design (ADD)
Published: 2023-01-13 18:42:02

![Pattern ADD](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4acpcunq6a9yon2okt34.jpeg)

The origin of **Attribute Driven Design (ADD)** can be traced back to the 1990s, when it was developed by the Software Engineering Institute (SEI) at Carnegie Mellon University. It was created as an approach to software design that focuses on identifying and modeling attributes (characteristics) of a system that are important to its users and stakeholders, with the goal of creating systems that are highly adaptable, easy to maintain, and scalable. , and that meet the needs of users and stakeholders.

**Attribute Driven Design (ADD)** was originally developed for mission critical software applications such as air traffic control systems and energy management systems, but has been used in a variety of other types of software designs. since then. It has been widely used and researched in aerospace, military and defense, but also has applications in other sectors including transportation, healthcare, finance and information technology.

Before starting the architecture sketch, quality attributes should be evaluated such as: system scope, internal/external interfaces, design objective, functional requirements, quality scenarios, constraints and concerns.

Below are the steps of **Attribute Driven Design (ADD)** and the way they are iterated.

![Modelagem](https://cacoo.com/diagrams/3Tw0ugBSR7BMUWkl-3F1B8.png)

**Step 1: Review Entries**

Before starting a first step implementation, the design purpose steps, functional requirements, quality attribute scenarios, constraints and previous concerns should be analyzed to ensure the iterability of steps 2 to 7.

**Step 2: Filter element to system**

In this step, you choose which element of the system will be the focus of the project for the iteration of subsequent steps.

**Step 3: Choose one or more elements for refinement.**

In this step we analyze the chosen element to decompose and list the priorities of stakeholder requirements that affect the element. They can place as High, Medium or Low priority of each enumerated requirement.

**Step 4: Choose one or more design concepts.**

In this step, we need to choose our design concept, which means choosing the main types of elements and their relationships.

You can identify concerns associated with your design and the architectural components that tend to address the issue.

**Step 5: List of architecture elements.**

In this step, you have several types of software elements chosen in the previous step. These elements are assigned responsibilities according to their type.
The responsibility of the enumerated elements is derived by each functional requirement associated with it.

**Step 6: Sketch preview.**

In this step, the required services and properties provided for each element are called the interface and not simply a list of operating components. Interfaces can include any of the following:

- syntax of operations (e.g. signature)
- semantics of operations (e.g. description, pre- and post-conditions, constraints)
- information exchanged (e.g. flagged events, global data)
- quality attribute requirements of individual elements or operations
- Error handling.

**Step 7: Performance analysis**

In this step, the work that was carried out in the previous steps will be analyzed in order to avoid rework. In this step, the architect can go back to step 2 and start all over again if something goes out of context. If everything goes as expected, the next step is to provide a new element for a new iteration so that step 1 starts.

The **Attribute Driven Design (ADD)** model has several advantages, which are:

- Focus on the user: The ADD focuses on identifying and modeling the attributes that are important to users and stakeholders, ensuring that the system meets their needs and expectations.

- Flexible architecture: By modeling system attributes, ADD allows for a flexible and adaptable architecture that can be easily modified and scaled as system needs change.

- Easy maintenance: Because ADD focuses on important and relevant attributes, systems designed with this approach tend to be easier to maintain and scale.

- Effective communication: ADD helps create effective communication between developers, users and stakeholders, making it easier to align expectations and ensure that the system meets the needs of everyone involved.

- Cost reduction: By designing systems with flexible architecture, easy to maintain and scale, ADD can help reduce maintenance and development costs in the long term.

**Attribute Driven Design (ADD)** can be used in a variety of software projects, including:

- Mission Critical Systems: ADD was originally developed for mission critical software applications such as air traffic control systems and energy management systems.

- Embedded systems: ADD is a popular approach to the design of embedded systems, such as mobile devices, industrial automation systems and autonomous vehicles.

- Data Management Systems: ADD can be used to design data management systems such as distributed databases, storage management systems and big data management systems.

- Security systems: ADD can be used to design security systems such as intrusion detection systems, access management systems and data protection systems.

- Real-time systems: ADD is a popular approach to the design of real-time systems, such as process control systems, traffic management systems, and operations management systems.

- Distributed systems: ADD can be used to design distributed systems such as cloud management systems, edge management systems and Internet of Things (IoT) systems.

- In addition, ADD can be applied to other types of software projects, depending on the need.


**Conclusion**

ADD can be applied to a variety of software projects, including mission-critical, embedded, data management, security, real-time, and distributed systems. It is a useful approach to software design because it allows developers to create systems that are highly adaptable, easy to maintain, and scalable, and that meet the needs of users and stakeholders.

Hope this helps, until next time.