The Project Connections web site has a posting on RAMs. They call them Responsibility Allocation Matrix which is not quite true - given the general consensus of the industry. But hey it's their site, they can call it what they want.
They then proceed to confuse us a bit with the statement
RACI has it's place, but this Responsibility Allocation Matrix takes project responsibilities and commitments to a whole new level. Detailed and role-focused, it asks all project team members to consider their key project tasks, the inputs they need, and the outputs they expect to deliver, for a more complete look at the cross-functional dependencies in your plan.
What? RACI means Responsible, Accountable, Consulted and Informed. In RACI the individual assignments (R, A, C, I) can be easily be represented in Excel and plotted in a BIG VISIBLE CHART and hung on the wall.
Next comes the suggestion that the RAM be used during the planning phase. This is true. But the RAM is used during all phases of the project. The RAM can serve as a touch point for all project participants to confirm and re-confirm who is Accountable for what. It should be WBS focused and connected to the Master Schedule, so When the item they are accountable for is due can be shown in the same Big Visible Chart. Here's a picture of how the RAM works extracted and cleaned up from a US Army handbook on RACI. Notice a critical aspect here - defining the ACCOUNTABLE person is the first step. unless the accountable fields in the matrix are filled, the other fields aren't of much value. The next step is to assign the Responsible fields. From there you're pretty much done.
It Is Role Based, But That's Not The Starting Point
The posting suggests the RAM starts with the roles. This is not the place I would start. Instead I'd start with listing the deliverables of the project. These are the artifacts of the project the project's customer is interested in. The things the project's customer is willing to pay for. Get this defined and you've pretty much got the project scope defined - minus the annoying little things needs to make these appear that the project's customer probably isn't willing to pay for explicitly. Stuff like test environments, documentation, training, requirements gathering and the like. These are needed of course by they probably don't add value to the business process. They're just part of doing the project.
Now with those items in the rows of the RAM, figure out who is ACCOUNTABLE for making them appear. Emphasize "accountable." "The buck stops here" kind of accountability. One and only one person can be accountable. Multiple people can be responsible and certainly others can be informed and consulted.
Why All The Fuss?
Without the RAM there is only tacit agreement on who is accountable for what. With the RAM it is explicit. But don't make this too complex, and certainly you don't have to "pay" to get this information.
A Google search of "Responsibility Assignment Matrix" will get you all the RAMs you'll ever need.
And PCubed will even show you how to build one.
What the RAM does in the end is to connect the Organizational Breakdown Structure (OBS) with the Work Breakdown Structure (WBS). The absolutely critical thing though is to have the WBS represent Deliverables not the functions.
Focus on the Deliverables, these are things the project's customer wants.
Accessing Single Elements
To reference a particular element in a matrix, specify its row and column number using the following syntax, where is the matrix variable. Always specify the row first and column second:
For example, for a 4-by-4 magic square ,
you would access the element at row 4, column 2 with
For arrays with more than two dimensions, specify additional indices following the and indices. See the section on Multidimensional Arrays.
You can refer to the elements of a MATLAB® matrix with a single subscript, . MATLAB stores matrices and arrays not in the shape that they appear when displayed in the MATLAB Command Window, but as a single column of elements. This single column is composed of all of the columns from the matrix, each appended to the last.
is actually stored in memory as the sequence
The element at row 3, column 2 of matrix (value = ) can also be identified as element 6 in the actual storage sequence. To access this element, you have a choice of using the standard syntax, or you can use , which is referred to as linear indexing.
If you supply more subscripts, MATLAB calculates an index into the storage column based on the dimensions you assigned to the array. For example, assume a two-dimensional array like has size , where is the number of rows in the array and is the number of columns. If you supply two subscripts representing row-column indices, the offset is
Given the expression , MATLAB calculates the offset into 's storage column as , or . Counting down six elements in the column accesses the value .
Functions That Control Indexing Style
If you have row-column subscripts but want to use linear indexing instead, you can convert to the latter using the function. In the 3-by-3 matrix used in the previous section, changes a standard row-column index of (3,2) to a linear index of :
To get the row-column equivalent of a linear index, use the function:
Assigning to Elements Outside Array Bounds
When you assign to elements outside the bounds of a numeric array, MATLAB expands the array to include those elements and fills the missing values with .
Assign a value to an element outside the bounds of .
When you extend structure and cell arrays, MATLAB fills unaddressed elements with an empty value. MATLAB fills unaddressed elements in categorical arrays with . For datetime arrays, MATLAB fills unaddressed elements with NaT (Not-a-Time).
If you try to refer to elements outside an array on the right side of an assignment statement, MATLAB throws an error.
Accessing Multiple Elements
For the 4-by-4 matrix shown below, it is possible to compute the sum of the elements in the fourth column of by typing
You can reduce the size of this expression using the colon operator. Subscript expressions involving colons refer to portions of a matrix. The expression
refers to the elements in rows through of column of matrix . Using this notation, you can compute the sum of the fourth column of more succinctly:
To refer to nonconsecutive elements in a matrix, use the colon operator with a step value. The in this expression means to make the assignment to every third element in the matrix. Note that this example uses linear indexing:
MATLAB supports a type of array indexing that uses one array as the index into another array. You can base this type of indexing on either the values or the positions of elements in the indexing array.
Here is an example of value-based indexing where array indexes into elements , , , , and of array . In this case, the numericvalues of array designate the intended elements of :
If you index into a vector with another vector, the orientation of the indexed vector is honored for the output:
If you index into a vector with a nonvector, the shape of the indices is honored:
The end Keyword
MATLAB provides the keyword to designate the last element in a particular dimension of an array. This keyword can be useful in instances where your program does not know how many rows or columns there are in a matrix. You can replace the expression in the previous example with
The keyword has several meanings in MATLAB. It can be used as explained above, or to terminate a conditional block of code such as and blocks, or to terminate a nested function.
Specifying All Elements of a Row or Column
The colon by itself refers to all the elements in a row or column of a matrix. Using the following syntax, you can compute the sum of all elements in the second column of a 4-by-4 magic square :
By using the colon with linear indexing, you can refer to all elements in the entire matrix. This example displays all the elements of matrix , returning them in a column-wise order:
Using Logicals in Array Indexing
A logical array index designates the elements of an array based on their position in the indexing array, , not their value. In this masking type of operation, every element in the indexing array is treated as a positional index into the array being accessed.
In the following example, is a matrix of logical ones and zeros. The position of these elements in determines which elements of are designated by the expression :
The function can be useful with logical arrays as it returns the linear indices of nonzero elements in , and thus helps to interpret :
Logical Indexing – Example 1
This example creates logical array that satisfies the condition , and uses the positions of ones in to index into :
A simpler way to express this is
Logical Indexing – Example 2
The next example highlights the location of the prime numbers in a magic square using logical indexing to set the nonprimes to :
Logical Indexing with a Smaller Array
In most cases, the logical indexing array should have the same number of elements as the array being indexed into, but this is not a requirement. The indexing array may have smaller (but not larger) dimensions:
MATLAB treats the missing elements of the indexing array as if they were present and set to zero, as in array below:
Single-Colon Indexing with Different Array Types
When you index into a standard MATLAB array using a single colon, MATLAB returns a column vector (see variable , below). When you index into a structure or cell array using a single colon, you get a comma-separated list (see Access Data in a Structure Array and Access Data in Cell Array for more information.)
Create three types of arrays:
Use single-colon indexing on each:
Indexing on Assignment
When assigning values from one matrix to another matrix, you can use any of the styles of indexing covered in this section. Matrix assignment statements also have the following requirement.
In the assignment , subscripts , , , , etc. may be scalar, vector, or array, provided that all of the following are true:
The number of subscripts specified for , not including trailing subscripts equal to 1, does not exceed .
The number of nonscalar subscripts specified for equals the number of nonscalar subscripts specified for . For example, is valid because both sides of the equation use one nonscalar subscript.
The order and length of all nonscalar subscripts specified for matches the order and length of nonscalar subscripts specified for . For example, is valid because both sides of the equation (ignoring the one scalar subscript ) use a 4-element subscript followed by a 7-element subscript.