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 |
---|---|---|
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
Allocation shows information in terms all stakeholders can understand
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.
Allocation normalizes data across teams that work very differently
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
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.