Situation

You want to determine how much it will cost to complete each Story, Epic, or other grouping of issues, based on the amount of time remaining and the hourly rate of the assignee.

As a bonus, you would also like to make this information visible to users outside of Structure.

Solution

The following guide assumes you have:

  • All stories and tasks assigned to specific Jira users
  • custom User property containing each user's hourly rate of pay (we've named ours "cost")

Step 1: Add a Column for the Custom User Property

We've used Insert and Extend generators to build an Epic > Story hierarchy. We've also added a column showing the values from our custom user property, labeled Assignee(cost).

Structure with custom user property for cost

In order to add the Assignee(cost) column above, we had to add an Attribute column:

Add Attribute Column

 Under the column properties, enter the following values:

  • Attribute: User Property...
  • User Field: Assignee
  • Property: Enter the key for the user property where you store each user's hourly pay rate - ours is called "cost"

Step 2: Calculate the Cost to Finish Each Issue

Next we'll add a formula column to calculate the cost to finish each issue in our structure.

Calculate Remaining Cost with a Formula Column

In our formula, we're multiplying our assignee's hourly cost value by the remaining estimate (the estimate is in milliseconds, so we divided by 3,600,000 to find out how many hours of work are left).

  • In the Variables list, make sure to assign your Assignee cost to the custom user property we discussed in Step 1. See Columns as Variables for more details.
  • We want to roll our costs up to each epic, so we checked the Sum over sub-items box. If you don't need to do this, leave the box unchecked.
  • If issues or tasks appear multiple times within an epic, you may want to exclude duplicates, to avoid an inflated total cost.

Bonus - Make This Information Visible Outside of Structure

Using Effectors, we can write the values from our formula to a custom Jira field, making them visible to users outside of Structure.

 Before we start, you'll need to make sure you have a custom field where the Cost-to-Complete values can be stored. We created a custom field called "FinishCost".

Add an Effector

Open the Automation menu and select Effectors.

Add Effector

Choose Attribute to issue field...

Attribute to Issue Field Effector

On the Effector settings screen:

  • The name field is updated automatically as you select the Effector properties. If you prefer, you can also click the edit button to enter a custom name.
  • Get Value From: select the formula column we added in Step 2
  • Set Value To: select the custom Jira field you want to write the cost-to-complete values to
  • Limit To: If you only want to write cost data for certain issues or issue types (for example, just for epics), enter the appropriate JQL. We've left this section blank, because we want to write values for all issues.
  • Select whether email notifications should be sent when the Effector writes values to Jira

Effector Settings

When you're finished, click Save and Run to run the Effector immediately, or click Save to simply add the Effector to the structure but not run it yet.

Run the Effector

You can run an Effector directly from its settings screen (see above), or you can locate the Effector at the top of the structure and click the Action button (the three dots to the right of its row). Select Run.

Run effector

You have the option to Preview effects before applying. This allows you to view and approve every change that will be made by the Effector. Effectors update live Jira data, so we highly recommend using the preview option. Click Run to begin.

Run effector screen

Once the preview is finished, you will see a list of changes that will be made by the Effector. You can select which changes you want made, or click Apply All to apply all changes.

Select Effector changes to apply

Once you apply the selected changes, the cost values from your formula column will be written to the custom Jira field, where they can be viewed outside of Structure.

Values written to Jira custom field