Every request is urgent, most of them already exist, and the data team is a helpdesk. Here is the model behind a queue that fixes that, the prompts to build it, and what it takes to run it.
Your private status link is on its way to your inbox.
A report request queue is four parts: a request that captures the decision being made rather than the columns wanted, a check against what already exists, prioritisation against real capacity, and a route from repeated one-off requests into self-serve. The single highest-value field is the decision. People ask for a spreadsheet with six columns, and once you know what they are deciding you can frequently answer it in a sentence or point at a dashboard built last quarter.
Report requests
19
In the queue
31%
Answered by something existing
4
Topics asked 3+ times
6 days
Median turnaround
What decision will this inform
Whether to fund two more CS headcount in Q4
Asked before the columns, on purpose
What would you do differently
Fund them if churn in the mid-market segment is above 8%
When is the decision made
30 September
Not when you want the report
How will you use it
Once, for the board pack
One-off, monthly, or a dashboard
We may already have this
Churn by segment, updated weekly
Three existing reports match. Close yours if one answers it.
You run a data or analytics team that has become a request queue. What you want is fewer requests, better ones, and an argument for headcount that is not just a list of tickets.
What happens between somebody wanting a number and the data team doing anything.
Before it asks for columns. People request a spreadsheet; the decision underneath is usually smaller than the request.
Against registered dashboards and open requests, at submission, so a third of these close before anyone starts work.
Not when the report is wanted. Those are different dates and only the first one is real.
With the line drawn visibly, so the conversation is about how much the team can do rather than about individual requests.
Because a meaningful share of what looks like data team delay is a clarification nobody answered.
Three requests on one topic becomes a dashboard, and everyone who ever asked is told it now exists.
A report queue is not a ticket form pointed at the data team. It is four parts, and the first one changes what gets asked.
What are you deciding, when do you decide it, and what would change depending on the answer. Requests arrive as column lists, and the decision underneath is usually smaller than the request.
Search existing reports and dashboards at submission. A large share of requests are for something built last quarter that nobody could find.
Scored on the size of the decision and its real deadline, ranked against how much the team can actually do, with the line drawn visibly.
Repeated requests become a dashboard or a documented query. This is the only mechanism that reduces the queue rather than working through it faster.
These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix
Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.
The one field that changes the whole conversation.
In this Helix project, build me a report request queue for our data team.
The form asks for the usual things: requester, team, what they want, and
any filters or breakdowns.
But lead with a different question, and make it required: what decision
will this inform, and what would you do differently depending on the
answer.
People ask for a spreadsheet with six columns. Once you know they are
deciding whether to renew a contract, you can often answer it in a
sentence, or point at a dashboard built last quarter, or realise the
six columns would not actually have told them.
Then ask for the date the decision is made, not the date they want the
report. Those are different, and only the first one is real. Ask for the
difference explicitly if the two dates are far apart.
And ask how they will use it: a one-off answer, something they need
monthly, or something they want to look at whenever. That answer decides
whether this is a query or a dashboard, and it is much cheaper to know now.
I sign in through Helix, so do not build a login page. Read the signed-in
user from the runtime. And do not put any key or connection string in the
code: if this needs to reach another system, tell me and I will create the
connection in my workspace. Worth knowing. The decision field is the highest-value question in this app. It repeatedly turns a two-day report into a two-minute answer.
Because a lot of the queue is search failure.
Before anything is triaged, search what we already have.
Let me register existing reports and dashboards with their name,
description, what questions they answer, the owner and a link. Then on
submission, search those against the request text and the decision, and
show the requester likely matches immediately.
Let them close their own request by saying one of those answered it, and
record that. That count is the size of the search problem, and it is
usually large enough to be worth fixing separately.
Also check open requests, so two people asking for the same thing in the
same week become one piece of work with two people notified. And show the line.
Score each request on the size of the decision it informs, the real
deadline, and the estimated effort, with the weights in a config file I
can edit. Effort is estimated by the team, not the requester.
Then rank against capacity: who is available, for how long, and what they
are already committed to. Draw a line where capacity runs out and show
what falls below it.
Do not hide the below-the-line list. A queue with no capacity model just
re-sorts a list longer than the team can deliver, and everybody stays
disappointed without understanding why.
Let a leader override the order with a reason, and log every override.
Track time in each status, and report time waiting on the requester
separately. A meaningful share of what looks like data team delay is a
request sitting with the person who raised it waiting for a clarification. The only thing that actually shrinks the queue.
Tag every request with a topic, and report which topics recur.
Three requests for the same thing is a dashboard. Make that an explicit
action: promote a repeated request into a self-serve report, register it
in the existing-reports list, and notify everyone who has ever asked for
that topic that it now exists.
This is the only mechanism that reduces the queue rather than processing
it faster, and without it a data team stays a helpdesk regardless of how
efficient it gets.
Then two reports. One for the team: requests by topic, by requesting team,
turnaround, and the proportion answered by pointing at something that
already existed. And one that is uncomfortable: for delivered requests,
did the answer change the decision. Ask the requester a fortnight later.
A high proportion of no is the most useful thing this app will ever tell
you. Worth knowing. The did-it-change-the-decision question is awkward to ask and it is the only honest measure of whether the work mattered.
The step that turns a working prototype into something with your data in it.
Now connect it to the systems we actually run, so it works on real data
rather than the rows you seeded.
Anything in angle brackets is a placeholder. Swap it for whatever we use
instead, and have the app name the connection it wants rather than assume
a vendor, so changing my mind later is a config change and not a rewrite.
<Looker>. Read the existing reports and dashboards, so a submission can be
matched against them immediately.
<Okta>. Resolve requesters, their teams and the analyst group you assign
to, so none of it depends on a list somebody maintains.
<Slack>. Tell everyone who ever asked for a topic when it becomes a self-
serve dashboard.
<Jira>. Push accepted requests to wherever the team actually works, rather
than a second queue.
<Snowflake>. Check whether the data a request needs actually exists before
it is scheduled.
<Google Sheets>. Deliver one-off answers where requesters will actually
use them.
<Notion>. Publish the self-serve reports so a repeated request becomes a
link.
Only write where I have said to write. Everything else is read only.
Do not write a key, a token or a connection string anywhere in the code,
and do not ask me to paste one. Tell me which connections you need and I
will create each as an authentication in my Helix workspace. Reference
them by alias. Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.
The last step of every build: a URL, and the right people on it.
Deploy my app. Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. Requests reference commercially sensitive decisions, so set Access Control before sharing: requesters see their own, the data team sees the queue.
Half the value is telling somebody the answer already exists, which means seeing what already exists.
Looker
Read the existing reports and dashboards, so a submission can be matched against them immediately.
Okta
Resolve requesters, their teams and the analyst group you assign to, so none of it depends on a list somebody maintains.
Slack
Tell everyone who ever asked for a topic when it becomes a self-serve dashboard.
Jira
Push accepted requests to wherever the team actually works, rather than a second queue.
Snowflake
Check whether the data a request needs actually exists before it is scheduled.
Google Sheets
Deliver one-off answers where requesters will actually use them.
Notion
Publish the self-serve reports so a repeated request becomes a link.
Each line says whether the app reads, writes or both. Anything not described as writing should be read only.
Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.
Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.
The build gets you a working queue. It holds context about decisions being made across the business, so it needs to be run properly.
AI Deployment
One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.
App Security
Requests describe decisions in flight, which is commercially sensitive before it is public. SSO means people sign in with their existing account, and access is scoped so requesters see their own.
App Security
Registering existing dashboards and checking what already exists needs read access to your BI tool. Granting it to the app rather than pasting a key into it means it can be rotated or revoked without a redeploy.
App Registry
Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.
Cost Management
Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.
A front door for analytics requests that asks what decision the request informs, checks whether the answer already exists, prioritises against real team capacity, and routes repeated requests into self-serve reporting.
What decision will this inform, and what would you do differently depending on the answer. People request columns. Knowing the decision frequently turns a two-day report into a sentence, or a pointer at a dashboard built last quarter.
Because those are different dates and only the first is real. Most requested deadlines are preferences, and asking for the decision date surfaces the ones that genuinely cannot move.
Tag requests by topic and promote anything that recurs three times into a self-serve dashboard, then tell everyone who ever asked that it exists. That is the only mechanism that shrinks the queue rather than working through it faster.
Ask the requester a fortnight after delivery whether the answer changed the decision. It is an uncomfortable question and a high proportion of no is the most useful finding the app will produce.
Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build. The judgement calls are your scoring weights and your capacity model.
Data and Analytics
One definition per metric, owned by a named person, versioned when it changes, and linked to every report that uses it. Prompts to build it, and what it takes to run it.
Data and Analytics
Check freshness, volume, nulls and referential integrity on the tables people actually use, with an owner per check and alerts nobody learns to ignore. Prompts to build it, and what it takes to run it.
Marketing
Capture enough in a brief to start work without a meeting, prioritise against capacity rather than volume, and show requesters where their work sits. Prompts to build it, and what it takes to run it.
Last reviewed September 2026.
Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.
Your private status link is on its way to your inbox.