IRR, TVPI and DPI, and why your three sources disagree
The metrics are simple arithmetic. The disagreement is almost never the formula. It is which cashflows each source counted, and as of when.
If you hold fund positions, you have had this conversation. The GP's quarterly report says one IRR, your spreadsheet says another, and the number your administrator produced is different again. Nobody has made an arithmetic error. They are answering slightly different questions.
The three headline metrics are worth being precise about, because most of the confusion comes from treating them as interchangeable measures of "how are we doing".
What each one actually measures
DPI, distributions to paid-in, is realised cash. Total distributions divided by total capital called. A DPI of 0.4x means forty cents of every euro you funded has come back. It involves no opinion at all: both numbers are bank transfers that either happened or did not.
TVPI, total value to paid-in, adds the unrealised part. Distributions plus current NAV, over capital called. TVPI is DPI plus whatever the GP currently marks the remaining portfolio at, so exactly one input is an estimate, and it is the one doing most of the work in a young fund.
IRR is the annualised rate that discounts every cashflow back to zero. Unlike the other two it is time-weighted, so when money moved matters as much as how much. A distribution arriving two years earlier changes IRR substantially and does not change TVPI at all.
The practical hierarchy: DPI is fact, TVPI is fact plus one mark, IRR is fact plus one mark plus the calendar.
Where the disagreement actually comes from
In our experience almost none of it is the formula. It is the inputs.
Different as-of dates. A GP report dated 31 March reflects marks as of that date. If your own record picked up an April capital call, you are comparing two different fund states. This is the single most common cause, and the most easily missed, because both numbers are labelled "Q1".
Restatements. Administrators revise. A fund reports a NAV, then restates it a quarter later after an audit or a portfolio-company round closes. If your record kept the original figure, you will diverge permanently from the GP's own history and never know which quarter it started.
Fees inside or outside. Net-of-fee and gross-of-fee IRR are both legitimate, and they are far apart. So is whether management fees paid outside the commitment count as paid-in capital. A gross IRR compared against a net IRR is not a discrepancy, it is two different measurements.
Cashflow granularity. Modelling a quarter's calls as one lump on the quarter-end date rather than on the dates they actually settled will move IRR, sometimes by a lot in the early years when the denominator is small. TVPI will not move at all. If two sources agree on TVPI but disagree on IRR, dating is the first place to look.
Why we compute from events rather than from a summary
The way most spreadsheets work is that someone maintains a running summary, updated each quarter from the report. That summary is the source of truth, and the underlying cashflows exist only in PDFs in a folder.
We do it the other way round. Every capital call, distribution and valuation is a dated record, and the metrics are derived from those records whenever they are asked for. Nothing is stored as a computed total.
That is a slightly unusual choice, and it costs more up front. What it buys is the ability to answer the follow-up question. When a number looks wrong, you can see the exact events it came from, and each valuation carries a reference to the document it was read out of, plus what kind of source that was: a capital account statement, a 409A, a priced round, a public mark, or a person typing it in.
So "why did our IRR move" stops being an archaeology exercise. It resolves to a list of events, each pointing at a page in a PDF.
The uncomfortable implication
If your metrics are derived rather than maintained, they change when the inputs change. A restated NAV silently rewrites last quarter's TVPI. Some people find this unsettling and would rather the number they reported stayed the number they reported.
Both positions are defensible, and the right answer depends on whether you are producing a point-in-time report or trying to know where you actually stand. But you should know which one your system is doing. A tool that quietly does one while you assume the other is how two of your three sources end up disagreeing in the first place.