Twelve hours in the quote, twenty-three on the timesheet
The number that made me start doing these was 23. I had quoted twelve hours for an events calendar on a small business site, as one line inside a bigger build. When I totalled the timesheet at the end, the calendar alone had taken twenty-three. Eleven hours at my €70 rate is €770 I did not charge, on a feature I had priced at €840.
Diagram
Diagram · 3:2a private estimate postmortem flowing from the words you promised to one visible change in the next quote, diagram, ratio 3:2, diagram
My first reaction was the usual one. I felt a bit stupid, told myself estimates are always hard, and moved on to the next quote. Two months later I underestimated a booking form because, once again, I had not asked whether bookings repeat. That was the part that actually bothered me. Missing an estimate is normal. Missing it twice for the same reason means I learned nothing the first time.
There are two bad ways to handle a miss. One is the team retrospective version, where everyone agrees "the requirements were unclear" and nobody names the habit they personally repeat. The other is private guilt, which feels like taking responsibility but changes nothing about the next quote. What I wanted was something in between: short, private, honest, and ending in one change I could see in my next estimate.
Missing it twice for the same reason means I learned nothing the first time.
When I run one
My trigger is simple: if the actual effort came in at more than one and a half times the estimate, or more than a full day late on a multi-day promise, I fill in the template before I send my next quote. That threshold is my own, not a rule from anywhere. If your estimates are usually tighter, use a lower one.
It takes about twenty minutes. It lives in my notes, not in the client channel. The client might hear about the outcome, but the autopsy itself is for me.
ESTIMATE POSTMORTEM: [project or task]
Date:
Estimate given: [hours or days] on [date]
Actual: [hours or days], finished [date]
Ratio (actual / estimate):
Impact: [none / date slip / unpaid work / relationship strain]
WHAT I PROMISED (quote the exact words)
...
WHAT DONE ACTUALLY REQUIRED
...
CAUSES (tick all that apply)
[ ] Scope I under-read (it was in the brief and I skimmed)
[ ] Scope the client grew, and I absorbed it
[ ] Unknown tech or domain I pretended to know
[ ] Access, environment or integration delays
[ ] Waiting on others (feedback, assets, reviews)
[ ] Quality bar higher than I priced
[ ] Capacity fiction (meetings, household, tiredness ignored)
[ ] Optimistic sequencing (no rework, no overlap)
[ ] Tooling or build pain I left out
[ ] Other:
PRIMARY CAUSE (one sentence)
...
MATH THAT WOULD HAVE CAUGHT IT
- Spike I skipped:
- Similar past task actuals:
- Contingency I should have added:
ONE PROCESS CHANGE FOR THE NEXT ESTIMATE
(Only one. Specific. Visible in the next quote.)
...
WHAT I WILL SAY NEXT TIME (optional)
...
Fill in every field. The value is in forcing one primary cause, rather than writing a paragraph that spreads the blame across five things so that none of them has to change.
My filled-in copy: the events calendar
Here is the real one from that site, which I wrote up after the booking form sent me back to the old timesheet. It is lightly tidied, and I keep the client anonymous even in my own notes, mostly out of habit.
ESTIMATE POSTMORTEM: events calendar, small business site build
Estimate given: 12 hours, in the build quote
Actual: 23 hours
Ratio: 23 / 12 = about 1.9
Impact: 11 hours unpaid (€770), launch held two days
WHAT I PROMISED
"Events page with a monthly calendar and event detail pages,
editable in the CMS."
WHAT DONE ACTUALLY REQUIRED
Most of their events repeat weekly. Single dates get cancelled
(holidays). The calendar plugin I planned to use had no support
for repeating events with exceptions, so I built that part.
Times also had to stay correct across the clock change.
CAUSES
[x] Scope I under-read
[x] Unknown tech or domain
[x] Optimistic sequencing
PRIMARY CAUSE
I estimated from the mockup, which only showed one-off events,
and never asked whether events repeat.
MATH THAT WOULD HAVE CAUGHT IT
- Spike I skipped: 2 hours testing the plugin against their
real event list
- Similar past task actuals: a simple event list on another
site took 9 hours, with no repeats
- Contingency: repeating events quoted as their own line,
roughly 10 hours
ONE PROCESS CHANGE
Any feature that shows dates gets three questions before I
quote: do they repeat, can one be cancelled on its own, and
who edits them.
WHAT I WILL SAY NEXT TIME
"Before I price the calendar, do any of your events repeat?"
Two things stand out when I reread it. First, the primary cause is embarrassingly small. One unasked question cost eleven hours. Second, the fix is not "be more careful". It is three questions written into my quoting checklist, which I still use. They caught a repeating-events requirement on a later project before I sent the price.
The rest of the template mattered less than that one line. But I would not have got to the line without filling in the rest, because the mockup, the plugin and the clock change all looked like separate bad luck until I wrote them down next to each other.
Labelling causes without lying to yourself
The ticks are where people go soft on themselves. A few notes on the ones I find hardest to be honest about.
Scope under-read means the work was always implied and I skimmed. Own it, then ask sharper questions or charge for discovery next time.
Client growth absorbed means I saw a change coming and chose silence to keep things pleasant. That one needs a habit, not a mood, and raising a change order without awkwardness is the habit I use now.
Unknown tech means I sold certainty I did not have. The fix is a small paid spike with a cap, then a real estimate.
Waiting on others is real, but if I estimated calendar days as if they were working hours, the honest label is optimistic sequencing. Effort and elapsed time belong on separate lines in a quote.
Quality bar means I delivered portfolio polish on a practical budget. Either price the polish or ship the agreed level. Busy versus finishing applies inside client work too: past a certain point, polishing is just a comfortable way to avoid calling it done.
Several ticks are fine. Several primary causes are how nothing changes.
What a real process change looks like
A good change shows up in the next quote, email or contract. Some I have used:
Three date questions before pricing anything with a calendar in it.
A paid spike, capped at a few hours, before quoting fixed price on a codebase I have not seen.
Double the buffer on anything involving a third-party API I have not called this year.
Revision rounds capped in writing, so round three has somewhere to go.
A checkpoint at eighty percent of sold hours on hourly work.
Bad changes are moods: "be more careful", "stop being optimistic", "work harder". None of them survive contact with the next friendly sales call, where the client is lovely and the brief looks easy.
The private version and the client version
If I absorbed the miss and the client still got what they needed on an acceptable date, the postmortem stays private. If the miss forces a date change, a fee conversation or a scope cut, the client needs to know, but they need options rather than my cause list. Something like: "The integration is bigger than the estimate assumed. We can extend to the 20th, drop the gallery, or pause for a short paid spike to size the rest." I never forward the template itself. They need a decision. I need the autopsy.
Reading them together is where the patterns show
Once a month I skim the last three. That is how I noticed that three of my five postmortems one spring had the same primary cause: I had treated calendar days as if they were working hours, and the gap was always someone else's review. One fix per postmortem had not caught it, because each one blamed a different client. Reading them side by side showed me the habit was mine.
That pattern became a standing line in every estimate, separating effort from elapsed time, and the misses of that kind mostly stopped. I even ran the template once on a feature in Freelance Clock, where the only client was me, and the primary cause was the same skimming habit as the events calendar.
Keep the postmortems next to where you write quotes, not in a folder called "reflection" that you never open. A twenty-minute template will not make you a perfect estimator, and nothing will. What it can do is make sure that when you miss next time, it is for a new reason.
End of this piece
Writer
PrimedEcho
Independent notes on remote work, focus, and freelance practice. About this site.