At a Glance

I was brought in as a technical advisor to identify and analyze a reporting environment that was buckling under its own weight. Over several weeks we did deep, evidence-based analysis, evaluated eight solution paths, and converged on an architecture that was, by every technical measure, the right answer: a relational (star schema) dimensional model that preserved correctness while cutting the footprint.

The engagement still closed unsuccessfully. Not because the architecture was wrong, but because of two things that had nothing to do with data modelling: the organization was not ready to have a hard conversation with its own report consumers, and it expected the new model to be magic — testing it for raw speed before ever confirming it produced correct results.

This is the story of how a technically sound solution can fail, and the signals I will never ignore again.

Technically sound
Deep evidence-based analysis. Eight solution options evaluated and rated. A correct star schema recommendation with a working proof-of-concept.
Still closed unsuccessfully
Organisational readiness was absent. Expectations were never set. Trust eroded before the model was ever judged on its actual merits.
The environment
~70 GB reporting source on Tableau Server. ~200M+ rows. Hundreds of fields. Hundreds of connected dashboards. One 9,000-line stored procedure doing everything.
The lasting lesson
Correct architecture is necessary — but not sufficient. Readiness, expectations, and trust are equally decisive.
The Architecture of Success: Technical Soundness vs Project Delivery — correct architecture is necessary but not sufficient; organizational readiness and expectations decided success

Correct architecture is necessary, but not sufficient. What actually decided success was on the other side of the scale.


The Engagement

A large, mature reporting environment under its own weight

The client was a multi-brand consumer subscription business. Their analytics team ran a large, mature reporting environment built on a single, very wide reporting source — roughly 70 GB, several hundred columns, and over 200 million rows, feeding hundreds of connected dashboards and workbooks. It was assembled by a single, sprawling stored procedure on the order of 9,000 lines that rebuilt the whole thing on a schedule.

The presenting problem was familiar: the nightly data refresh kept failing, data arrived late in the day, and the environment was pushing against the size limits of their cloud analytics platform. I was asked to find a way to make it reliable and sustainable.


The Approach

Eight options, one hard constraint, one clear answer

I did the work properly. I reverse-engineered the procedure, profiled the volume and width, audited field-level usage across hundreds of fields, and reconciled every recommendation against the client’s own run logs and workbook internals rather than assumptions. I framed eight distinct solution options — from simply pre-aggregating history, through incremental refresh, to a full platform shift — and rated each on complexity, achievement, cost, and timeline.

One hard constraint shaped everything: because the same customer and order identifiers recurred across products, any approach that summarised above the transaction line broke the distinct counts the business depended on. That single fact ruled out the “just make it smaller” answers and pointed to a dimensional model that kept the grain intact while moving repeated width into small, reusable dimensions.

The proof-of-concept had one job above all others: demonstrate that the new model returned the exact same distinct counts as the current system while being smaller and lighter. That correctness check was designed to be the gate before anything else.

The finalised recommendation was a logical star schema built in the analytics tool’s relationship layer — most of the benefit of a full re-architecture, achievable in weeks rather than months, with correctness preserved. I built field-level model maps, mapping documents, diagrams, and a working proof-of-concept. By the numbers, the analysis was some of the most thorough work I have done. And that is precisely why the outcome was instructive.


Where It Unravelled

Two failure modes, neither of them the architecture

Reason one: the conversation the client would not have

The real problem underneath the failing refresh was not a modelling problem. It was demand. Over years, every new report request had been answered by bolting another requirement onto the same monolith. The backend was not “broken” so much as it was carrying the weight of an ungoverned set of consumer requirements, no two of which had ever been rationalised against each other.

A durable fix required the client to go back to their report consumers and say, in effect: “The way we have been giving everyone everything is what is blowing up the source. We need to sit down, organize these dashboards around specific business problems, and define the specific data each one actually needs.” That is a political conversation, not a technical one — and the organization was not willing to have it. Without it, any backend fix was treating a symptom while the cause kept growing.

The Iceberg of Data Failure: Stated vs Real Problems — above waterline: nightly refreshes fail, data arrives late, systems exceed size limits. Below: years of ungoverned reporting demand bolted onto one monolithic unrationalised source

A backend fix treats the tip of the iceberg. The mass — years of ungoverned reporting demand — keeps growing until someone manages demand rather than symptoms.

Reason two: expecting magic, and testing in the wrong order

The team expected the relational model to deliver dramatic results the moment it was connected. Instead of first running the correctness check the proof-of-concept was built for — does it reconcile, does it return the right numbers — they jumped straight to stress testing it for raw performance. When early, untuned performance did not look magical, they concluded the approach itself was unviable.

This inverted the entire validation logic. A logical model’s value is proven first by correctness and footprint, then tuned for speed. Leading with a stress test on an unproven, untuned model almost guarantees a disappointing first result — and a disappointing first result, framed as “the model does not work,” is very hard to recover from.

Validation Sequences: The Path to Trust vs The Path to Failure — intended path: correctness first then footprint then performance. What happened: straight to stress test, flawed conclusions, trust lost

The sequence of testing determines whether a project earns stakeholder confidence or loses it entirely. Never let the first test of a new model be a stress test.


The Root Cause

Two forces. Neither was the architecture.

If I strip away the specifics, two forces closed this project, and neither was the architecture:

An organizational readiness gap. The solution required the client to manage demand and reset expectations with their own stakeholders. They preferred to keep the peace with consumers rather than renegotiate what those consumers received. A technically correct solution that depends on organizational change will not survive an organization unwilling to change.

A trust-and-expectations gap. “Magical results” set an impossible bar, and a premature stress test gave everyone a reason to walk away before the model was ever judged on its actual merits. Once trust erodes, the quality of the underlying work stops mattering.


What to Watch Out For

Seven signals and safeguards for advisory work

These are the signals and safeguards I took away — useful for anyone doing advisory or platform-modernisation work.

1
Diagnose organizational readiness before committing to a technical path
If the fix depends on the client having a hard conversation with their own stakeholders, confirm they are willing and sponsored to have it — at kickoff, not at delivery.
2
Treat the stated problem as a hypothesis
The presenting symptom was a failing backend. The real problem was ungoverned reporting demand. Name the actual problem, and be honest when it is a business or political problem wearing a technical costume.
3
Align on success metrics before testing begins
Define how success is measured — correctness, footprint, then speed — and get explicit written agreement on the validation sequence before a single test runs.
4
Separate “prove it’s correct” from “prove it’s fast” — make correctness a gate
Never let the first test of a new model be a stress test. Performance testing on an untuned, unproven model almost guarantees a misleading and demoralising first result.
5
Kill the expectation of magic, early and repeatedly
Architecture is a lever, not a miracle. Say plainly what it will and will not do. Under-promise the first result on purpose. With leadership in the room, not just practitioners.
6
Protect the narrative and the sequence of proof
You can lose a viable solution to a single mis-framed test. Co-own the test plan and the story told about early results, especially when the client controls execution.
7
Avoid “the big reveal” — iterate and share progress frequently
Share work in progress. A disconnect at the project’s end is avoidable if you have been iterating on feedback throughout, rather than delivering a finished recommendation in isolation.
What to Watch Out For: Seven Watch-Outs for Advisory Engagements — diagnose readiness, treat stated problem as hypothesis, align on success metrics, make correctness a gate, kill the expectation of magic, protect sequence of proof, avoid the big reveal

Seven watch-outs for advisory and platform-modernisation engagements — the reference checklist for anyone doing this kind of work.


What I’d Own, and Do Differently

It would be easy to file this under “the client was not ready”

That would be partly true and entirely useless. What I would do differently is mine to own:

I would have assessed organizational and political readiness as deliberately as I assessed the stored procedure — and surfaced the demand-governance conversation as a precondition, not a footnote.

I would have made the correctness gate a hard, agreed checkpoint with a named owner, so that “we stress-tested it and it was slow” could not become the first and final verdict.

I would have managed the expectation of “magic” more forcefully and earlier, in writing, with the client’s leadership in the room — not just their practitioners.

Reframing Success: From Technical Fixes to Demand Governance — left: fix the backend (symptom fixing, report consumers isolated). Right: govern the demand (collaborative centre, analytics team and report consumers aligned around business problems)

The hardest work was not the model. It was the conversation about who gets what, and why.


Closing Reflection

The first genuinely less-successful project of my career

This was the first genuinely less-successful project of my career, and I have come to value it more than several that went smoothly. The engineering was sound; the analysis was thorough; the model was right. And none of that was enough, because success in advisory work is decided as much by readiness, expectations, and trust as by architecture.

Solving the right problem the right way still fails if the organization is not ready to change and the expectations were never set.

I no longer treat those as soft, secondary concerns. They are the engagement.

If you are wrestling with a reporting environment that keeps buckling, the hardest and most important work may not be the model at all. It may be the conversation about who gets what, and why.

About the Author
Rashid Haq
Enterprise Analytics Architect · 22+ Years

Analytics architect and practice leader with 22+ years delivering enterprise analytics. This retrospective is shared in the spirit of honest professional reflection — the engagements that teach most are not always the ones that go smoothly.

Back to all case studies View Capabilities