The rate conversation I kept getting wrong
Quoting a day rate invites a comparison to salary. Quoting against the outcome changes the question.
TL;DR
For two years I answered "what's your rate?" with a number. £400 a day. The conversation that followed was always the same: a comparison to what a salaried engineer costs, and a negotiation downward from there.
The number is not the problem. Answering that question first is. A day rate invites a salary comparison, and against a salary a contractor always looks expensive — because the comparison omits recruitment, notice periods, benefits, the ramp-up, and the fact that the engagement ends when the work does.
I now answer a different question before the rate: what is this worth to you, and what happens if it does not get done? The rate has not changed much. The conversation has.
The case this post is about
The exchange, roughly as it went, maybe thirty times:
client: "So what's your day rate?"
me: "£400."
client: "Hm. That's £8,000 a month — we pay our senior Android engineers
about £6,500."
me: "Well, there's no NI, no pension, no holiday—"
client: "Still. Could you do £320?"
me: "…£350?"
client: "Let's say £330."
Seventeen percent off, in ninety seconds, from a number I had chosen carefully.
The symptom
Consistent erosion:
quotes given at £400/day, 24 engagements over 2 years
accepted at £400: 5
negotiated to £330–£370: 14
lost on price: 5
average realised rate: £356 (11% below ask)
And a pattern in who did not negotiate:
negotiated led with "what's your rate?" 19 of 19
did not led with "we have a problem, can you help?" 5 of 5
Every client who opened with the rate negotiated it. Every client who opened with the problem did not. I was treating that as luck.
The worst instance was the one I won:
a 12-week engagement at £330/day = £19,800
the work: unblocking an iOS release that had slipped twice
their cost of the slip: a contractual penalty of £45,000 to a partner
I was paid £19,800 to prevent a £45,000 penalty, and I had spent the first call defending £400 against a £6,500 salary. The salary comparison was not merely unhelpful — it was anchored to a number that had nothing to do with the value at stake.
Why the obvious things did not work
"Raise the rate to £500 so the negotiated price lands at £400." I tried this. The negotiation started further away and landed at £390, and two clients disengaged entirely at the higher opening number. Anchoring higher does not change which question is being asked.
"Explain the cost comparison properly." I built a tidy breakdown: employer NI, pension, holiday, sick pay, equipment, recruitment fees, notice periods. It is accurate and it keeps you inside the salary frame, arguing about the right multiplier instead of about the work. Clients nodded and still asked for £330.
"Hold firm and walk away." Occasionally correct, and it is a tactic rather than a fix — and holding firm on a number I introduced as the first topic is holding firm on a frame I chose badly.
"Switch to fixed price so there is no day rate." This hides the rate rather than reframing the conversation, and it imports a different problem entirely.
The actual mechanism
A rate answers "how much per unit of your time". The moment that is the first number on the table, two things follow:
It invites the nearest available comparison, which is a salary. Everyone in the room knows roughly what an engineer costs, so a daily figure gets annualised and compared — and the comparison excludes every cost of employment and all of the flexibility.
It makes time the unit of value. Once we are discussing pounds-per-day, a shorter engagement is a saving rather than a result, and my incentive inverts: the better I am, the less I earn.
The alternative is not to refuse to give a rate. It is to establish what the work is worth first, so the rate is read against the outcome rather than against a salary.
The ordering is the mechanism, so it is worth writing as one — a function that will not produce a number until the outcome it is priced against exists:
def quote(outcome, day_rate, estimated_days):
"""outcome: the client's own figures for what solving this is worth."""
# The refusal. A rate quoted before the outcome is established gets compared to a
# salary, because a salary is the nearest number anyone in the room has. This is
# not a negotiating tactic — it is the difference between two conversations.
if outcome is None or outcome.annual_value is None:
raise ValueError(
"no established outcome value — ask first: what does this cost you now, "
"per month, and what changes if it is fixed? Then price against that.")
price = day_rate * estimated_days
payback_months = price / (outcome.annual_value / 12)
lines = [
f"today this costs you ~{outcome.annual_value:,.0f}/yr ({outcome.evidence})",
f"the engagement: {estimated_days} days, {price:,.0f}",
f"payback: {payback_months:.1f} months",
]
# A shorter engagement being CHEAPER is the inversion this is built to avoid, so
# say plainly that the deliverable is the outcome, not the days.
if payback_months < 6:
lines.append("Fewer days is a better result here, not a smaller invoice — "
"the deliverable is the outcome.")
else:
lines.append(f"Payback over {payback_months:.0f} months is slow — "
"worth scoping to the part that pays back fastest.")
return "\n".join(lines)
On the named case — the engagement where the rate came first and the room went quiet:
>>> quote(outcome=Outcome(annual_value=180_000,
... evidence="3 engineers × ~2 days/wk on manual reconciliation"),
... day_rate=650, estimated_days=15)
today this costs you ~180,000/yr (3 engineers × ~2 days/wk on manual reconciliation)
the engagement: 15 days, 9,750
payback: 0.7 months
Fewer days is a better result here, not a smaller invoice — the deliverable is the outcome.
The rate is in there — 650 is the same number that stalled the earlier conversation. What changed is the denominator it is read against. Against a salary, 650/day is expensive; against 180,000 a year of reconciliation, a 9,750 engagement that pays back in three weeks is not a rate question at all, and nobody asked about the daily figure again.
rate first: £400/day vs £6,500/month salary → I look expensive
outcome first: a £45,000 penalty avoided, 12 weeks → £19,800 looks like a decision
Same number, different denominator. The discipline is sequencing, not pricing.

The rate is not the problem; answering it first is. A number with no stated outcome gets compared to a salary, and against a salary a contractor is always expensive.
The fix
Three questions before any number, and a quote shaped around the outcome.
1. The three questions, asked on the first call:
1. "What happens if this does not get done — or gets done in six months
instead of six weeks?"
2. "Who else has looked at it, and why did that stop?"
3. "How will you know it worked?"
Question 1 surfaces the value. Question 2 surfaces whether the problem is hard or merely unstaffed. Question 3 gives me the acceptance criteria and tells me whether they have thought about it.
If someone will not engage with question 1, that is information: either the work genuinely does not matter much (fine — quote accordingly) or they are not the decision-maker.
2. Then the rate, in context, with the outcome restated:
"Based on what you've described — the release has slipped twice and the next slip
triggers the partner penalty — I'd scope this at around 12 weeks.
My rate is £400 a day, so roughly £24,000, and I'd propose we start with a
3-day paid discovery at £1,800 so that number is based on your code rather
than on my guess.
For context: that's against a £45,000 penalty you've told me is at risk, and
it ends when the work ends."
Three things in that paragraph: the outcome, the number, and the end date. The last one is the contractor advantage that a salary comparison never includes, and stating it is more effective than any NI-and-pension breakdown.
3. And a written rate card, so the number is not a negotiation opening:
## Rates (2026)
Discovery (3 days, fixed) £1,800
Project work £400/day
Retained advisory (2 days/month, 6-month min) £350/day
Urgent / <2 weeks' notice £500/day
Expert witness / due diligence £800/day
Rates are reviewed annually. Project work is invoiced fortnightly.
Having it written, with a structure and a review date, changed the dynamic more than I expected: a published card reads as a policy rather than as an opening bid. The urgent tier also does real work — it prices the thing clients most often want and converts "can you start Monday?" from a favour into a line item.
And one phrase I use when the salary comparison comes up anyway:
"That's a fair comparison for a permanent hire. The difference is you can stop
paying me in February, and you'd need about ten weeks to hire for this. If a
permanent hire is the right answer, I'd say so — I've told two clients that."
Agreeing with the comparison and then naming what it omits lands better than disputing it. And having actually told two clients to hire instead of engaging me is what makes it credible rather than a line.
How this turned out
Eighteen engagements since the change:
before (24) after (18)
average realised rate £356 £412
accepted at the asked rate 5 of 24 13 of 18
negotiated down 14 of 24 3 of 18
lost on price 5 of 24 2 of 18
And the three that negotiated:
all three opened with "what's your day rate?" before describing the problem
in two of the three I answered before asking my questions — my failure, not theirs
The one where I held the sequence still negotiated, which is worth reporting: the method shifts the odds, it does not eliminate price negotiation.
The two lost on price:
one had a £15,000 total budget for 10 weeks of work — genuinely not viable, and
the conversation took 20 minutes instead of three calls
one wanted a permanent hire and said so once I asked question 1
Both are better outcomes than the equivalent before, where I would have negotiated myself down to fit a budget that did not fit the work.
The urgent tier, which I almost did not include:
engagements at the £500 urgent rate: 4 of 18
revenue from the £100/day premium: ~£6,200
clients who objected to the tier: 0
Nobody objected. The premium existed in my pricing for a year as an unwritten "I'd want more for that" and earned nothing until it was on a card.
One honest limit: this is eighteen engagements and I cannot separate the sequencing change from two years of additional experience and a better portfolio. The within-sample pattern — that clients who opened with the problem did not negotiate, before and after — is the strongest evidence I have, and it is a correlation rather than a controlled result.
What this generalizes to
The first number on the table sets the comparison. Whatever you quote first becomes the anchor and gets compared to the nearest familiar figure. Choosing what goes first is more powerful than choosing the number.
Establish value before price. Not as a manipulation — as a genuine prerequisite. If neither side knows what the outcome is worth, the price conversation has no denominator and defaults to cost-of-labour.
A published policy is harder to negotiate than a quote. A rate card with tiers and a review date reads as how you work. A number said aloud on a call reads as an opening position, because that is what it is.
Price the thing people actually want. The urgent tier was the single highest-return line on the card, and it existed only as a private preference for a year. If you find yourself thinking "I'd want more for that", write it down as a rate.
Related
- The fixed-price project that cost me three weeks of unpaid work — where the discovery phase came from
- Scope creep is a contract problem, not a communication problem — pricing changes after the engagement starts
- An estimate is a distribution, and you reported the mode — the estimate behind the quote
Keep reading
This is part of Freelancing & consulting for engineers — the commercial side of the work, written from the mistakes. Follow MobileByteSensei for the rest.
One post a week, no digest
New writing when it lands. No roundups, no course pitch, no "10 tips".