Daily
Find issues stuck in progress
Each morning you see issues that have sat In Progress for too long, grouped by assignee.
- Runs
- Daily
- Apps
- Jira
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every morning at 8am, email me issues in project ABC that have been In Progress for more than 5 days, grouped by assignee.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
An issue moves to In Progress on a Monday, and the developer is pulled onto an urgent customer bug on Tuesday. By the following Monday it has sat in the same column for a week. The board looks healthy, because it shows a card in the right place, but nothing is happening. The delay only comes out when a stakeholder asks why a promised feature is late, and the explanation is that the ticket was forgotten.
Each day, ClickRuntime runs a JQL search for issues in In Progress whose status last changed more than 5 days ago, groups the results by assignee, and emails you the list. You can see which work has stopped moving and who currently holds it.
Engineering managers, team leads and project managers use it to find work that is stuck without watching the board constantly.
What you get out of it
Stalled work is found early
An issue sitting for five days in progress is rarely being actively worked. Spotting it on day five rather than day twenty keeps small delays from growing into missed deadlines.
Hidden blockers come out
Often an issue is stuck because the developer is waiting for a review, a decision or an environment. Asking about the item prompts that blocker to be named so the manager can remove it.
Reassignment happens before it is urgent
If someone has been pulled onto other work, the list shows it, and the issue can be given to someone with time. The commitment to the customer is saved before it is broken.
Overloaded people are noticed
One person appearing against many stuck items suggests too much work in progress. A manager can ease their load, which improves their output more than pushing them to go faster.
Honest status for stakeholders
Instead of reporting that a feature is in progress, you can report that it has not moved for a week and say what is being done. That candor builds more trust than a status that later proves wrong.
How it works
What happens, step by step
Every morning, ClickRuntime finds Jira issues that have been In Progress for more than five days.
It groups them by assignee.
You get an email listing each person's stuck issues.
Before it runs live
- Connect Jira
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Jira steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, notify
JIRA = "https://api.atlassian.com/ex/jira/your-cloud-id"
def jira(method, path, **kw):
resp = http.request(method, JIRA + path, headers={
"Authorization": f"Bearer {credentials.connection('jira', 'work')}", "Accept": "application/json"}, **kw)
resp.raise_for_status()
return resp.json() if resp.content else None
def search(jql, fields, limit=100):
return jira("POST", "/rest/api/3/search/jql", json={"jql": jql, "fields": fields, "maxResults": limit})["issues"]
@on_trigger
def run(event):
issues = search('project = ABC AND status = "In Progress" AND NOT status changed AFTER -5d', ["summary", "assignee", "updated"], 200)
if not issues:
return {"stuck": 0}
by_person = defaultdict(list)
for i in issues:
by_person[(i["fields"].get("assignee") or {}).get("displayName", "Unassigned")].append(f" {i['key']} {i['fields']['summary']}")
notify.email_me(f"{len(issues)} ABC issues In Progress for 5+ days",
"\n\n".join(f"{p}\n" + "\n".join(items) for p, items in sorted(by_person.items())))
return {"stuck": len(issues)}FAQ
Common questions
Can I use a different status or a different number of days?
What does status changed before mean in Jira?
Will it include issues that were reopened recently?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Find open issues missing key details
Each morning you get a list of open issues with no assignee, estimate or priority.
See how it worksTrack created vs resolved issues each week
Each Monday you see how many issues were created and resolved last week, and how that compares with the week before.
See how it worksCatch issues that nobody owns
Twice a day you get a list of open issues that have been unassigned for more than a few hours.
See how it worksKeep exploring
Set up “Find issues stuck in progress” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.