Failure PatternDecision layer
The Tenant-Sprawl Trap: Why Embedded Analytics Stalls Agency Delivery in Month 3
Symptom: Each client tenant carries its own hand-built dashboard set, so a 12-client portfolio means 12 separate build queues and no shared release calendar. Root cause: Agencies treat each client portal as a bespoke product rather than an instance of a shared template, so every tenant inherits its own schema, chart library, and naming conventions.
By InnovaAI ResearchPublished
How do you recognize it?
- •Each client tenant carries its own hand-built dashboard set, so a 12-client portfolio means 12 separate build queues and no shared release calendar.
- •Delivery leads quote two to three weeks for a new client dashboard because nothing from the previous engagement is reusable.
- •Support tickets arrive as one-off tenant requests (a renamed metric, a new filter, a reordered chart) rather than product-level feature requests.
- •Margin on the analytics line item drifts below the retainer's blended target by the third billing cycle, even though the client count has not changed.
- •Engineers describe the embedded layer as 'the thing we rebuild every time' while the underlying platform (Luzmo, Qrvey, Sisense, or Reveal) sits largely underused.
Why does it happen?
- •Agencies treat each client portal as a bespoke product rather than an instance of a shared template, so every tenant inherits its own schema, chart library, and naming conventions.
- •Multi-tenant features that ship with the platform (row-level security, tenant-scoped data models, reusable component libraries) go unconfigured because the first client was built before anyone needed them.
- •Sales scopes embedded analytics as a fixed monthly line item without a change-request boundary, so tenant-level customization requests land in delivery with no billable path.
- •No one owns the template. The first dashboard set becomes the de facto standard by accident, and later clients are built by whoever is free rather than against a maintained baseline.
How do you fix it?
- •Freeze new tenant builds for one sprint and inventory every dashboard across active clients, tagging each as template-derived, one-off, or dead.
- •Pick the two most-requested dashboard patterns and rebuild them once as a parameterized template with tenant variables, then migrate the next three clients onto it before accepting new work.
- •Add a written change-request clause to the analytics retainer: tenant-specific dashboards beyond the template are quoted separately at a fixed day rate.
- •Assign one named owner for the embedded analytics template and give them a standing weekly slot to absorb tenant requests into the shared baseline instead of patching individual clients.