All notes
EngineeringPaweł Pawłowski7 min read

The Ticket Is the Prompt Now

A person handed an underspecified ticket exposes the gap. An agent handed the same ticket conceals it inside a confident diff.

On 31 July, Jira Automation gained GitHub Copilot, Cursor and Claude as native action steps — coding agents sitting in the rule builder alongside "transition issue" and "send email."

Read that as a plumbing change and you'll miss it. What it removes is a person. A rule can now take a ticket the moment it's created and hand it to something that writes code, with nobody reading it in between (Fig. 1).

Fig. 01The same automation rule, with one step swapped

An automation rule shown as a four-step chain: when an issue is created, if it is a bug in the PROJ project, then a third step runs, and the rule ends. Switching the third step from “assign to an engineer” to “run coding agent” removes the only participant in the chain that can read the ticket and ask what it meant.

  1. When
    Issue created
  2. If
    Project = PROJ · Issue type = Bug
  3. Then
    Assign to an engineerA queue with a person on the end of it.
  4. Result
    Rule ends. Someone opens the ticket and reads it.
Who reads the ticket
A person, before any code exists
Anything can ask a clarifying question
Yes — when the ticket doesn’t say enough
Everything above the swapped step is identical. What changes is whether anything in the chain is capable of asking a question before code exists.

Which makes a question that used to be a matter of team etiquette into a matter of pipeline configuration: what, exactly, is in the ticket?

The asymmetry

Hand a junior engineer a ticket that says "fix login bug — see Slack thread," and something useful happens. They come back and ask what you meant.

That question is the system working. It costs ninety seconds and it arrives before any code exists — the ambiguity gets resolved at the point where resolving it is nearly free.

Hand the same ticket to an agent and you get no question. You get a pull request: well-formatted, confidently reasoned, and quite possibly wrong in a way that takes twenty minutes of reading to notice.

The ambiguity didn't go anywhere. It moved — from a ninety-second conversation before the work to a code review after it (Fig. 2).

Fig. 02The same vague ticket, given to a person and to an agent
Handed to a person
Reads it
Notices the gap.
Responds
“Which timeout — idle or absolute?”
Cost
Ninety seconds, paid before any code exists.

The ambiguity is visible, and it is cheap exactly because nothing has been built on it yet.

Handed to an agent
Reads it
Notices the gap.
Responds
Fills it with the most plausible completion. Silently.
Cost
A finished, confident diff. Reviewer reconstructs the intent to judge it.

The ambiguity is concealed. Nothing in the output marks which parts were your spec and which were its inference.

Both paths contain the same missing information. One surfaces it in ninety seconds, before any work exists; the other buries it inside a finished diff that reads as confident.

Not because the agent is worse than the junior. Because it's optimised differently. It produces a plausible completion, and "I need more information" is rarely the most plausible completion. Faced with a gap, it fills the gap — reasonably, invisibly, and without marking which parts were your specification and which were its inference.

That's the expensive property, and it's worth being precise about it. The output doesn't come labelled. A reviewer can't separate "this is what we asked for" from "this is what it assumed we meant," so they have to reconstruct the intent from scratch in order to review against it. That reconstruction is the cost, and it scales with how much the agent had to invent.

Watch it narrow

Same bug, same agent, one field at a time (Fig. 3).

Fig. 03What the agent invents, field by field

An interactive figure. A bare ticket reading “Fix login bug” produces a change that extends the session timeout to 24 hours — plausible and wrong. Adding reproduction steps, acceptance criteria, constraints and an out-of-scope list one at a time progressively narrows the generated change until the diff maps one-to-one onto the acceptance criteria, and the reviewer’s effort falls from high to low.

The ticket
PROJ-418
Fix login bug
What the agent produces

Extends the session timeout to 24 hours in config/session.js. Plausible, ships, and quietly widens the auth window for every user.

Reviewer effortHigh
Round-trips to clarify3
The model is identical in all five states. The only variable is how much the ticket left it to guess — and the guessing is what the reviewer pays for. Effort is shown as an ordinal, not a measurement.

Nothing about the model changed between the first state and the last. The only variable was how much the ticket left to invention.

The claim, and the one I'm not making

Not claiming: that structured tickets make agent output reliable. They don't. A perfectly specified ticket can still produce wrong code, because a model can be wrong about things you specified correctly. Specification is not correctness.

Claiming: that structured tickets make agent output reviewable, which is different and more achievable. A reviewer holding explicit acceptance criteria is checking a diff against a list. A reviewer without them is inferring what the author probably wanted and then judging code against that guess. The second job is strictly harder, and it's the one most reviewers currently have.

There's related industry data — Sonar's State of Code survey of 1,100+ developers, published in January, found 96% don't fully trust AI-generated code while only 48% always verify it, and 38% say reviewing it takes more effort than reviewing a colleague's work. I'll cite that for the existence of a review-cost problem and no further. Nobody asked those developers about their backlog, so it doesn't establish that thin tickets are the cause. Any post telling you it does is borrowing authority it hasn't earned.

And the ROI is a hypothesis, not a finding. Structure costs real minutes to write. I haven't seen a study establishing that review time saved exceeds authoring time spent, and I'm not going to imply one exists. If you want to know for your team, the experiment is small: take one recurring class of work, write half the tickets to a four-field standard and half the way you write them now, and track review round-trips for a sprint. That's a real number about your codebase, which beats my argument about codebases in general.

Where it actually breaks

Everyone reading this already knew what a good ticket looks like. That was never the problem.

The problem is sprint planning at 4pm with thirty-eight tickets left, where the fourth field on the ninth ticket is where the discipline quietly dies (Fig. 4). "Write better tickets" has been failing teams for two decades for exactly that reason — it's a throughput problem misdiagnosed as a knowledge problem.

Fig. 04A planning session, one ticket at a time

Thirty-eight tickets shown as columns, four fields as rows. Written by hand, the fields fill reliably at the start of the session and thin out towards the end — the out-of-scope field disappears first, then constraints, then acceptance criteria, leaving the last third of the sprint with little more than a title. With the repeated fields generated, all four rows stay filled across all thirty-eight tickets and only one field per ticket is typed by hand.

Context
Acceptance
Constraints
Out of scope
Ticket 1Ticket 38
Fields present
85 of 152
Tickets with all four
7 of 38
Typed by a person
85 — all of them

The pale region on the right is not laziness. It is the thirty-eighth ticket at the end of a long afternoon, and it is where the agent gets to invent.

Written by a personLeft to the agent
An illustration of the failure mode, not measured data — but every count below is a tally of the cells drawn above it. Nobody forgot what a good ticket looks like halfway down the list. They ran out of afternoon.

Which is the modest argument for templating. Most of what goes into a well-structured ticket is repeated: the same acceptance-criteria skeleton, the same constraint boilerplate, the same out-of-scope defaults for a given component. That isn't creative work, it's transcription — and transcription is where good intentions go to die.

Generate the repeated structure in bulk; spend your actual attention on the one or two fields genuinely specific to this piece of work. Which is what SuperTemplates does, and the reason it matters more this quarter than last is simply that Atlassian just wired the output of your ticket form to something that writes code.

Your tickets used to be notes for your colleagues. They're now also the specification an agent builds against — and increasingly, nobody reads them in between.

Same words. Considerably more weight.

The product these notes come from

Stop creating Jira issues one by one.

SuperTemplates turns unstructured text into structured backlogs. AI handles hierarchy. Templates handle scale. You review the whole batch before anything is created.

Try free on the Atlassian Marketplace