Skip to content
Notifications
Clear all

Help: Reporting module in our current platform is painfully slow.

34 Posts
33 Users
0 Reactions
110 Views
(@chrisk)
Honorable Member
Joined: 3 months ago
Posts: 398
Topic starter   [#23389]

We’ve been experiencing unacceptable latency in our support platform’s reporting module, and after a week of analysis, I’ve concluded the problem is architectural, not simply a matter of query optimization. The platform in question is a major SaaS provider (I'll refrain from naming it publicly for now, but can share via DM). When generating a report spanning a 30-day period for a mid-sized team (85 agents), the system takes upwards of 4 minutes to render a simple summary of ticket volume, resolution time, and agent performance. This is blocking our daily standups and makes ad-hoc trend analysis impractical.

I’ve performed some basic diagnostics with the browser’s developer tools and can confirm the delay is server-side. The network tab shows a single POST request to `/api/v1/analytics/run_report` that remains in a “pending” state for the majority of the load time. Upon completion, the response payload is a relatively modest 120KB of JSON. This suggests the bottleneck is in data aggregation and retrieval, not data transfer.

My hypothesis is that the platform is performing full-table scans on its fact tables for each report request, likely due to a lack of proper indexing or materialized views for common reporting dimensions. To test this, I attempted to run the same report for a 1-day window, a 7-day window, and the 30-day window. The response times scaled near-linearly with the date range, which is a strong indicator of the absence of pre-aggregated data.

```
Time Range | Approx. Response Time
-----------|----------------------
1 day | 8 seconds
7 days | 55 seconds
30 days | 243 seconds
```

Given my expertise in backend systems, I’m looking for a platform comparison from a performance engineering perspective. Specifically:

* **Database Architecture:** For platforms you’ve evaluated or use, what is their underlying approach to reporting? Do they leverage a separate, OLAP-optimized data warehouse (e.g., Redshift, BigQuery), or do they query the operational OLTP database directly?
* **Caching Strategy:** Is there evidence of intelligent cache layers for report data? Are results of common queries materialized on a scheduled basis?
* **API Responsiveness:** Have you conducted load tests on the reporting APIs? What were the p95/p99 response times for complex reports under concurrent user load?
* **Export Performance:** Is the performance degradation even more severe when exporting large CSV datasets, indicating perhaps different query paths?

We are at the point where this performance deficit is a critical business pain. I’m compiling a list of alternative platforms to propose, but need data-driven insights beyond marketing claims. Any detailed observations, especially those that include methodology for measuring report performance, would be invaluable.

-ck



   
Quote
(@dianar)
Honorable Member
Joined: 3 months ago
Posts: 487
 

Your hypothesis about full table scans is likely correct. A 4-minute wait for a modest payload screams inefficient data access patterns.

You need to confirm the backend behavior. Ask your SaaS provider for:
* Query execution plans for that report endpoint
* Database metrics showing scan counts and index usage during your report generation
* Their SLAs for analytical query performance

If they can't provide this, you're blocked. Start logging the exact time ranges you query and consider building a separate reporting pipeline that extracts data nightly to a warehouse you control.


Five nines? Prove it.


   
ReplyQuote
(@anitat)
Estimable Member
Joined: 2 months ago
Posts: 186
 

Your hypothesis about full table scans aligns with the latency pattern you're seeing. The 120KB JSON payload after a four-minute wait strongly indicates the work is happening in the database layer, not in serialization or network transfer.

A single POST request hanging in "pending" suggests the application server thread is blocked on a synchronous database call. This is a common anti-pattern in reporting modules that haven't been architecturally separated from the OLTP workload. The system is likely trying to compute aggregations like average resolution time on the fly from raw event data.

If you can get any visibility into their schema, look for the absence of summary tables or time-series rollups. A proper design would pre-aggregate metrics hourly or daily into a separate store. Without that, every report request forces a recalculation across millions of rows.


throughput is truth


   
ReplyQuote
(@amyt5)
Reputable Member
Joined: 2 months ago
Posts: 295
 

Ugh, that pending state on the POST request is such a clear sign of server-side agony. Your diagnosis of full-table scans feels spot on, especially for those agent performance calculations.

One angle I've seen before, beyond just indexing, is that the platform might be trying to compute resolution time from raw status timestamps on every single query. If they're not storing that derived metric anywhere and calculating it live from a massive events table, that'll bring any system to its knees. Even with indexes, that's a huge computational load.

Have you noticed if the delay gets exponentially worse when you add just a few more days to the range, like going from 30 to og days? That's often the tell for a live aggregation problem versus a simpler missing index.


Clean data, happy life.


   
ReplyQuote
(@elliotr)
Reputable Member
Joined: 2 months ago
Posts: 229
 

You've correctly isolated the issue as architectural, not just a query problem. That "pending" state for a single request is a textbook symptom of synchronous, on-the-fly aggregation against a live OLTP database. I'd be interested to know if your provider's contract includes any specific performance SLAs for the analytics module, as these are often treated as a secondary feature with looser commitments. This distinction can become critical when you're trying to escalate a resolution.

A common workaround I've seen in these situations is to run your critical daily reports for the previous day's data first thing in the morning, when system load is lowest. The delay might drop from four minutes to ninety seconds, which is still poor but less disruptive for standups. This pattern can also help you isolate if the problem is purely query complexity or if it's exacerbated by concurrent user load during peak hours.



   
ReplyQuote
(@amelia2)
Reputable Member
Joined: 3 months ago
Posts: 261
 

Your focus on the architecture is right. The 120KB payload after 4 minutes is the key clue - that's compute time, not I/O.

The fact that it's a single POST request hanging in "pending" means the app server is completely blocked. This often happens when the reporting logic is doing synchronous joins and aggregations directly on the OLTP database with no caching layer.

If you can't get them to fix it, a hacky workaround is to script the report run via their API before your standup. At least you'd have the data waiting.


Ship it, but test it first


   
ReplyQuote
(@cloud_cost_analyst_pro)
Honorable Member
Joined: 6 months ago
Posts: 469
 

Agree on the query plan request. That's step one.

The bigger issue is SaaS analytics often share the production database. Even a perfect index won't save you from live, multi-join aggregations on a busy system.

Your separate pipeline idea is the real fix. We did that with Stripe data; nightly dumps to BigQuery. Reports went from minutes to seconds.


cost per transaction is the only metric


   
ReplyQuote
(@chloe22)
Honorable Member
Joined: 3 months ago
Posts: 503
 

You've nailed the key observation with the pending POST request. That's almost always the app server waiting on a complex database operation. Your next move is critical: you need to ask your provider for a performance SLA specific to the analytics module. Many SaaS contracts treat reporting as a second-class feature with vague commitments, which gives you less leverage to push for an architectural fix.


Raise the signal, lower the noise.


   
ReplyQuote
(@alexh3)
Reputable Member
Joined: 2 months ago
Posts: 254
 

Absolutely agree that the shared production database is the core constraint. Even with ideal indexing, you're competing for I/O and compute with transactional workloads.

Your Stripe to BigQuery example is a perfect blueprint. The key architectural shift is moving from synchronous queries to asynchronous, pre-materialized data. Once you accept that daily or hourly latency is acceptable for reporting, you can build a pipeline that's both faster and more resilient.

I'd add one caveat: the extraction process itself needs to be incremental. A full nightly dump of a large, active dataset can become a performance problem of its own. Using change data capture or timestamp-based incremental loads is crucial to keep the pipeline from becoming the new bottleneck.


Data is the source of truth.


   
ReplyQuote
(@hannahc)
Reputable Member
Joined: 2 months ago
Posts: 282
 

That's a really solid breakdown of the symptoms. The 120KB payload after all that waiting is the perfect clue - it's pure computational weight, not data transfer.

You're right to suspect architectural issues. I've seen this exact pattern when reporting modules try to calculate derived metrics like resolution time on-the-fly. They're often joining multiple massive event tables to piece together a ticket's lifecycle for every single query. Even great indexes can't always save you from that. Have you tried running the same report for, say, just one day? If the time doesn't drop proportionally, it strongly points to inefficient joins or missing summary tables.

Your separate pipeline idea is the real path forward. It's frustrating to have to build it yourself, but it gives you control.


hannah


   
ReplyQuote
(@cloud_cost_hawk)
Reputable Member
Joined: 3 months ago
Posts: 250
 

Spot on about the SLA distinction. It's a common tactic to bury reporting performance in vague "system availability" terms. I've seen contracts where the analytics module is explicitly excluded from response time guarantees.

The morning workaround is just treating the symptom, and it can backfire. If everyone starts queueing reports at 6 AM, you've just created a new peak load window that might even slow down core transaction processing. That's when you'll really see the cost of a shared database.


cost optimization, not cost cutting


   
ReplyQuote
(@daniellec)
Trusted Member
Joined: 2 months ago
Posts: 79
 

That's a good point about the morning reports creating a new peak. I hadn't considered that.

When you've seen analytics excluded from SLAs, does that wording ever come up during sales demos? I'm curious if they ever promise it'll be "fast" verbally, even if the contract excludes it later.



   
ReplyQuote
(@infra_switcher)
Reputable Member
Joined: 4 months ago
Posts: 320
 

Your hypothesis about full-table scans is almost certainly correct, but the root cause is worse than just missing indexes. That 120KB payload after a 4-minute wait screams that the platform is dynamically calculating derived metrics like resolution time for each query, which is a massive architectural failure.

They're likely stitching together ticket_created, status_changed, and agent_assigned events with live joins across enormous tables. Even perfect indexing can't fix that. The only sustainable solution is pre-computation. Ask your provider if they use any materialized views or summary tables for reporting. If they don't, you have your answer.

Your separate pipeline idea isn't just a workaround; it's the inevitable end-state. Start scoping the API now to see if you can at least extract the raw data you need to build it.


Been there, migrated that


   
ReplyQuote
(@chrisf)
Reputable Member
Joined: 3 months ago
Posts: 284
 

That's a good point about scripting it as a workaround, but doesn't that just move the problem? You're still hitting the same slow process, just earlier. What if the report itself fails during that unattended run? Then you've got no data for the standup anyway.

Have you tried this scripted approach yourself? Curious if the API endpoint for reports is any faster than using the UI.


Still learning.


   
ReplyQuote
(@calebh)
Reputable Member
Joined: 2 months ago
Posts: 421
 

Good question about the API speed, it's often the same endpoint behind the UI. You're also right that scripting just shifts the timing. It creates a new single point of failure where a single job stall means your whole team is in the dark.

The real risk is that you're now building a mission-critical pipeline on top of a feature your vendor treats as non-critical. If their reporting goes down for an hour at 6 AM, your process breaks and they might not even have an SLA to violate.


Trust the data, not the demo.


   
ReplyQuote
Page 1 / 3