AI

The migration we used to quote at 200 hours now takes two prompts — so what do we charge?

I've rewritten the same proposal line four times this year, and I still don't like where it lands.

The line is a migration. Move a site off one platform, keep the content, keep the URLs, keep the search traffic. We used to quote that at around 200 hours, and the number held up. Someone had to open the old templates, read them, rebuild them, and check every page by hand.

Now the first working version comes out of two prompts. Not the finished job — the first version. And a client can watch it happen on a screen share.

So the 200-hour number is gone, and I don't have a clean replacement for it yet.

What the 200 hours were actually paying for

The estimate was never one job. It was five jobs stacked together, and the slowest ones set the price.

  • Reading the old site: finding every template, style, and one-off page nobody documented.
  • Rebuilding it: turning those templates into working code in the new system.
  • Moving the content: pages, images, metadata, and the redirect map that keeps rankings alive.
  • Deciding what dies: which pages, which patterns, and which decade-old plugin behaviors don't come across.
  • Answering for it later: the call in week six when organic traffic dips and someone needs a real answer.

Three of those were mostly typing. Two were judgment and liability. We charged one hourly rate across all five, because hours were the only unit everyone agreed on.

Two stacked bars. The Before bar has five blocks: three grey ones filled with lines of text, two orange ones each holding a person. In the Now bar the three grey blocks have collapsed to slivers while the orange ones are unchanged.
The estimate was five jobs stacked together. Only the three that were mostly typing collapsed.

Two prompts moved the files, not the project

I have a real number for the compression, and it's our own site. We rebuilt norml.studio on Next.js and Sanity in one evening, plus a second evening to connect GitHub, Vercel, and Sanity into the setup we still use.

That's genuine. It's also the most misleading number I could quote you.

That evening covered work I understood completely, on a site I owned, with nobody to sign off and no rankings I was scared to lose. Change any one of those and the two prompts stay two prompts while everything around them gets longer.

I also can't tell you how much time that really saved. Nobody can, from the inside. The evening felt fast, and “felt fast” is what ends up in the next estimate — written by the same person who felt it.

And what comes out is almost right, which is the expensive category. Almost right looks finished. It survives the demo and the quick scroll, then breaks later — a redirect nobody checked, a form that quietly stopped sending. Producing it costs almost nothing now. Catching it costs what it always did.

The same web page shown twice. On the left it carries a blue tick and reads as finished. An arrow labelled week six leads to the right, where the same page now carries two orange crosses.
Almost right survives the demo and the quick scroll. It breaks later, quietly, and catching it costs what it always did.

We were selling hours, but we were pricing risk

Here's what I missed for most of a year. The hours were never the product. They were a proxy for how much could go wrong, and how long we'd be on the hook for it.

A migration that silently drops 40 redirects doesn't fail on launch day. It fails eight weeks later, in a traffic report, in a meeting we're not in. The model produced the migration. It didn't agree to be in that meeting.

Generation got cheap. Accountability didn't move at all.

That's the pricing problem in one sentence. We compressed the part of the work that was easy to measure, and left the part that was hard to measure priced at zero.

What we changed in the way we quote

We haven't finished this, but four things have already changed:

  • Price the outcome and name its edge. A fixed number for “site moved, URLs preserved, no ranking loss over 90 days” is honest. A fixed number for “however long this takes” is a bet we lose every time.
  • Keep hours inside the building. We still estimate in hours, because that's how we staff a week and read our own risk. It stopped being the thing the client buys.
  • Make review a line item, not a courtesy. The step that got more valuable is the one we used to give away. Almost right gets caught by a senior person reading the diff, and that person costs money.
  • Put a number on the redo. Work that's cheap to produce is cheap to redo. We price a rebuild window in, instead of pretending the first version is final.

Before quoting anything now, I ask three questions:

  • Who answers for this in month six?
  • Does it fail loudly, or quietly?
  • If we get it wrong, how expensive is the second attempt?

Cheap to produce and quiet when it breaks is the worst combination on that list. It's also an exact description of a fast migration.

A two by two grid. The horizontal axis runs from cheap to produce to expensive to produce, the vertical from fails quietly to fails loudly. The cheap and quiet corner is tinted orange and holds a small web page marked with a burst, labelled a fast migration.
Cheap to produce and quiet when it breaks. That corner is also an exact description of a fast migration.

The version I can't defend

There are two easy answers and both are bad.

Charge the old 200-hour number for two prompts of effort, and we're billing for a secret. Clients are running the same tools we are. That gap closes on its own, and it closes badly.

Charge by the new effort, and we underprice the part we still carry. The client never wanted two prompts. They want to stop thinking about the migration, and they want someone to answer the phone in week six.

Our own pricing page still describes a website project as 500 to 2,000 human hours. That line does real work — it signals scope in a way a price alone can't — and it measures the wrong thing. We'll have to rewrite it.

What to ask when the next quote lands

If you're the one paying for this, the question has changed. It used to be whether the number was too high. Now it's which parts of the number are still hours, and which parts are habit.

Ask for one line to be split in two: the part a tool produces now, and the part a person answers for after launch. Anyone worth hiring can do that in the room, without getting defensive about it.

A quote card with one line highlighted in orange. Two hand-drawn arrows split it into two boxes: what a tool produces now, drawn as a shrinking bar, and what a person answers for, drawn with a person and circled in orange marker.
One line, split in two. The half that collapses was typing. The half that holds is who answers the phone in week six.

Then watch which half they defend. If the whole number collapses, you were being sold typing. If the first half falls and the second one holds, you’re getting an honest answer about what you’re buying — someone who is still there in week six, when the traffic report looks wrong and somebody has to explain it.

That second half was always the thing worth paying for. Hours just hid it well enough that nobody had to say so.

Share
Max Tymoshyn
Written by

Max Tymoshyn

Founder & Architect at Norml Studio

I lead Norml across business, product, design, and technology, setting company direction and shaping the systems behind our work.

LinkedIn ↗