Find the best ROI task in a Jira Epic — highest story points for least effort, filtered to unassigned To Do tasks only.
65
77%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Optimize this skill with Tessl
npx tessl skill review --optimize ./skills/best-roi-task/SKILL.mdYou are analyzing a Jira Epic to find the task with the best return on investment (highest story points relative to effort/size) that is available to pick up.
Provide via $ARGUMENTS:
https://aircall-product.atlassian.net/browse/MES-3548 or just MES-3548Example: /devflow:best-roi-task https://aircall-product.atlassian.net/browse/MES-3548
If no argument is provided, ask the user for the Epic URL or key.
Parse the Epic key. Extract from the argument:
MES-3548 from .../browse/MES-3548)[A-Z]+-\d+): use directlyFetch all child issues using Jira MCP:
Use mcp__claude_ai_Atlassian__searchJiraIssuesUsingJql with:
cloudId: the Atlassian site URL from the epic URL, or default to aircall-product.atlassian.netjql: "Epic Link" = <EPIC_KEY> ORDER BY created ASCfields: ["summary", "status", "assignee", "customfield_10028", "customfield_10188", "issuetype", "issuelinks"]maxResults: 50Analyze blockers. For each task, inspect issuelinks for "Blocks" relationships:
type.name is "Blocks" and the task appears in outwardIssue (meaning another issue blocks it) — specifically, links with type.inward = "is blocked by" where the current task is the inward side.inwardIssue.key matches the current task (the current task "is blocked by" the outwardIssue), OR where outwardIssue exists and type.outward = "blocks" (meaning the linked issue blocks the current task)."done" or status name "In Code Review" or later (i.e., statusCategory.key is "done" or status name contains "Review").Filter to eligible tasks. Only include tasks where:
assignee is null (unassigned)status.statusCategory.key is "new" (To Do) — this catches any status name that maps to the "To Do" categoryTasks that match the first two criteria but ARE blocked should be shown separately (see step 6).
Calculate ROI score for each eligible task:
Map t-shirt size (customfield_10188.value) to effort:
| Size | Effort |
|---|---|
| XS | 1 |
| S | 2 |
| M | 3 |
| L | 5 |
| XL | 8 |
Story points come from customfield_10028.
ROI score = story_points / effort. If story points are null/0, score is 0.
Present results sorted by ROI score descending:
## Best ROI Tasks in <EPIC_KEY>
| Rank | Task | Summary | Points | Size | ROI Score | Blocked By |
|------|------|---------|--------|------|-----------|------------|
| 1 | ... | ... | ... | ... | ... | — (or blocker key + status) |
### Recommendation
**<TASK_KEY>** — "<summary>" — <points> points, size <size> (ROI: <score>)The Blocked By column shows:
— if the task has no blockers<KEY> (Done) or <KEY> (In Code Review) if it had blockers but they're all resolved/nearly resolvedIf no eligible tasks are found, report:
No unassigned To Do tasks found in epic <EPIC_KEY>. All tasks are either assigned, in progress, or blocked.
Show blocked tasks that would otherwise be eligible (unassigned + To Do) but have unresolved blockers:
### Blocked tasks (unassigned, To Do, but blocked)
| Task | Summary | Points | Size | Blocked By |
|------|---------|--------|------|------------|
| ... | ... | ... | ... | <KEY> (<status>) |This helps the user see what's coming next once blockers clear.
Show other non-eligible tasks (assigned or in progress) for the full picture:
### Other tasks (assigned or in progress)
| Task | Summary | Points | Size | Status | Assignee |done category). Only tasks with ALL blockers resolved count as unblocked.customfield_10028 field is story points and customfield_10188 is t-shirt size — these are Jira custom field IDs specific to the Aircall Jira instance. Other instances may use different field IDs.issuelinks field contains both inward and outward links — check for links where the current task is blocked by another issue.$ARGUMENTS
b0b1bb6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.