Dashboard loading slowly
A dashboard that takes more than ~3 seconds to render is almost always one of three problems. In order of frequency:
1. The queries are slow
Open the dashboard in Inspect mode (admin → Dashboard → Inspect or ?inspect=1 in the URL). Each tile shows its query timing. The slow tile is rarely the one you'd guess.
Common fixes:
- Missing aggregation — a tile pulling 50K raw rows to compute a single number should pull the aggregate. Add a SQL recipe upstream that does
SELECT COUNT(*) FROM ...so the tile fetches one row. - Missing index — if the tile filters on a column that isn't indexed in the source, every dashboard load triggers a full scan. Either add the index in the source DB, or materialize the filter into a precomputed dataset.
- Cross-database joins at render time — joins between a Postgres connection and a CSV upload happen in Honeyframe's process and are slow. Either denormalize upstream or use a SQL recipe to push the join into one of the databases.
2. Too many tiles
A dashboard with 30 tiles fires 30 queries on every load. Even if each is fast individually, the browser's request concurrency limit means they queue.
- Combine tiles where possible — three KPI numbers from the same dataset can be a single tile with three numbers, fetched as one query.
- Use a drill-down pattern: top-level shows 4 summary tiles; clicking opens a detail dashboard. Most viewers never click through, so 90% of the load is saved.
- Move "always loaded" but rarely-watched tiles into collapsible sections; collapsed tiles don't query until expanded.
3. Browser cache / stale assets
If the dashboard was fast yesterday and slow today and nothing changed in the data:
- Hard-refresh in the browser (Cmd+Shift+R / Ctrl+Shift+F5)
- Open in a private/incognito window — confirms whether the issue is browser-cache or server-side
- Check Network → DevTools for any single request taking 10+ seconds; that's usually a stuck WebSocket or a network blip, not the dashboard itself
If incognito is fast and regular browser is slow, the user's browser cache is corrupted. Clearing site data fixes it but ask: did a recent deploy bump asset versions?
When the dashboard is slow only for some viewers
That points at a per-user filter or permission causing extra work:
- Row-level filters — if the dashboard has an RLS policy that joins to a permissions table, and the viewer's group has 10K matching rows where another user's group has 100, the queries take 100× longer for that user. Audit the RLS join condition.
- Column masking — masking applies after the query, but on dashboards with hundreds of columns, the masking overhead becomes visible. Reduce returned columns to only what tiles actually display.
- Group-based filtering — if a tile filters on a parameter populated from the viewer's group memberships, users in 20 groups get a
WHERE group_id IN (...)20-element list, which can defeat indexes.
Diagnostic order
Reproduce in incognito
├─ Slow → server-side problem → continue
└─ Fast → browser cache → user issue, fix locally
Inspect mode → which tile?
├─ Single tile slow → fix that query (sections 1-2)
└─ Many tiles slow → load shed (section 2)
Per-user variance?
├─ Yes → RLS / masking / group filter (section above)
└─ No → general slowness, treat as backend tuning
See also
- Reduce flow runtime — same principles apply at the flow layer
- Data policies — for the RLS / column masking surface