The Problem: Repetitive Ticket Creation
You've just finished reviewing an Architecture Outline (AO) or design document, and now it's time to plan the epic. That means creating all the tickets in Jira—sometimes 10 or more of them. Each one needs the same fields filled out: Stack, Squad, Category, Parent Epic, Tags. Then you write the description, which often includes a summary that's almost identical across tickets. Then you link them all together. Repeat ten times.
It's repetitive, it's boring, and it takes way longer than it should.
I've been using Claude with the Atlassian MCP server to handle this, but I wanted a workflow that's safe. I don't want Claude making changes to Jira without my explicit approval for each action. Here's the workflow I developed that balances automation with control.
The Workflow: Review Before Execute
The key to this workflow is creating an intermediate review step. Instead of having Claude create tickets directly in Jira, we first generate markdown files that can be reviewed, edited, and approved before any changes touch your project management system.
Step 1: Planning and Scoping
Before running the automation, there's important upfront work to ensure quality results. You need to:
- Review the design document thoroughly: Understand the full scope of work and identify natural boundaries for splitting tickets
- Decide on ticket granularity: Determine how to break down the work into appropriately sized tasks (not too large, not too small)
- Identify dependencies: Note which tickets depend on others to inform the order of implementation
- Consider technical boundaries: Group work by layer (database, API, frontend), service, or feature to create cohesive tickets
This planning phase is crucial—even the best AI tool needs clear direction to split work appropriately. Spend time thinking about how you'd naturally break down the project if you were doing it manually. This will help you write a more effective prompt and result in better-scoped tickets.
Step 2: Generate Draft Tickets
Once you have a clear plan, use this prompt to have Claude generate the tickets. Since I'm using the MCP integration, Claude pulls the design document directly from Confluence:
Create draft Jira tickets from the following Confluence
architecture document: [URL]
**Scope:** Backend tickets only (including AI-related work)
**Output:**
- Create a folder and save each ticket as a separate markdown file
**Ticket Format:**
Each file should have two sections:
1. **Jira Fields table** with:
- Summary: `[Backend] <title>`
- Issue Type: Story
- Parent/Epic: [EPIC_URL]
- Assignee: [YOUR NAME]
- Squad: [SQUAD]
- Stack: Backend
- Issue Category: Product Feature
2. **Description Field Content** section containing:
- Summary (1-2 sentence overview)
- Description (context/background)
- Acceptance Criteria (bullet points)
- Technical Notes (API specs, code samples, etc.)
- Dependencies (reference other ticket titles by exact
Summary name for later Jira linking)
Be specific with all field values so tickets can be created
directly in Jira via API.
Replace [URL], [EPIC_URL], [NAME], and [SQUAD] with your
values when using.This prompt instructs Claude to create a folder with one markdown file per ticket. The intermediate step is crucial—it allows you to review each ticket, verify the scope is correct, check for misunderstandings, and make edits before anything touches Jira.
Because well-written design documents tend to include a lot of detail (especially for backend work), the first pass is usually quite accurate. However, no AI is perfect, and this review step catches issues early.
Step 3: Review and Refine
Once Claude generates the markdown files, review them carefully. Check for:
- Proper scope: Are tickets sized appropriately? Not too large or too small?
- Accurate technical details: Does the AI correctly understand the technical approach?
- Complete acceptance criteria: Are all requirements captured?
- Correct dependencies: Are ticket relationships properly identified?
- Consistent formatting: Do all tickets follow the same structure?
Make any necessary edits to the markdown files. This is your opportunity to refine the work before it becomes part of your project tracking system.
Step 4: Create Tickets One by One
Once you're satisfied with the markdown files, use this follow-up prompt:
Now create the tickets in Jira using the tool. Create ONE
AT A TIME, show me the content first before executing
anything. I'll confirm all tickets before proceeding.This approach gives you explicit control over each ticket creation. Claude shows you the full description and waits for your confirmation before creating it. After each creation, you can check the ticket in Jira to verify everything looks correct.
Some fields don't always come through the API perfectly, so this final verification step is important. It's much easier to catch and fix issues with one ticket at a time rather than trying to clean up 10+ tickets after the fact.
Example: What Gets Generated
Here's an example of what the workflow produces. For a typical epic, you might get files like:
01-db-migration-add-status-column.md
02-api-create-endpoint.md
03-api-update-endpoint.md
04-api-get-status-endpoint.md
05-background-job-processor.md
06-feature-flag-setup.md
07-integration-tests.md
08-update-existing-endpoints.md
09-documentation-updates.md
10-cleanup-deprecated-code.mdEach markdown file follows a consistent structure. Here's an example of what's inside:
# Jira Ticket Draft
## Jira Fields
| Field | Value |
|-------|-------|
| **Summary** | [Backend] Add processing_status Column to orders |
| **Issue Type** | Story |
| **Parent/Epic** | [PROJ-123](https://yoursite.atlassian.net/browse/PROJ-123) |
| **Assignee** | Your Name |
| **Squad** | Your Squad |
| **Stack** | Backend |
| **Issue Category** | Product Feature |
| **Labels** | `backend`, `database`, `orders` |
## Description Field Content
### Summary
Add a new `processing_status` enum column to the `orders`
table to track the current state of background processing.
### Description
As part of the new async processing feature, we need to track
when an order is being processed, completed, or failed. This
allows the frontend to show appropriate status indicators and
handle retries.
### Acceptance Criteria
- [ ] Add column `processing_status` (enum) to `orders` table
- [ ] Column defaults to `pending` for new records
- [ ] Migration is backwards compatible and can be deployed independently
- [ ] Migration is reversible
### Technical Notes
- Table: `orders`
- Column: `processing_status`
- Type: `enum` (pending, processing, completed, failed)
- Default: `pending`
- Nullable: No
### Deployment Notes
- This migration should be deployed **before** any backend API
changes that reference this field
- Standard migration process applies
### Dependencies
- None (should be deployed first)Notice how the format is clear, consistent, and includes all the information needed to create a complete Jira ticket. The dependencies section uses exact ticket summary names, making it easy to link tickets together after creation.
Why This Approach Works
This workflow offers several key advantages:
- Safety through review: You maintain full control with multiple checkpoints before anything touches Jira. Nothing happens without your explicit approval.
- Easy to correct mistakes: Catching errors in markdown files is much easier than editing tickets after they're created in Jira.
- Consistent quality: All tickets follow the same format with complete information, reducing back-and-forth during sprint planning.
- Time savings: What used to take an hour or more now takes 10-15 minutes, including review time.
- Better documentation: The generated tickets often include more detailed technical notes than you might write manually when rushing through repetitive tasks.
- Reusable patterns: Once you've refined the prompt for your team's standards, you can reuse it across multiple epics with minimal adjustments.
Tips for Best Results
After using this workflow across multiple projects, here are some tips for getting the best results:
Prompt Customization
- Adapt to your team's standards: Customize the prompt template to match your organization's ticket format, required fields, and naming conventions.
- Be specific about scope: If you only want backend tickets, frontend tickets, or infrastructure tickets, specify this clearly in the prompt.
- Include examples: If your team has specific patterns for writing acceptance criteria or technical notes, include an example in the prompt.
Document Quality Matters
- Well-structured design documents produce better tickets: The clearer your Architecture Outline, the better Claude can parse and understand the work.
- Include technical details: API specifications, database schema changes, and code examples in your design document help Claude generate more accurate technical notes.
- Clearly separate concerns: If your document has distinct sections for different layers or services, Claude will more easily identify ticket boundaries.
Review Efficiency
- Check dependencies first: Verify that ticket dependencies are correctly identified, as these affect sprint planning.
- Validate acceptance criteria: Ensure all requirements from the design document are captured and nothing is missed.
- Verify field consistency: Check that all tickets use the same values for Squad, Stack, and other organizational fields.