Tag: Client Management

  • How a Client Got a Full Refund Six Months After an Order Was Completed — And What I Learned

    As a freelancer, one of the hardest lessons to learn is that finishing a project does not always mean the project is truly finished.

    I recently experienced a situation where a client received a completed project, the order was accepted, and the original scope had effectively been delivered. Months later, however, the client requested significant changes to the project.

    What followed eventually resulted in a full refund of the original order amount — approximately six months after the order had been completed.

    This experience changed the way I think about project scope, revisions, acceptance, documentation, and what freelancers should do when a client wants to fundamentally change an already completed project.

    The project was completed

    The project originally had a defined scope and price.

    I completed the work according to that scope, delivered the agreed functionality, and the client accepted the order.

    At that point, from a normal freelance-project perspective, the transaction should have been closed.

    The important lesson here is that an accepted order creates a psychological sense of finality, but freelancers should not assume that the risk has completely disappeared.

    I now believe that completion and acceptance are only one part of protecting yourself.

    The other part is maintaining a clear record of:

    • What was originally requested
    • What was actually delivered
    • What the client approved
    • What revisions were included
    • What changed later
    • When those changes were requested
    • Whether the new request materially changed the architecture or workload

    Then the requirements changed

    Several months after the original order was completed, the client requested a major change.

    This was not simply a small correction or a minor bug fix.

    The requested change affected the underlying way the system obtained and processed its data.

    Initially, I treated the request as a goodwill gesture rather than immediately treating it as a completely new project.

    That decision is something I have thought about a lot since then.

    As a freelancer, it is natural to want to help a long-term client.

    You think:

    “I already know the project. I’ll take care of this small change.”

    The problem is that something that looks small from the client’s perspective can become a completely different engineering problem.

    A change in the data source, architecture, workflow, validation requirements, or external dependencies can have consequences throughout the entire system.

    What starts as “just change the source” can become:

    new ingestion → new parsing → new normalization → new caching → new testing → new diagnostics → new failure handling → new documentation → new acceptance criteria.

    At that point, it is no longer simply a revision.

    It is a new engineering phase.

    The hidden cost of saying “I’ll do it for free”

    This was probably the biggest lesson for me.

    When I agreed to look into the change without immediately charging a new project fee, I intended to provide good customer service.

    Instead, I gradually became responsible for work that was significantly larger than the original request.

    The more I investigated the new requirements, the more complexity became visible.

    There were new technical questions, testing requirements, external-source issues, diagnostics, caching considerations, and additional acceptance expectations.

    The amount of engineering effort grew substantially.

    And this created an uncomfortable situation:

    The client viewed the work as a continuation of the original project.

    I increasingly viewed it as a materially different project.

    That difference in perception is dangerous.

    The most important lesson: define “change” before doing it

    A freelancer should not ask only:

    “Can I technically make this change?”

    The more important question is:

    “Does this change remain inside the original commercial scope?”

    Those are two completely different questions.

    A technically possible change can still be commercially outside the original agreement.

    For example, these may look like minor requests:

    • “Use another source.”
    • “Change the input format.”
    • “Add another validation layer.”
    • “Make it work with this external service.”
    • “Add comprehensive unit testing.”
    • “Add diagnostics.”
    • “Provide evidence for every component.”
    • “Change the architecture.”

    But each can potentially create substantial additional work.

    The freelancer has to identify that boundary early.

    Six months changes the situation — but does not eliminate risk

    One of the most surprising parts of this experience was the timing.

    The original order had been completed approximately six months earlier.

    From the freelancer’s perspective, the project was old.

    From the client’s perspective, however, the client was still looking at the overall project and raising concerns about what they believed remained incomplete.

    That taught me something important:

    Time alone does not protect a freelancer from a scope dispute. Documentation does.

    A freelancer should be able to open the project history months later and immediately demonstrate:

    1. What the original agreement said.
    2. What was delivered.
    3. What the client accepted.
    4. What changed afterward.
    5. Why the later request required additional work.

    Without that record, a dispute can become a matter of interpretation.

    The full refund was the hardest lesson

    Eventually, the situation resulted in a full refund of the original order amount.

    For a freelancer, this is more than simply losing the money.

    There is also the opportunity cost.

    The time spent investigating, developing, testing, documenting, communicating, and trying to resolve the dispute cannot be recovered.

    And if substantial unpaid work has been performed after the original order, the freelancer can end up in an especially difficult position:

    The original project has already been delivered, but the freelancer has also invested significant additional time trying to accommodate a later change — and ultimately receives nothing for either phase.

    That is an extremely expensive lesson.

    What I would do differently now

    If I faced the same situation again, I would handle it differently.

    1. Freeze the original scope

    Once an order is completed and accepted, I would clearly distinguish between:

    Original scope

    and

    New requested work.

    I would not automatically assume that a later request is a revision.

    2. Perform a change-impact assessment

    Before writing code, I would explain:

    “I can investigate this change, but first I need to determine whether it can be implemented within the existing architecture and scope.”

    That small sentence can prevent a major misunderstanding.

    3. Separate investigation from implementation

    Investigation itself can require significant engineering time.

    A better process is:

    Phase 1 — Assessment

    Determine feasibility, architecture impact, estimated effort, risks and dependencies.

    Phase 2 — Proposal

    Provide a separate price and timeline.

    Phase 3 — Implementation

    Begin development only after the new scope is approved.

    This prevents “free investigation” from quietly turning into months of unpaid development.

    4. Never rely on goodwill as a substitute for scope

    Goodwill is valuable.

    But goodwill should have boundaries.

    A freelancer can say:

    “I’ll take a quick look at this as a courtesy.”

    But that should not automatically become:

    “I’ll rebuild the system around this new requirement for free.”

    5. Put material changes in writing

    If the client changes an important requirement, document it explicitly.

    For example:

    “The original implementation used Source A. You are now requesting Source B. This changes the ingestion architecture and therefore requires additional development.”

    That single statement establishes a written record of the change.

    6. Don’t let sunk costs dictate the next decision

    Another trap is thinking:

    “I’ve already spent 30 hours on this, so I should keep going.”

    That can become:

    30 hours → 50 hours → 80 hours → 100 hours.

    At some point, continuing is no longer protecting the original investment.

    It is increasing the loss.

    A better question is:

    “If I had not already spent any time on this, would I agree to take on this new scope for the current price?”

    If the answer is no, stop and renegotiate.

    What clients can learn from this too

    This is not only a freelancer lesson.

    Clients also benefit from clearly separating:

    bug fixes,
    revisions, and
    new requirements.

    A freelancer should not be expected to absorb an architectural change simply because the change relates to the same product.

    If the underlying requirement changes, the commercial agreement may need to change as well.

    That is not necessarily a sign of a difficult freelancer.

    It is often simply good project management.

    The real lesson

    The biggest lesson I took from this experience is not:

    “Never help a client.”

    It is:

    “Help clients, but never allow goodwill to replace a clearly defined scope.”

    I still believe that good freelancers should be flexible.

    Sometimes you should fix something without charging.

    Sometimes you should help a client with a small change.

    Sometimes you should go beyond the written requirements because building a good relationship matters.

    But there needs to be a clear boundary between customer service and taking responsibility for an entirely new project.

    When that boundary disappears, everyone can end up with a different understanding of what was agreed.

    And when that disagreement surfaces months later, the freelancer may discover that the cost of being generous was much higher than expected.

    My advice to other freelancers

    If you are a freelancer, especially if you work on custom software or development projects, I would strongly recommend keeping a simple project record containing:

    • Original scope
    • Original price
    • Delivery date
    • Acceptance date
    • Client approvals
    • Revision history
    • New requirements
    • Change requests
    • Additional estimates
    • Additional approvals
    • Major technical decisions
    • Final delivery evidence

    And perhaps most importantly:

    Do not start substantial work on a materially different requirement simply because you want to be helpful.

    First determine what changed.

    Then determine what it will take.

    Then agree on the new scope.

    Then start.

    Because sometimes the most expensive sentence a freelancer can say is:

    “Don’t worry, I’ll do this one for free.”