Investment Hours Metrics

Investment Hours vs Resource Allocation

Allstacks offers two metric variants that estimate real-world engineering effort. Those metrics are called Investment Hours and Resource Allocation. They both rely on the same algorithm. Investment Hours shows effort in terms of hours Allstacks estimates each contributor has spent based on their activity in connected tools, and Resource Allocation takes those hours and multiplies them by salary information to turn those hours into an estimate of the actual cost to the business of the work done.

How it's Calculated

Allocation is measured in full-time engineers/employees (FTEs). FTE’s is a calculation of the ratio of time spent on a given piece of work in a day multiplied by the average daily salary for engineers at your company. Each action taken on various pieces of work influences the ratio for each day. Our model is most accurate when your team’s work is performed in a tracking system like Git or Jira.

TL;DR

Allstacks looks at all commit and card activity in connected tools to determine how each individual is spending their time over the course of each workday. This is done by measuring the time between each action. If Action A is performed at 1pm, and Action B is performed at 2pm, Action B will receive an hour of credit.

The longer explanation:

The calculation goes as following:

First, for any given day we find all actions a given user has. Actions include any commits or card activity that user has. Note: We skip weekends when considering a users FTE’s. This means that for any given week, a user can have a maximum of 5 FTE days.

Then, we loop through the list of actions and run a calculation to find that actions FTE ratio.

current = timestamp in seconds of the current action

previous = timestamp in seconds of the previous action

first = timestamp in seconds of the first action that day

last = timestamp in seconds of the last action that day

 

time_spent = (previous - current) or seconds between the current action and the last action
total_time = (last - first)        or total seconds worked that day

 

blended_rate = average yearly salary for an employee. Defaulted to 100k.

days_worked = average number of working days in a year. Defaulted to 260, but can be configured to account for things like average vacation days taken.

 

daily_salary = blended_rate / days_worked

 

FTE Ratio = (time_spent / total_time) * daily_salary

 

An Example:

User Tim spent 8 hours working on a Monday. In that time, he committed twice and moved 2 tickets across his Jira board. The table below describes what actions he made, and when they took place.

Action Type

Action Timestamp

Meta

Action Type

Action Timestamp

Meta

card_action_a

9:00 am

moved card_a from to do to in progress

commit_a

12:00 pm

made a commit against card_a

card_action_b

12:02 pm

moved card_b from to do to in progress

card_action_c

12:04 pm

moved card_a to QA

commit_b

5:00 pm

made a commit against card_b

 

For the algorithm to calculate FTE would be as follows:

total_time = (5 pm - 9 am) = 28800 seconds

daily_salary = 100k / 260 = $384

 

commit_a:

time_spent = (12 pm - 9 am) = 10800 seconds

FTE Ratio = (10800 / 28800) * 384 = $144 spent on that commit

card_action_b:

time_spent = (12:02 pm - 12:00 pm) = 120 seconds

FTE Ratio = (120 / 28800) * 384 = $1.6 spent on that commit

card_action_c:

time_spent = (12:04 pm - 12:02) = 120 seconds

FTE Ratio = (120 / 28800) * 384 = $1.6 spent on that commit

commit_b:

time_spent = (5pm - 12:04 pm) = 17760 seconds

FTE Ratio = (17760 / 28800) * 384 = $236.8 spent on that commit

 

Rolled up by card:

card_a = ($144 + $1.6) = $145.6

card_b = ($236.8 + $1.6) = $238.4

 

How Allocation can be Useful

  1. Allocation shows information in terms all stakeholders can understand

    1. Stakeholders don’t always know how many card actions or commits per day to expect. However, often they do know how much they’ve budgeted for things, and how many working hours they’re expecting to get out of their teams.

  2. Allocation normalizes data across teams that work very differently

    1. Metrics such as velocity, commits, and PRs skew toward teams that do smaller increments more frequently. Just because a team does twice as many tickets doesn’t mean a team does twice as much work. Allocation smooths this out so teams can be compared to one another or aggregated together more effectively

  3. Allocation can be a zero-effort replacement for time tracking

Frequently Asked Questions

Q: Can I create special roles so that only certain users can see Allocation metrics?

A: If you want to limit access to Allocation to select users, let your Allstacks representative know which users you want to have access, and we can set that up for you. It’s not currently a role or permission that customers can manage for themselves.

Q: Why are some commits showing up as uncategorized?

A: For Jira, commits need to have the ID for the card they belong to in the commit message to be linked to those cards. In ADO, commits need to have the card ID in the commit message, or in a PR that’s linked to a card.

Q: What happens if a contributor goes on vacation?

A: Allstacks only gives credit for days where we detect actions from a contributor. When a user stops work for the day, the clock stops and doesn't resume until they start making actions again on a future date.