Back to resources

Resources

Why reporting breaks as the roster grows.

The setup that was fine for five clients fails at thirty, and it fails in three specific ways.

  • 6 minute read
  • 5 sections

Part 1

The setup that stops scaling

A dashboard connected straight to a platform's API, pulling live whenever somebody opens it. It is the fastest thing to build and it is genuinely the right answer at the start.

What breaks it is not the volume of data. It is the number of calls, and that number is clients multiplied by reports multiplied by viewers multiplied by how often each one refreshes. Add a client and you have not added a row, you have added another multiplier.

Part 2

The three ways it fails

None of these announces itself as a data problem. All three look like the reporting tool being slow or flaky, which is why they get lived with for longer than they should.

  • Quotas

    Platforms cap how many requests an account may make in a period. Cross the line and reports error or return nothing, usually for everybody at once, and usually on the day of the month when everyone is opening them.

  • Sampling

    Some APIs answer a large query from a subset of the data and return an estimate. It does not always say so clearly, so two people can pull what they believe is the same report and get two figures, with no error anywhere to explain it.

  • Timeouts

    A report drawing on several sources waits for the slowest of them. Past a certain wait nobody waits, and the working habit becomes sending the version that was screenshotted last month.

Part 3

What changing the shape fixes

Put a store between the platforms and the reports. Fetch each source on a schedule, once, and let every report read the stored copy instead of the platform.

The call count stops scaling with viewers and starts scaling with sources, which is a number you control. Queries stop being sampled, because the rows are yours and a query against your own tables reads all of them. A report that queries a table is not waiting on an API round trip. And your history stops depending on how far back each platform is willing to look, which is the part people only appreciate the first time a platform's retention window cuts off a year on year comparison.

Part 4

What you take on instead

Somewhere to keep the data, a schedule that runs, and knowing when a fetch did not work. The third one is the real cost and it is the one most likely to be skipped.

With a live connection, a broken source is loud: the report shows an error and somebody reports it within the hour. With a stored copy it is silent, because yesterday's rows are still there and everything renders. Moving to a store converts a visible failure into an invisible one, which is a good trade only if you add the freshness check that turns it back into a visible one.

In practice

Where SightShark fits

Syncs run daily into a warehouse you own, and the dashboards read those tables rather than the platforms, so the reporting load no longer lands on the platform APIs at all.

Freshness checks cover the failure this move introduces, raising an alert when a source is late or a sync failed rather than leaving it to be noticed in a report. Reporting scales with the roster because each client is a record rather than another build.

See how the platform works

Questions

Questions people ask

Why do dashboards get slower as you add more clients?

Because a dashboard connected directly to a platform API makes live calls every time somebody opens it, so the load is clients multiplied by reports multiplied by viewers multiplied by refreshes. The volume of data is not what changes. Adding a client adds another multiplier, and quotas, sampling and timeouts all arrive together at a certain size.

What is sampling in analytics reporting?

It is when a platform answers a large query from a subset of the data and returns an estimate rather than an exact figure. It is not always clearly flagged, which is why two people can pull what they think is the same report and get two different numbers with no error shown. Querying stored rows in your own warehouse avoids it, because the query reads every row.

Does moving reporting to a data warehouse make it faster?

It changes what the report is waiting for. A report reading a stored table is querying data that is already there, rather than making live API calls and waiting for the slowest source to answer. The trade is that a failed fetch becomes silent, since yesterday's rows still render, so a freshness check has to be added at the same time.

Pricing

Priced by the clients you report on.

Compare plans
  • Starter

    $499 /month

    Up to 20 clients

  • Growth

    $999 /month

    Up to 50 clients

  • Enterprise

    Custom

    No cap on clients

Get started

Want this running on your own data?

Book a call with someone who can answer the technical questions.