The engineers who pitched are not the engineers writing the code
In short
Confirm a team substitution by comparing three records against the names in the proposal annex: commit authorship, pull-request reviewers, and who attends the working sessions rather than the demos. A mismatch across all three in the first month is a substitution; a mismatch in one is usually a specialist rotation nobody bothered to explain.
Key takeaways
- The observable is commit authorship against the proposal annex, not a feeling that the calls have got vaguer.
- Check three records together — commits, reviewers, working-session attendance — because any one on its own has an innocent explanation.
- Four causes produce the same symptom, and only one of them is bad faith; the response has to match the cause.
- Timestamp and author-email patterns are what expose an undisclosed subcontract, which is the cause with real security and continuity consequences.
- Escalate in order: ask in writing, reissue the annex, invoke the notice period, shrink the scope, then re-let. Skipping to the end costs you the work already done.
You can settle this in an afternoon, and you should, because the version of the conversation that starts with an impression never ends anywhere. Pull the commit log for the last three weeks, list the authors by volume, and compare that list against the names in the proposal. The gap between those two lists is the whole diagnosis.
What you do next depends on which of four things produced the gap. Only one of them is the thing people mean by bait and switch, and the responses that fit the other three are much cheaper.
The three records that settle it
Take all three together. Any single one has an innocent explanation; all three pointing the same way does not.
| Record | What to pull | What a substitution looks like |
|---|---|---|
| Commit authorship | Author name and email by commit count over the last 3 weeks on the delivery branch | Names absent from the annex accounting for most commits |
| Pull-request reviewers | The reviewer field on the last 30 merged pull requests | Reviews only ever by one person, or by nobody named in the annex |
| Working sessions | Attendance at standups and design sessions, not demos | Annex names appear at demos and client calls only |
| Commit timestamps | Author time-zone offsets and hour-of-day distribution | A consistent block of work in a zone nobody in the annex works from |
Do this at the end of week 3, not week 12. Three weeks is long enough for real work to exist and short enough that a correction is still cheap. If you have no repository access at all, that is a finding in itself and a much larger one than staffing.
Four causes that produce the same symptom
1. A specialist rotation nobody explained
The most common cause, and mostly harmless. A data engineer appears for the migration, a mobile specialist for two sprints, an evaluation engineer to build the labelled set that a release gate depends on — the work described in turning production traffic into labelled cases. Signature: the new names appear alongside the annex names rather than instead of them, and their commits cluster in one part of the codebase. Response: ask for the rotation plan and have it added to the annex. This is a communication failure, not a staffing one.
2. The senior was pulled onto a sales cycle
Small firms pitch with their strongest engineers because that is who wins work, and those engineers are then needed for the next pitch. Signature: the named lead is still present at demos and client calls, with commit volume that has fallen steadily rather than stopped, and pull-request reviews that arrive later each week. Response: convert the expectation into a number. A lead at 20% who reviews everything is a defensible arrangement; a lead at 20% still described as leading delivery is not — the artefacts that make this checkable are set out in what a dedicated team does not promise.
3. An undisclosed subcontract
The one with consequences beyond delivery quality. Signature: author emails on an unfamiliar domain or personal addresses, a work pattern in a time zone nobody mentioned, no overlap with your working hours, and reviewers who never speak on calls. This matters for reasons that are not about skill — an undisclosed party has your repository access, possibly your data, and sits outside whatever the contract says about subprocessors and confidentiality. Response: stop treating it as a staffing conversation and ask for the subcontracting position in writing, along with the access review.
4. The bid was staffed with people who were never free
The genuine failure. Signature: the annex names have zero commits, zero reviews and no working-session attendance from day one, and the substitute names were not introduced at all. This is usually visible in the proposal before signature if you know what to read for — a team section with no allocation percentages and no start dates is a team section that was written to be flexible, which is one of the tells in reading a proposal as a diagnostic.
A rotation you were told about is a staffing decision. A rotation you discovered is a disclosure problem, and the disclosure problem is the one that predicts what else you have not been told.
The response that matches the cause
| Cause | Signature | Response |
|---|---|---|
| Specialist rotation | New names alongside old, commits clustered by area | Request the rotation plan; add it to the annex |
| Lead pulled to sales | Falling commit volume, slower reviews, still at demos | Fix an allocation number and a review turnaround, in writing |
| Undisclosed subcontract | Unfamiliar email domains, foreign-zone commit hours | Written subcontracting position, plus an access review |
| Bid staffed with unavailable people | Annex names at zero from day one | Reissue the annex or stop work at the next milestone |
One pattern worth watching across all four: a substitution and a sudden increase in change requests often arrive together, because a team that did not scope the work does not recognise what the brief implied. If both are happening at once, read everything is now a change request alongside this page, because the underlying cause may be single.
Escalating without burning the work
In order, because each step costs more than the last and most engagements resolve at step 2.
- Ask in writing, factually. "The annex names A and B. Weeks 1 to 3 show 4 commits from A, none from B, and 61 from C and D, who are not in the annex. Can you explain the staffing?" Numbers make the reply concrete; adjectives invite reassurance.
- Require a reissued annex. Names, roles, allocation percentages, start dates. If the substitutes are genuinely good, this costs the supplier nothing and settles the matter.
- Invoke the notice period if you have one, and if you do not, agree one now for the remainder. A supplier acting in good faith will accept a forward-looking notice term even where the contract lacked it.
- Shrink the horizon. Move from an open-ended engagement to a bounded milestone with a defined output. This limits exposure while the substitutes prove themselves, and it is reversible in a way that termination is not.
- Re-let, but only after the current milestone lands. Stopping mid-milestone leaves you owning half-finished work with no author available to explain it, which is a worse position than the one you are trying to leave.
When the substitution is not the real problem
Two situations are worth separating out before you spend goodwill on this. The first is where the substitutes are producing better work than the people who pitched, which happens more often than the industry admits — the strongest presenter is not reliably the strongest engineer. If velocity, review quality and defect rate are all fine, the complaint is about process rather than outcome, and the fix is disclosure discipline, not a personnel change.
The second is where the code has genuinely deteriorated and staffing is only the visible half. Rising defect counts, longer review cycles and a codebase drifting from the agreed architecture are worth measuring on their own terms, because they persist through any staffing change. If you are at that point, scoping a bounded piece of work with a clear definition of done — the shape we run as MVP and product builds — is a more useful next step than arguing about names.
The surrounding decisions, from vendor selection through to what a supplier can reach inside your systems, are mapped across deciding what to build and who builds it in the library.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Is swapping engineers after signing actually a breach of contract?
Usually not, unless the contract names individuals or sets a notice period — and most do neither. Standard terms give the supplier the right to staff as it sees fit, so the leverage you have is commercial and reputational rather than legal. That is exactly why the annex, the allocation percentage and the notice term are worth negotiating before signature: they convert a grievance you cannot act on into a term you can.
How many weeks should I wait before raising it?
Raise it at the end of week 3. That is long enough for a real commit history to exist and early enough that reissuing the annex is a small correction rather than a confrontation. Waiting until week 12 means the substitutes now hold most of the context, which makes every response you have more expensive and makes the supplier's position stronger, not weaker.
What if the supplier will not give us repository access?
Treat that as a bigger finding than the staffing question. Without access you cannot verify authorship, review quality, test coverage or dependency hygiene, and you are accepting the supplier's self-report on all four. Some suppliers restrict access until a payment milestone; that is negotiable. A refusal on principle for work you are paying to own is not a staffing issue at all, it is a question about who ends up controlling the asset.
Does a rotation of specialists mean the supplier oversold the team?
No — rotation is usually correct engineering. A migration specialist for 3 weeks or an evaluation engineer for 2 sprints produces better work than keeping generalists on the task for the same money. What is not correct is discovering the rotation from a commit log. The test is whether it was planned and disclosed, not whether the faces changed.
- vendor management
- delivery
- procurement
- diligence
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- "Dedicated team" defined by what it does not promiseThe phrase commits a supplier to almost nothing on its own. What it usually means in practice, and the three artefacts that turn it into something you can verify.definition
- Everything is now a change requestArguing about whether a change request is fair goes nowhere. Sorting the last 10 into 3 buckets says whether the bid was underscoped, the scope grew, or nobody decided.diagnostic
- Finance sent it back again and did not say whyA second rejection with no stated reason is not obstruction. Ask which number would have to change for approval, and the reply identifies which of four defects you have.diagnostic
- The supplier you want cannot pass a policy written for someone elseProcurement policies rarely require a certificate universally. They require one when a condition is met, and four of those conditions can be changed by how the engagement is designed.diagnostic
- Total cost of ownership is a structure, not a numberA single total cost figure tells you nothing. The structure does: four phases, a fixed list of line items, filled in identically for every option you are comparing.definition
- It worked on five hundred documents and broke at fifty thousandNothing regressed when the corpus grew. A candidate budget that comfortably held the answer at 500 documents now competes against a hundred times as many near-neighbours, and k never moved.diagnostic
Related across the site
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation