The pilot with no production owner
Symptom: A pilot ships, gets a good reaction in the room, and then sits untouched for months because nobody on either side is actually responsible for pushing it into production.
Root cause: The kickoff named a project, not a person. Accountability was implied by "the team is on it" rather than assigned to someone with the authority to act.
The clause that prevents it: Name a production owner, on both sides, in the kickoff document itself, before the pilot starts, with an explicit decision date for graduate-or-stop.
Most common in Big consultancy or systems integratorOffshore or generalist dev shop
Demo-driven scope
Symptom: The system looks finished in a conference room on curated examples, then falls apart on the first messy, real-world input a week after launch.
Root cause: The engagement optimized for the thing that gets sign-off, a good demo, rather than the thing that survives production, because nobody wrote down what "done" actually meant.
The clause that prevents it: Define the eval set and its pass/fail conditions in the statement of work itself, before a single demo is built.
Most common in Offshore or generalist dev shopFreelancer or fractional lead
The Eval Stack The black-box handover
Symptom: The engagement ends, the invoice is paid, and the client discovers nobody in-house actually understands how the system works or can safely change it.
Root cause: Documentation and knowledge transfer were treated as a nice-to-have at the end of the project rather than a deliverable specified at the start.
The clause that prevents it: Make documentation and a knowledge-transfer session an explicit, named deliverable in the contract, with its own sign-off separate from the code shipping.
Most common in Big consultancy or systems integratorFreelancer or fractional lead
Model lock-in by omission
Symptom: A provider raises prices or deprecates the exact model the system depends on, and switching turns out to mean a rewrite, not a config change.
Root cause: Nobody made model-agnosticism an explicit requirement, so the fastest path to a working demo, calling one provider's SDK directly everywhere, became the permanent architecture.
The clause that prevents it: Require a model-agnostic abstraction layer as a named technical requirement in the contract, not an assumed best practice.
Most common in Offshore or generalist dev shopFreelancer or fractional lead
Glossary: Model-Agnostic Architecture Seniority bait-and-switch
Symptom: The senior names who ran the pitch and impressed everyone in the room are nowhere near the team actually doing the work three weeks later.
Root cause: Staffing on the proposal was aspirational, or a sales asset, and nothing in the contract tied the named individuals to the delivered work.
The clause that prevents it: Name the actual staffed individuals in the contract, with a defined process, and client sign-off, for any substitution.
Most common in Big consultancy or systems integrator