You quoted 40 hours. It took 80. Again.

You scoped the project at 40 hours. Quoted accordingly. The client approved. 

Three weeks later you’re at 70 hours with no end in sight. The scope didn’t change. Your estimate was wrong. Not because you’re bad at estimating. Because you estimated for the best case and reality delivered the average case. 

The scenario:

You want to build a project estimation model that accounts for the complexity and unknowns that always appear. 

The prompt:

You’re creating a project estimation framework.

Data: [paste your last 10 project estimates vs. actuals]

Build a model that:

  • Categorises projects by type and complexity tier

  • Uses historical actual hours, not estimated hours, as the baseline

  • Adds a complexity multiplier based on client factors (responsiveness, access, decision speed)

  • Includes discovery time, testing, documentation, and handoff (the hours estimates always miss)

  • Builds in a contingency buffer by tier (10%, 20%, 30%)

  • Creates a one-page quote template showing scope, assumptions, and exclusions

The goal: estimates within 15% of actuals, every time.