The matrix shows inputs and outputs. The checkboxes in the matrix are used indicate which inputs and outputs are related. This matrix is used to generate a design decomposition. Some notes:

- As you work with this matrix, you may want to add or remove either inputs or outputs. There are options for doing this below the matrix.
- Use descriptive labels for the inputs and outputs. This will make it easier for you to understand the resulting decomposition. If you are concerned about disclosing relevant information about your design with these descriptive labels, be assured that this information is only stored on your computer in cookies along with the matrix. Descriptive names are never sent to our server. At some point, if you wish to delete the cookies that store the labels and matrix, click here.
- Since design is an iterative process, you may want to work on a given Decomposition Matrix over time. To support this, the labels and matrix are retained in cookies on your machine. This way you won't need to re-enter the matrix information. Note that only the most recent matrix is saved.
- You have the option of displaying the results of the decomposition as either a business process or data flow diagrams. If you are primarily interested in the sequencing of tasks, use business processes. If the flow of data is most important, use data flow diagrams.

## Using the Decomposition Matrix

There are two challenges to using the Decomposition Matrix:

- Determining the correct inputs and outputs.
- Determining which inputs and outputs are related.

In order to best meet these challenges, you need to have the right people involved in the process. All too often, we designers think we understand how a system should work and, as a result, design with incomplete requirements. The matrix provides you a way to get all the people with domain knowledge involved in the design without requiring them to understand the notation we designers often use.

### Determining the Correct Inputs and Outputs

Usually, determining the correct inputs and outputs first requires determining the boundaries of design context of the system or sub-system. In other words, you need to determine what is inside the system and what is outside the system. The inputs and outputs are connections between the system and what is outside the system. These inputs and outputs could be data, events, messages, or whatever else might apply to your system. Nevertheless, getting everyone to agree on what are the boundaries of a system is often not easy. Also see the discussion design context in the Blog.

For the purposes of the Decomposition Matrix, inputs and outputs should be the substantive flow for the event, message, etc. Do not include what might be considered a "call" as an output if it is just a request for a response. On the other hand, if an output contains data for some other system and that other system might then respond with other data, then both output and input should be included in the Decomposition Matrix.

For more on this topic, see the decomposition example in the Blog and the entry for Design Decomposition Discussion in the Matrix Guide on this site.

### Determining which Inputs and Outputs are Related

Once you have inputs and outputs established, the next step is to determine which inputs and outputs are related. This also is not necessarily easy and should involve all the people with domain knowledge. When working with the matrix, it sometimes helps to turn these relationships into sentences.

For a business process diagram:

To determine if a given input and output are related, read across a row and say for each column and ask if a given

input nameoccurs before or concurrently with a givenoutput name. Similarly, you could read down a column and ask the same question for each row: that a giveninput nameis occurs before or concurrently with a givenoutput name. For more on this topic, see the decomposition example in the Blog and the entry for the Getting Started with the Decomposition Matrix in the Matrix Guide on this site.

For a data flow diagram:

To determine if a given input and output are related, read across a row and say for each column and ask if a given

input nameis used directly or indirectly for a givenoutput name. Similarly, you could read down a column and ask the same question for each row: that a giveninput nameis used directly or indirectly for a givenoutput name. For more on this topic, see the decomposition example in the Blog and the entry for the Getting Started with the Decomposition Matrix in the Matrix Guide on this site.