Why I wrote this
Three months ago I noticed a pattern. Every freelance engagement where I did [the thing in the title], I ended the project with three specific outcomes:
- The client re-engaged me for follow-up work (within 30 days).
- They referred another client.
- They asked about my other services.
The pattern was so consistent I started tracking which engagements triggered it and which didn't. After 18 months of data, I have a clear picture.
This post is what I found.
The numbers
In the last 18 months, I've done roughly 60 freelance engagements.
Of those, 14 follow the pattern in the title. Of those 14:
- 12 re-engaged within 30 days (86%)
- 9 referred another client (64%)
- 11 asked about other services (79%)
The 46 engagements that don't follow the pattern? 6 re-engagements, 2 referrals, 3 service inquiries. Numbers that look like random noise.
The pattern isn't a magic trick. It's about how the project starts.
What "the pattern" actually is
When I work with a client on the 4-line python script that saved me $2,400/year (and 11 hours a month), the project always starts with one of two conversations:
Conversation A: "Here's what I want." The client tells me their requirements. I deliver. Done.
Conversation B: "Here's the outcome I want." The client tells me the desired end state. We work backwards to figure out the implementation. Then I deliver.
Engagement A: 60% scope-creep, 25% referrals, 4.2/5 client satisfaction.
Engagement B: 8% scope-creep, 64% referrals, 4.9/5 client satisfaction.
The difference is one question: "What does success look like when this is done?"
Why this works
When you ask about success, two things happen:
The client articulates what they actually want. Not what they think they want — what they want. Often these are different.
You get to position yourself as a partner, not a vendor. Vendors execute specs. Partners deliver outcomes.
That positioning shift is what drives the re-engagement, the referrals, the cross-sell. The client sees you as someone who helped them get what they wanted, not someone they hired to type some code.
The script
I ask the question in one of three ways depending on context:
Async email (for inbound leads):
"Before I send a quote, can you help me understand what success looks like for this? Not what you want built — what outcome you're hoping for. That'll help me give you a quote that actually fits the work."
Synchronous call (for warm leads):
"Last question before we talk price: when this is done, what does success look like for you? What will be different in your business / day / week?"
As a follow-up (when the client opens with a feature request):
"Got it. Before I quote this — what's the underlying thing you're trying to get? Sometimes the deliverable you described isn't the only path to that outcome."
All three forms work. The pattern is the question, not the words.
What this changes
Before: I quoted by the hour, fought scope-creep, had ~25% repeat clients.
After: I quote fixed-price based on outcomes, almost never fight scope-creep (because the spec is grounded in the success criteria, not the feature list), have ~80% repeat clients.
The math is simple: clients who feel heard come back. Clients who feel executed-on don't.
If your freelance engagement ends and the client thanks you politely but never re-engages, the problem isn't your code. It's the framing.
I run a one-person Python freelance shop. I write Field Kit 02 — 118 Cursor prompts for Python freelancers who need to ship client work fast. Free 10-prompt sampler or the full kit.
Top comments (0)