Eighteen months. You’ve paid the invoices. You’ve been on the 7am calls. You’ve heard “we’ll fix that in the next sprint” so many times you’ve stopped writing it down. The software still doesn’t do what the spec said, communication takes three days to get a real answer, and your internal team has lost faith in the whole arrangement.

You’re asking the wrong question. The question isn’t “should I cut them?” The question is “why is this happening?” — because the answer determines whether you’re looking at a vendor problem, an engagement model problem, or a problem that will follow you to the next vendor.

Most Offshore Failures Are Not the Vendor’s Fault

That’s not a defense of bad vendors. There are plenty of them. But in my experience auditing offshore relationships that have broken down, the more common cause is that the engagement was set up in a way that made failure nearly inevitable — and the vendor kept saying yes when they should have been saying no.

Here are the actual root causes, in order of how often I see them.

No strong technical owner on your side. Offshore teams need a counterpart who can answer questions quickly, review code, and make technical decisions in real time. If your side of the relationship is a project manager or a non-technical CEO, the team is working with ambiguous requirements, getting answers slowly, and making judgment calls they’re not empowered to make. The work looks like poor quality but it’s actually drift — the team is building their best interpretation of unclear instructions.

Requirements that weren’t requirements. “Build a dashboard” is not a requirement. “Build a dashboard that shows monthly revenue by product line, filterable by date range, accessible to Manager-level roles and above, loading in under two seconds at 1,000 concurrent users” is a requirement. If your specs live in Slack messages and one-hour Zoom recordings, you have a documentation problem masquerading as a delivery problem.

No acceptance criteria. When the vendor delivers a feature, what does “done” mean? If there’s no written definition — specific behaviors, edge cases, performance expectations — then every delivery becomes a negotiation. The vendor says it’s done. You say it’s not. Both of you are right, because you never agreed on what done meant.

The vendor has shuffled your team. This one is common and hard to see from the outside. The experienced developers who were on your project in month three have quietly been moved to a higher-margin new client. Your project is now staffed with junior developers getting up to speed on a codebase they didn’t build, billing you for the ramp-up time. Check your Git history — who’s committing what, and when did the committer profile change?

Timezone gaps nobody actually managed. An eight-hour timezone gap is manageable. A sixteen-hour gap requires deliberate process — async handoffs, documented decisions, tight specs. If nobody designed the workflow for the gap, you’re getting one message per day and two weeks of lost productivity per month.

How to Audit Before You Act

Before you make any decision, do this assessment. It takes two to three weeks and it’s cheaper than starting over.

Pull the last three months of Git commits. How many active contributors? What’s the commit size and quality — are there large commits with vague messages, or small commits with clear changes? Is there a test suite, and is it passing?

Review the last ten tickets delivered against the original requirements. What percentage were delivered to spec on the first pass? What were the most common failure modes — wrong behavior, performance issues, incomplete edge cases, or something else?

Read the last 30 days of communication. How long is the average response time? When you ask a technical question, do you get a technical answer or a vague acknowledgment? Who on the vendor side actually owns the relationship — a project coordinator, or someone with technical depth?

Talk to the team lead directly, without your vendor’s account manager on the call. Ask what’s been the hardest part of this engagement. The answers are usually honest and illuminating.

When to Reset vs. When to Walk

Reset the engagement if: the vendor has capable people, the failure is traceable to an engagement model problem you can fix, and you have the internal capacity to manage them more deliberately going forward. A reset means new specs, new acceptance criteria, a tighter feedback loop, and probably a technical owner on your side with real authority.

Walk away if: the vendor has been shuffling developers and won’t commit to team stability, you’ve already tried a reset and the same problems reappeared, or the code is in a state that would take longer to understand than to rewrite from scratch.

Walking away costs you 6-12 months. There’s a new vendor search, a knowledge transfer that will be incomplete, and a ramp-up period before the new team is effective. That’s not a reason to stay with a bad vendor — it’s a reason to be sure you’ve diagnosed the real problem before you make the call.

What You Should Do This Week

Start by reading the code — or having someone read it for you. The code doesn’t lie about what’s actually been built. Then audit the specs and acceptance criteria. Then look at the team composition over time. By the time you’ve done those three things, you’ll know whether you have a vendor problem or an engagement problem.

This is exactly the kind of situation where a fractional CTO earns their keep — doing the audit, calling the vendor, and telling you what you’re actually dealing with. If your offshore team isn’t delivering and you’re not sure why, let’s spend 15 minutes on it.