P&L reporting and analysing employee output rates in a project-based business
- Cirill Dubson

- Dec 15, 2025
- 7 min read
How do you make a project-based business more efficient and stable? Among other things, there are two levers you can pull:
Get rid of low-margin clients and keep the most profitable ones.
Reduce indirect costs.
For both, you need a profit-and-loss (P&L) report to hand — from an individual feature ordered for a project right up to the company as a whole. You can build such a report on the basis of analysing employees' output rates. In this article we'll look at how to do that in practice.
What you need to keep a P&L report under control
To keep a P&L report under continuous control, you need to:
Regularly collect output-rate data (worklogs) for every employee.
Distinguish indirect costs from direct ones.
What direct and indirect costs are
Direct costs are the costs of those employees whose work is sold directly. As noted above, the approach described here is most applicable to a project-based business of knowledge workers, whose work is hard to measure. For example, if you sell legal services, these employees are the lawyers working for the client; if you're an outsourced accounting firm, they're the accountants working for clients.
Indirect costs are the costs of those employees whose work is not sold directly. For example, if you're an outsourced IT-development firm, these employees are your lawyer, accountant and marketer. Their work isn't sold to your clients — your company pays for it.
It would be lovely not to keep such employees on staff, but unfortunately that's impossible: you're unlikely to get enquiries on your website without a marketer's effort, or file a tax return without an accountant. If it were possible, project-based business would be more stable and predictable, because we wouldn't have to carry indirect costs all the time.
Of course, it isn't only employee costs that are indirect or direct — any cost can be classified this way. And note that in reality, separating out indirect costs is very hard, because when a senior backend developer sets up Zabbix for your whole company, that's most likely an indirect cost.
So how do you separate the work that's sold to clients from the work you have to pay for yourself to keep the company running and growing? Without answering that, it's premature to talk about setting financial goals.
Employee output rate
The metric that lets you separate indirect costs from direct ones is the employee's output rate.
How do you measure a programmer's output rate? Sadly, there's no metric that captures it in terms of the result of their work. You can count how many parts a machinist made in a day at a factory and compare it with how many they “should” have made. With a programmer that doesn't work, because their work is so abstract.
So we make the following simplification: there are no mythical programmers who, riding the bus or in the shower, think about your task and then walk up to the computer and write a feature estimated at several hours in 5 minutes. We assume developers sit at their computers for hours, wrestling to make the feature work to spec. Those hours are their output rate. In other words, we assume a salaried person “should” spend every working day of the month on our tasks. Many a CTO will call this naive and have a laugh. Let them — this column is for commercial directors; don't show it to your CTO :)
This means our employees will have to log their working time on every task they touched in any way, whether it's coding or a meeting.
It's important to count how much time an employee actually works and how much money their work brings in. That way we not only understand a project's economics — we also motivate the team member fairly: if we see the profit from an employee growing, we can raise their salary.
Kirill Dubson— Founder of Goprod.dev
Here's a hypothetical example that clearly illustrates why such a calculation matters:
Client project no. 1 was estimated at 40 hours and sold to the client for €4,000. Of those 40 hours, a developer worked 20 hours at €60/hour (€1,200). The remaining 20 hours were spent by a designer, analyst, tester and project manager, coming to €1,200 in total. So the project yields 40% profit — €1,600.
Project no. 2 was estimated at 10 hours and sold for €1,500. A developer and a project manager worked on it, and the cost came to €600. The project yields 60% profit — €900.
Clearly the second project is more efficient, even though at first glance it doesn't look that way. This calculation needs to be done on an ongoing basis, systematically, for all employees, tasks and projects.
How to produce a P&L report in practice
The expected result
The result we're after is an unambiguous understanding of which task every euro spent went to. To get there, we:
collect all the worklogs for every task,
convert the worklogs into money,
extract the money for “each worklog” from each employee's salary.
Each step in more detail below.
The starting tools
A task tracker where employees record time on each task — for example, Jira Software (alternatives: Trello, ClickUp, Asana, Monday, Linear, Azure DevOps and others).
A financial service — for example, a cash-flow management tool such as Agicap (with a convenient API, the ability to issue and pay invoices, and bank integrations).
Integration software to connect these two services (Zapier, Make).
Collecting the worklogs
Jira's task-hierarchy system helps here (for teams building software, Jira is an ideal environment for tracking and assigning work):
One client corresponds to one project.
Within projects are epics. An epic is the end goal — the order the client expects us to deliver. We record the agreed number of hours in it. For example, “Automate Leave Requests”.
The tasks within an epic are the work of everyone involved in that task (order) who logged their time against it.
Converting worklogs into money
Now we “convert” each employee's time spent on each task into money. To do that, we need to calculate the real rate of salaried employees — which is different for everyone every month. How does the rate end up different each time?
Salaried employees receive a fixed salary every month. It doesn't matter how many days they were ill, how long they spent helping their grandmother, or how much they drank tea and watched YouTube during work hours. Say an employee, Alex, has a salary of €4,800.
If he worked the whole month (22 days × 8 hours = 176 hours) — no holidays, no days off, no sick leave — then his hourly rate that month is €27.27 (€4,800 / 176 hours).
But if he took, say, 4 days off and 3 sick days, he worked 15 days, i.e. 120 hours. His real hourly rate that month therefore comes to €40 (€4,800 / 120 hours).
Multiplying the rate by each worklog gives us the money.
Extracting that money from salaries
Since we don't send people micro-transactions every day, we have to carve this money out of each person's pay. To do that, at the end of each month the program goes through all the order-tasks, gathers their worklogs, multiplies them by the calculated rate and splits the salary across each of these components. The remainder of the salary that isn't tax is the indirect part of the person's salary — the part that doesn't belong to any project.
In the end, we can see how much of a person's salary went to each project/order.
A worked example
Theory | Practice |
1. Work out how many hours the person themselves was supposed to log (i.e. subtract holiday and sick leave). | Back to Alex. As we know from option 2 above, he took 4 days off and 3 sick days in the month, so he was due to work 15 days × 8 hours = 120 hours. |
2. Calculate the theoretical rate — divide the employee's net salary (excluding tax) by the number of hours they owe us. | With a fixed salary of €4,800, each of his 120 hours costs €40 per hour. This is the unique hourly rate for that specific employee in that specific month. |
3. Compare the expected number of working hours with the real number — the hours he actually logged. | We found he was due to work 120 hours but actually logged 110 over the month — this is the employee's achieved output rate, i.e. how well he kept to plan that month. |
4. Calculate the indirect part of the salary. The remainder of the salary that relates neither to tax nor to a project is the person's indirect salary cost. The smaller this is, the more stable the business. It doesn't necessarily mean the person did nothing — but it does mean we know what their work cost us. | Multiply the real hours logged by the unique rate for the month (110 hours × €40 = €4,400). Subtract that from the salary to get the remainder (€4,800 − €4,400 = €400) — and that is the indirect cost. |
To calculate profit automatically, we wrote a Python program that queries the database and feeds the result into the financial service on a regular basis.
As soon as a payment is due for an employee, the program requests all of that employee's worklogs from the task tracker.
It compares the tasks the employee logged time against with data from the financial system, to work out whether the employee's tasks relate to client orders — i.e. are these tasks revenue-generating, will they be paid for? If a task relates to a client order, the automation tags exactly which order it belongs to.
Now we know every employee's output rate, as well as which part of the salary was worked and which wasn't — and practically in real time, since the data updates daily.
As a rule, if a person isn't logging time, it means they're burning out. When there's no time logged, something is up with the employee. That's a reason to talk to them and try to solve the problem.
Kirill Dubson — Founder of Goprod.dev
The result
Once we've broken down all the costs and calculated the profit on each client order, we can work out project profitability (by client, for example) and get a real P&L report by project — it becomes a matter of routine.
Even if every project is profitable, the company's overall profitability will be lower than it appears. This gap arises from indirect costs — the hours people didn't attribute to any project (operations, the work of accountants, marketers, HR and other employees whose hours don't relate to client orders).
Reduce indirect costs — it will make the business more predictable.
What we ended up with:
A P&L (Profit and Loss) report — how much the company earned and how much it spent. It accounts for all profit and all losses over a given period — a month, a quarter or a year, for example.
The ability to separate direct costs from indirect ones.
A calculation of every employee's output rate.
Want the same? Get in touch — we'll digitise your business processes and wire your services together so that you can leave everything alone and it just works.
Comments