← Writing

User stories, defects, epics: they all have to be airtight. A spec moves from product to engineering to QA and back, and every ambiguity in it becomes a round-trip. Even when the real problem is “the button’s broken,” turning that into something unmistakable is real writing work.

That’s the part that’s easy to skip past. The bug itself might take thirty seconds to describe out loud. Making it airtight enough that an engineer can act on it without a follow-up question usually takes longer, and it’s the part that gets rushed.

The Loop, Voice-First

I wrote about the Prompt Blueprint a few weeks back: Context, Role, Discovery, Execution, the four-part shape I run on every AI task. That piece used product mocks as the example. This is the same framework, run on specs instead.

For each deliverable, user stories, defects, epics, I keep a Claude project with a pre-built prompt that locks in the exact structure I want, already formatted to paste into Jira. Then I just talk. Speech-to-text feeds it straight in.

If anything I’ve said is vague, the AI asks me targeted questions before it writes a line. That’s the Discovery step doing its job: it interrogates me until the gaps are closed or explicitly flagged, so what comes out the other side meets Definition of Ready on the first pass. I’ve reliably seen fewer tickets bounce back for clarification since, and refinement conversations move faster because the ambiguity’s already been run down before the ticket ever reaches the team.

And when a section needs something only a human can supply, a technical diagram I’ll build later with an architect, it doesn’t invent one. It leaves the slot marked TBD. The gap stays visible instead of getting quietly filled with something that reads confident and isn’t true.

Walking It Live

Here’s a real one. I logged a bug by talking, not typing:

“When a Sales Manager logs in to production and goes to the analytics filter and updates it from current year to Q2, the graph and widgets don’t update. There’s no visible change. What should happen is all the analytics filter down to that quarter…”

That’s close to a stream of consciousness, not a ticket. Before it wrote anything, the AI asked me a handful of targeted questions back, the kind an engineer would ask anyway if this bug made it two-thirds of the way through review without them: which role was affected, what environment, whether the behavior held across every quarter or just the one I’d tested. I answered out loud, still no keyboard.

What came back was a clean, paste-ready defect ticket: title, description with impact framing, numbered steps to reproduce, expected behavior, actual behavior. Same anatomy every time, so it reads consistently next to everything else in the backlog. Same method runs my epics and user stories too.

What Actually Changes

I don’t have a clean before-and-after number for this one, the way I do for release notes. What I have instead is a completeness argument, and I think it’s the more honest one anyway.

Talking is faster than typing. That part’s obvious and not particularly interesting on its own. The harder problem was never speed. It was making sure a ticket I dictate in the time it takes to describe a bug out loud still covers everything an engineer expects: the exact repro steps, the boundary of who’s affected, the expected-versus-actual distinction that keeps a ticket from bouncing back for clarification.

That’s what the interrogation step is actually for. It’s not there to save me typing. It’s there so moving at conversational speed doesn’t cost me the rigor a slower, typed-out ticket would have forced on me anyway.

Same framework, different deliverable. The AI still asks before it writes. The unknowns still get flagged instead of invented. Only the input changed, from typing to talking.

© 2026 Jason Fitzpatrick · Chandler, AZ LinkedIn  ·  Email