Investment Hours & Resource Allocation
Overview
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.
Description
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.
How is it calculated
Investment hours looks at all the actions a contributor has in each day, and portions out an 8 hour day’s worth of credit across those actions according to how much time there is between each action. In a metric that shows the contributions of multiple team members grouped together, for example by milestone or team or issue type, the relevant hours from each individual will be added together to produce the total for the desired grouping. Allstacks follows links in your source tools, from commits up to their corresponding tickets up to those tickets' corresponding epics and initiatives. This linking allows you to group hours at whatever level you want.
Allocation is calculated the same way as Investment Hours, but adds in the concept of an hourly blended rate, so that instead of showing a number of hours on the y axis, you see a number of dollars. The default rate can be set in the organization settings page. To further refine the calculations, different rates can be set for different contributors using tags. The multiple rates option is hidden by default to ensure salary information is handled wisely, so talk to your customer success representative if you want to explore this option.
Calculation details
The calculations go as follows:
First, for any given day we find all actions a given user has. Actions include any commits or card activity that user has. 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
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.