Skip to content
Skip to content
Skip to content

Writing

Why I quote in ranges, what goes in the gap, and how often I have been wrong.

to read
2 min
published
2026-03-21
filed under
Career
A folder, a pen and a magnifying glass under a brass lamp

I have kept a spreadsheet of every estimate I have given since 2019, next to what the work really took. Sixty three rows. On average I was 22% under. I have not been under since I changed three things.

Ranges, not numbers

Four to six weeks tells a client what I know and what I do not. Five weeks only pretends. The width of the range is information: a narrow one means I have built this before, a wide one means we should spend two days finding out before anyone signs.

Name the unknowns

Every quote lists the two or three things that could move it. If one of them happens, nobody is surprised, and the conversation is about the thing rather than about me.

Checkout rebuild        4 to 6 weeks

Moves the range:
  - the payment provider's sandbox is as slow as last time   +1 week
  - address lookup needs a second supplier for two countries +3 days
  - design for the error states arrives after week 2         +1 week

Clients read that block more carefully than anything else I send.

Ship in week one

Something real, deployed, however small. It is the cheapest way to find out what the estimate missed: the build takes nine minutes, the staging data is two years old, the login needs a ticket to another team.

What the spreadsheet says now

  • Work I had done before: within 10% every time.
  • Work with one unknown: the top of the range, almost always.
  • Work with three unknowns: I should have sold a discovery week instead.

The last line is the one that changed my business. A paid week of finding out is easier to sell than it sounds, and it has never once made the real quote larger than the guess would have been wrong.

Writing

Why I quote in ranges, what goes in the gap, and how often I have been wrong.

to read
2 min
published
2026-03-21
filed under
Career
A folder, a pen and a magnifying glass under a brass lamp

I have kept a spreadsheet of every estimate I have given since 2019, next to what the work really took. Sixty three rows. On average I was 22% under. I have not been under since I changed three things.

Ranges, not numbers

Four to six weeks tells a client what I know and what I do not. Five weeks only pretends. The width of the range is information: a narrow one means I have built this before, a wide one means we should spend two days finding out before anyone signs.

Name the unknowns

Every quote lists the two or three things that could move it. If one of them happens, nobody is surprised, and the conversation is about the thing rather than about me.

Checkout rebuild        4 to 6 weeks

Moves the range:
  - the payment provider's sandbox is as slow as last time   +1 week
  - address lookup needs a second supplier for two countries +3 days
  - design for the error states arrives after week 2         +1 week

Clients read that block more carefully than anything else I send.

Ship in week one

Something real, deployed, however small. It is the cheapest way to find out what the estimate missed: the build takes nine minutes, the staging data is two years old, the login needs a ticket to another team.

What the spreadsheet says now

  • Work I had done before: within 10% every time.
  • Work with one unknown: the top of the range, almost always.
  • Work with three unknowns: I should have sold a discovery week instead.

The last line is the one that changed my business. A paid week of finding out is easier to sell than it sounds, and it has never once made the real quote larger than the guess would have been wrong.

Writing

Why I quote in ranges, what goes in the gap, and how often I have been wrong.

to read
2 min
published
2026-03-21
filed under
Career
A folder, a pen and a magnifying glass under a brass lamp

I have kept a spreadsheet of every estimate I have given since 2019, next to what the work really took. Sixty three rows. On average I was 22% under. I have not been under since I changed three things.

Ranges, not numbers

Four to six weeks tells a client what I know and what I do not. Five weeks only pretends. The width of the range is information: a narrow one means I have built this before, a wide one means we should spend two days finding out before anyone signs.

Name the unknowns

Every quote lists the two or three things that could move it. If one of them happens, nobody is surprised, and the conversation is about the thing rather than about me.

Checkout rebuild        4 to 6 weeks

Moves the range:
  - the payment provider's sandbox is as slow as last time   +1 week
  - address lookup needs a second supplier for two countries +3 days
  - design for the error states arrives after week 2         +1 week

Clients read that block more carefully than anything else I send.

Ship in week one

Something real, deployed, however small. It is the cheapest way to find out what the estimate missed: the build takes nine minutes, the staging data is two years old, the login needs a ticket to another team.

What the spreadsheet says now

  • Work I had done before: within 10% every time.
  • Work with one unknown: the top of the range, almost always.
  • Work with three unknowns: I should have sold a discovery week instead.

The last line is the one that changed my business. A paid week of finding out is easier to sell than it sounds, and it has never once made the real quote larger than the guess would have been wrong.

Start a project

Three quick picks so the first reply is useful. You finish the message on the contact page.

What do you need?

Rough budget

brief.tsdraft, not sent

Brief so far: nothing picked yet

or write to hello@sorenhale.dev

Nothing is sent from this page. Your picks are kept in this browser tab and wait for you on the contact form.

Start a project

Three quick picks so the first reply is useful. You finish the message on the contact page.

What do you need?

Rough budget

brief.tsdraft, not sent

Brief so far: nothing picked yet

or write to hello@sorenhale.dev

Nothing is sent from this page. Your picks are kept in this browser tab and wait for you on the contact form.

Start a project

Three quick picks so the first reply is useful. You finish the message on the contact page.

What do you need?

Rough budget

brief.tsdraft, not sent

Brief so far: nothing picked yet

or write to hello@sorenhale.dev

Nothing is sent from this page. Your picks are kept in this browser tab and wait for you on the contact form.

Footer

Local time, Oslo

Footer

Local time, Oslo

Footer

Local time, Oslo

Create a free website with Framer, the website builder loved by startups, designers and agencies.