River
Y CombinatorBacked by Y Combinator

Consulting & AdvisoryFree

Engagement Profitability and Rate Analysis

Delivery hours rebuilt from calendar and file activity, de-duplicated against the timesheet, then split into what the scope asked for and what it did not.

Start here

River rebuilds delivery hours from three accounts instead of one, then reprices every engagement against the real total. The timesheet keeps whatever it recorded. Client-attended calendar time contributes only the minutes no timesheet entry already covers. Document and message activity contributes only where neither of the first two was looking, clustered into sessions by a stated gap rule. Each reconstructed block is then tagged to a deliverable in the signed scope, and the blocks matching nothing in it get their own column.

Search this and what comes back is a spreadsheet with an Hours column. Fee, hours, divide, sort descending, and the engagement at the top is the one you go looking for more of. It is the right calculation on the wrong denominator. The hours in that column are the hours somebody remembered to enter, and unbillable work on a fixed fee is precisely the work nobody enters, so what the column really ranks is diligence at data entry.

Built for the independent consultant or small firm pricing the next engagement off the last one. It rolls up into the practice-level view in the consulting practice dashboard pack, reads the in-scope deliverable list out of the statement of work, and feeds what it finds into the next proposal. On the client side of the desk, the same net-of-cost arithmetic runs in the savings ledger. Run it at the end of an engagement while the calendar and the file history are still intact, or once a year across the whole book.

Why the unrecorded hours are unrecoverable

Reconstructed hours cannot turn into money, and being blunt about that is what makes the exercise worth doing. Federal cost rules say it directly. A contractor is responsible for maintaining records adequate to demonstrate that a claimed cost was incurred, and a contracting officer may disallow any part of a claimed cost that is inadequately supported. A calendar invitation and a file timestamp evidence activity, not time. The 196 hours this found across Teodor Lindqvist's year are a pricing input and nothing else.

The comparison also only works if the estimate was built at the grain of the record. The cost accounting standard on consistency requires that costs estimated for a proposal be presented in enough detail that any significant cost can be compared with the actual cost accumulated for it. One fixed fee against one hours total passes no such test. So the deliverables named in the scope become the tagging scheme, every reconstructed block gets one, and that is what makes an out-of-scope column possible at all.

Then the ranking changes. On Teodor's timesheet Halveston Group was the best engagement of the year at $375.00 an hour, against $228.57 for Brackwell Foods and $208.33 for Norlander Ceramics. Reconstructed, Halveston is the worst at $160.00, behind Brackwell at $183.21 and Norlander at $187.07. The order reverses end to end. Halveston's 96 recorded hours were really 225, and 117 of those went to a weekly cash view the scope never mentioned.

How it works

  1. Send the time records

    Whatever the timesheet holds, however partial, plus the invoices raised against each engagement.

  2. Add calendar and files

    A calendar export, and where the working documents for each engagement actually live.

  3. Add the contracts

    The signed scope for each engagement, so the deliverable list is the real one.

  4. Read the reprice

    Both rates per engagement, the out-of-scope hours, and what the pattern says to change.

What you get

  • Delivery hours rebuilt from three accounts, de-duplicated so no minute counts twice
  • The effective rate computed twice, on recorded hours and on reconstructed hours
  • Every reconstructed block tagged to a deliverable, or to the column for the rest
  • The gap rule and the tail rule written down, so the reconstruction is checkable
  • Which engagement the timesheet rated best of the year and the rebuild rates worst
  • The scoping change the pattern implies, named rather than left as a lesson

Common questions

Isn't reconstructed time just guessing?

It is inference with its rules written down, which is a different thing. A run of file edits with gaps under twenty minutes counts as one session. The session gets a ten-minute tail. Anything under fifteen minutes is dropped rather than rounded up, and a tail never runs into a window something else already claimed. Every block says which account it came from.

Can I bill the hours this finds?

No, and the whole page is built on that. Federal cost rules disallow a claimed cost that the records do not adequately support, and a calendar invitation is not a time record. On a fixed fee there is nothing to bill anyway. What the hours are for is the next quote and the next scope clause, where they are worth a good deal more.

Why not just fill the timesheet in properly?

Because the entries that go missing are missing for a reason. Nobody enters an hour they cannot charge for, and on a fixed fee that describes every hour of the engagement. The work that quietly eats a margin is exactly the work with no incentive to record itself, so the fix has to come from somewhere other than discipline.

How does it separate scope creep from ordinary delivery?

By tagging every reconstructed block to a named deliverable in the signed scope. A block that maps to nothing in it is out of scope, and it gets counted rather than absorbed into the engagement. Halveston's weekly cash view was never in the statement of work and it took 117 of that engagement's 225 hours.

What does the pattern usually turn out to be?

In this year it was the contact. Brackwell and Norlander both ran through the operations lead named in the scope, and both came in under eight percent out of scope. Halveston ran through a CFO who owned none of the deliverables, and half the hours landed outside them. The change is naming who may request work, not only what the work is.

So Halveston was underpriced?

The opposite, which is why the two splits stay apart on the sheet. Its 108 in-scope hours came to $333.33 an hour, well above his own target of $225. The fee was fine and the boundary was not. Repricing an engagement that was correctly priced and badly run is how you lose the next one. Whether you can take it is a separate check, in the restriction register.

Engagement Profitability and Rate Analysis

Fill in the form and your workspace opens with the work already underway.