A boutique CE practice running five to eight migrations a year isn't unusual: mid-market clients, Dynamics 365 CE implementations, a full delivery cycle that includes data migration. Each project is scoped at a fixed fee and delivered by a team of two or three consultants.
On each of those projects, the duplicate workstream involves some combination of:
- Configuring or extending a custom plugin for the entities in scope
- Setting detection headers on one or more integration connectors
- Running and batching a post-migration bulk detection job
- Investigating and merging duplicates that got through
- Handling go-live escalations when the client finds duplicates in the first week
Conservatively, that's eight to twelve hours per project when the workaround behaves as expected. When it doesn't, a new integration connector, a custom entity that wasn't in the plugin scope, a larger-than-expected dataset, the hours climb.
At eight projects a year, the low end is 64 hours. The high end, on projects where something unexpected surfaces, is closer to 120.
The hours that don't make it onto the timesheet
The 64-to-120-hour range only captures the work that gets logged. There's a second category that doesn't.
Tribal knowledge transfer. The consultant who built the workaround on project one has context that isn't documented anywhere. When a new consultant joins project four, someone has to get them up to speed. That handoff happens informally, over Slack or a quick call, and it doesn't go on a timesheet. It comes out of someone's afternoon.
Go-live firefighting. When duplicates surface at go-live, the response is rarely calm and methodical. The consultant who owns the data workstream gets on a call with the client, pulls up the environment, and diagnoses in real time. That hour or two isn't pre-scoped. It's absorbed.
Post go-live cleanup requests. Clients find duplicates after sign-off. They raise a support ticket or call the practice lead directly. The practice decides whether to treat it as a warranty item or bill for it. Either way, someone does the work.
Add those categories together, and the annual cost of the dedupe workaround starts to look less like a rounding error and more like a mid-level consultant's monthly capacity.
The fixed-fee problem
Time-and-materials engagements can absorb overruns. Fixed-fee engagements can't, not without a conversation about scope.
Most boutique CE practices run fixed fees. It's what clients want, and it's what separates a practice that knows its delivery well from one that doesn't. The risk of a fixed-fee model is that every unscoped hour comes directly off the bottom line.
The duplicate workstream is almost always underscoped, not because practice leads are careless, but because the workaround behaves differently on every project. The entity model is different. The integration connectors are different. The dataset size is different. The same workaround that took four hours on the last project can take ten on this one, and there's no reliable way to predict which it'll be at proposal time.
The result is a cost that gets absorbed rather than billed, repeated across every engagement, and never quite large enough on any single project to force a conversation about it.
What the cumulative number looks like
Using a conservative billing rate of $100 an hour, low for a senior consultant at a boutique practice, and a mid-range estimate of ten unscoped hours per project:
- 5 projects a year: $5,000 absorbed annually in unscoped duplicate work
- 8 projects a year: $8,000
- 10 projects a year: $10,000
These aren't dramatic numbers in isolation. But they represent margin that was earned and then given back, on work that doesn't differentiate the practice, doesn't build client relationships, and doesn't make the next project any easier.