Skip to main content

Project and Task Cost Methodology

PanDev Metrics turns tracked working time into money. Plugins record activity in the IDE, browser, terminal (CLI), database clients, and AI coding assistants. The time is mapped to tasks in your tracker (Jira, GitHub, GitLab, and others) and priced with each employee's rate. The model is called Daily Share: a salary is split across the days it was worked, and each day is split across the tasks done that day.

Every number on the finance screens can be recomputed by hand from this page.

End-to-end cost calculation flow

1. Inputs​

Time on a task​

The unit of account is one (employee, day, task) fact: how many seconds the employee spent on the task that day. PanDev Metrics computes it from two sources and takes the larger value:

  • Branch time — coding and AI-assisted work on a Git branch linked to the task (the task key in the branch name).
  • Session time — work attributed to the task by other signals, such as an AI agent session or a prompt that names the task.

The two sources overlap, so taking the maximum rather than the sum avoids double counting. Coding without AI is never lost: branch time is the floor.

Only time attributed to a task is priced. Time without a task (meetings, reviews, reading documentation) does not get a separate price; section 3 shows where it goes.

The rate in force on that day​

Each day is priced with the rate that was active on that day, not with the employee's current rate. A raise in August does not reprice work done in March. Rates have a start and an end date; an open end means "still in force". If two rates overlap, the most recently created one wins.

Two rate types exist:

Rate typeWhat is paid forHas a day pool
MONTHLYA fixed salary for the monthYes
HOURLYHours workedNo

2. Formulas​

Monthly rate (MONTHLY)​

day value = monthly rate on that day / day pool of the month
share = seconds on the task / seconds on all tasks of the employee that day
cost(task,day) = day value × share
  • Day pool — the number of days in the month the salary is divided by (section 4).
  • Seconds on all tasks of the employee that day (the denominator of share) — across all departments. If the employee worked for two departments on the same day, each department pays only its share of that day, and together they never pay more than one day value.

The day value is spread over that day's tasks in full. Overtime does not make the day cost more: a salary is a fixed sum, and twelve hours of work on one day cost the same day value as six.

Hourly rate (HOURLY)​

cost(task,day) = seconds on the task / 3600 × hourly rate on that day

An hourly contractor is paid for time, so time is what gets billed, and overtime does cost more. No day pool is involved.

3. Time without a task​

For a salaried employee, time without a task is not in the denominator. The day value is divided only among the day's tasks. So a day with two hours of tasks and six hours of meetings still charges the full day value to those two hours of tasks.

A day on which the employee did no task at all is removed from the day pool (section 4). The salary for the month is then divided by fewer days, and each day with tasks costs more. Salary is never assigned to a task the employee did not work on.

For an hourly employee, time without a task is not billed to any task.

4. The day pool​

The day pool is the number of days a monthly salary is divided by.

  • While the month is open, the pool is: days already passed on which the employee logged at least one task, plus the employee's remaining working days (by the company and employee calendar). The pool can only shrink as the month goes on: each working day that passes without a task drops out. So the amounts of an open month are provisional and can only grow.
  • On the 8th of the following month the month is closed: the pool is frozen as the number of days with at least one task, and the month's amounts become final. The seven-day gap gives plugins time to deliver activity that was queued offline.
  • A day with a task always counts, even a Saturday, a public holiday, or a vacation day.

When the month is closed and the rate covers the whole month, the costs of all of the employee's tasks for that month add up to exactly the salary, to the cent.

5. From tasks to projects, employees, and teams​

  • Task — the sum of its (employee, day) costs.
  • Employee — the sum of their task costs.
  • Team — the sum of its members' costs.
  • Project (Git repository) — a task's cost is split across Git projects in proportion to the branch time spent in each. A task attributed only through sessions has no branch time and stays outside any project.

6. Rounding​

Costs are not rounded row by row. For each (employee, month) block, the exact total is rounded to cents once, and the leftover cents go to the rows with the largest discarded fraction (the largest-remainder method). Each row stays within one cent of its exact value, and the block total matches the exact total.

7. Warnings: what is not priced​

PanDev Metrics does not guess. If a cost cannot be attributed, it is left out of the totals and the finance screens name the employee:

  • Employees without a rate — they have task time on days with no active rate. That time costs nothing until a rate covering those days is set.
  • Employees without tasks — a closed month in which a salaried employee logged no task at all. Their salary for that month is not attributed to any task, project, or team. A manager decides what it means: a leaver who was not deactivated, a manager whose work happens outside tracked tools, or a plugin that was not installed.
  • Period not closed — at least one month of the selected period is still open, so its amounts are provisional.

Only active department memberships and tasks that were not deleted are counted.

8. Worked example​

One salaried employee, June 2026. Monthly rate: 1,000. The month is closed, and the employee logged tasks on 21 days, so the pool is 21.

day value = 1,000 / 21 = 47.619…

Three of those days in detail:

DayTasks that dayShare of the dayCost
WednesdayTASK-745 — 1 h1 h / 1 h = 147.619…
ThursdayTASK-746 — 6 h6 h / 6 h = 147.619…
FridayTASK-746 — 4 h, TASK-748 — 8 h4/12 and 8/1215.873… and 31.746…

Totals by task after rounding:

TaskExactRounded
TASK-74547.619…47.62
TASK-74647.619… + 15.873… = 63.492…63.49
TASK-74831.746…31.75
Total3 × 47.619… = 142.857…142.86

What the example shows:

  • One hour on Wednesday costs as much as six hours on Thursday: each is a full day of a salaried employee.
  • Twelve hours on Friday cost one day value, split 1:2 between the two tasks.
  • Over the 21 days of the month the task costs add up to exactly 1,000.

The same numbers are checked by the unit test TaskCostEngineTest#matchesTheProposalExample in the PanDev Metrics code.

Hourly employee, for comparison: 2.5 hours on a task at a rate of 25 per hour cost 9,000 s / 3600 × 25 = 62.50.

Two departments on one day: a salaried employee with a pool of 20 and a rate of 1,000 works 4 hours on a task of department A and 4 hours on a task of department B. Department A is charged 1,000 / 20 × 4/8 = 25.00, and department B is charged the other 25.00.

9. How accurate the result is​

Direct costs are only as accurate as the tracked time.

  • For a salaried employee, the time error moves money between tasks. The day value is fixed, so if one task's time is overstated, the other tasks of the same day get less. The month total does not change.
  • A missed task day changes the price of every other day. If a day of real work was not attributed to any task (the branch had no task key, the plugin was not installed), it drops out of the pool and the other days cost more.
  • For an hourly employee, the time error goes straight into the cost. Ten percent more time means ten percent more cost.
  • Unattributed time is invisible to costs. Work in a branch without a task key is counted as activity but is not priced on any task.

Use the Data accuracy checklist to find and close these gaps before you rely on the numbers.

Why it matters​

Each amount depends only on the employee's own rate and their own time. It does not depend on people who never worked on the task. A salary lands on the tasks that were actually worked on, an hourly rate pays for the hours, and anything that cannot be attributed is named rather than spread around. PanDev Metrics is not an accounting system: the goal is transparent, reproducible engineering cost analytics built on automatic data collection.