Dashboard

What goes in a feature request pipeline dashboard?

A feature request pipeline dashboard treats feedback like a funnel: requests arrive, gather votes, move through statuses, and either ship or close. It needs status-change history — a snapshot of today's board can't tell you whether the pipeline is speeding up or silting up.

For: Product managers, product ops, and engineering leadership. Refresh: daily. Source: modeled feedback, survey, and product-usage tables in a Metabase-connected database.

Which cards belong on this dashboard?

  • Open requests by status
  • New requests per week
  • Vote velocity: top requests by votes in the last 30 days
  • Aging: open requests by age bucket
  • Revenue-weighted request ranking (votes joined to account ARR)
  • Requests shipped per quarter
  • Median time from request to shipped
  • Requests closed as won't-do, with reasons where tracked

What data does this dashboard need?

  • Feedback items with status, product area, and created date
  • Status-change events with from-status, to-status, and timestamp
  • Votes at vote grain with timestamps and voter account
  • Account or company dimension with segment and revenue
  • Roadmap or release links where the tool provides them

How do you build it?

  1. Sync the source tools into a database and retain raw IDs, timestamps, statuses, and segment fields.
  2. Build modeled tables at the grain this dashboard requires.
  3. Create one saved question per card and certify the shared models and definitions.
  4. Add dashboard filters for Date range, status, product area, segment, age bucket.
  5. Show refresh time, and exclude internal and test activity from every headline card.

Example card SQL

Open requests by age bucketPostgreSQL
SELECT
  CASE
    WHEN CURRENT_DATE - created_at::date <= 30 THEN '0-30 days'
    WHEN CURRENT_DATE - created_at::date <= 90 THEN '31-90 days'
    WHEN CURRENT_DATE - created_at::date <= 180 THEN '91-180 days'
    ELSE '180+ days'
  END AS age_bucket,
  COUNT(*) AS open_requests,
  SUM(votes) AS total_votes
FROM feedback_items
WHERE status NOT IN ('shipped', 'closed')
GROUP BY 1
ORDER BY MIN(CURRENT_DATE - created_at::date);

Dashboards

Integrations

Metrics

Analytics

FAQ

Why does the pipeline need status-change history?
Today's board shows where requests are, not how they got there or how long they took. Sync status-change events (or take weekly snapshots) to compute aging, flow, and time-to-ship honestly.
Should I rank requests by total votes?
No — lifetime totals always favor old requests. Rank by vote velocity (votes per recent period) and add a revenue-weighted view by joining voters to account ARR from your CRM.