How to Refine an Epic in 30 Minutes or Less | John's Tips 2024W45
Learn how to refine epics in 30 minutes or less with a clear process using AI tools. This guide helps improve and standardise acceptance criteria, streamlining epic/feature refinement and saving time.
When it comes to creating epics(features), it’s easy to get bogged down in details. Many product managers and team leads wrestle with finding the right balance between providing essential information and getting lost in an overload of acceptance criteria.
Some of my coworkers were curious recently when I shared with them how quickly I was able to refine epics and tickets with ChatGPT enterprise, and as a result of that, I thought it was time I developed a step-by-step process to share for others to follow.
So, here’s how you can structure and refine an epic in 30 minutes or less, using a template that’s easy to adopt and repurpose to your own needs.
Note: To follow these instructions, you’ll need access to an AI language model (LLM) tool that allows you to share work-related documentation. If you don’t have this yet, you and your company are truly missing out. Regardless of any reservations about these tools, they are incredibly effective at reducing time spent on the more mundane aspects of project management - particularly for generating acceptance criteria, as demonstrated in this blog.
2nd Note: For the purpose of this blog, anything in a quote box like this is a prompt I use in ChatGPT. Keep that in mind, as I may not mention it every time.
Here’s a recording of the ChatGPT portion of the steps below, so you have an idea of the process. Most of this is in screenshots below, so feel free to skip this until the end.
Step 1: Gather and Format Your Initial Content
First things first: start with a single chat thread for each project.
I might have multiple epics for the same project, and I don’t want to have to send the context of the PRD/Miros every time. It’s no harm refreshing it and re-sending it when the user stories start to look a bit weird after a week or so in the same chat, but you don’t have to do this every time.
For the epic in question, begin by assembling any existing content you have related to the project. Ideally, you should have one or more of the following:
A customer journey map. I use Miro for this. ChatGPT works really well with frames exported from miro (as PDF, not PNG - PDF works way better), and it’s really quick to give it a refresher if it has lost context in the chat.
An initial problem statement
A high-level objective with all the necessary diagrams or context documents, like a PRD, discovery doc and/or tech specs.
Note: If you don’t already use a customer journey map, consider implementing one. Not only do you get all the benefits of doing a customer journey map (listed in the blog below), but you have a really quick way to share your project with AI. Very very useful.
Here is a PDF of my proposed customer journey for this initiative. Green stickies are facts or answered questions, yellow stickies are unconfirmed facts or unanswered questions. Stars are manual steps.
Step 2: Create your Epic Template
Below is the epic template I have been using recently. I feel like this has the right amount of information that should be shared in an epic. This is just enough context for engineers and not too much that you’ll have to be updating it any time the user stories change. More on that later.
Step 3: Add High Level Content and Generate the Initial Task List for your Epic
Start by filling in the problem statement, objectives, and any necessary context that needs to go into the top part of the epic.
The key with the AI tool you are using is to not ask it for too much. If you only send the problem statement and ask it for a breakdown of all the acceptance criteria and user stories, you’ll end up with a pile of rubbish. You can also get it to refine your epic title and objective, so you don’t have to spend a lot of time perfecting it.
This initial setup lays the groundwork, so when you send the content to ChatGPT (or whichever AI tool you use), it’s easier for it to generate relevant tasks and acceptance criteria based on your specific needs.
Here is a sample epic, where I’m looking for help to create a new AI section on my blog.
I would send this screenshot into ChatGPT along with the following prompt.
I want help refining my epic JT-9, which is attached - On the first screenshot you can see the problem statement. Can you break down the problem and fill in the tasks as you see fit in the format of the screenshot?
Feel free to add multiple subtasks under each key task if they need them. I have also attached a user journey map for more context. Please also give me a better title for the epic if you think this one doesn't work.
You’ll see in the screen recording at the top of the page, that I’ve had to correct the output a couple of times before It matched what I provided in the screenshot. This is probably where you will spend the highest amount of effort is just pasting the output and making it look neat.
You have used bullets in this list which is different than my screenshot. Please follow the template in my screenshot
Tasks should be broken down in an indented numbering list
Here’s what that looks like in my epic, now with a refreshed title, objective and a bunch of tasks.
Definitely too much info. We’ll sort that next.
Once you do get the format sorted and are happy with the output, you should save it to memory.
I'm happy with this output format, please save this to memory as the format you should print epic tasks in the future
Step 4: Refine your task list
With the initial content set, there is definitely going to be some irrelevant tasks or information. This is where you need to revise and reduce the stuff that is there.
For the purpose of this guide, let’s assume I already have the section layout, I don’t care about SEO, user testing or user feedback. I’ve also removed subcategories and various filtering tasks that ChatGPT made up for me.
I’ll now send the above screenshot along with the below prompt.
I have refined that list a bit, removed some tasks and changed some of the subtasks. Attached is the list of tasks I am happy with for this epic. Please await further instructions in the next prompt.
Step 5: Define User Stories and Acceptance Criteria Format
The next step is to outline the format I want the user stories or job stories that will form the acceptance criteria for each task. If you use Job stories vs. User stories, and don’t use Gherkin you’ll need to edit the template and prompt to say what you are looking for.
Fun fact, Gherkin user stories is the actual name for Given, When, Then - Wiki
I’ll then send a screenshot of the empty table (without MoSCoW - that’s for you to use separately)
Along with this prompt. The bold parts are where you might change your format:
Here is a screenshot of how I would like you to create user stories for my acceptance criteria. Don’t create them yet, wait for my next prompt. This should be a user story format and each sub task should have at least one gherkin user story with the first word bolded like you can see in my screenshot.
Step 6: Populate Individual Tasks with Acceptance Criteria
Once your tasks are refined and you have established the template for your ACs, it’s time to add them to each individual task.
I’ll repeat myself here again, do this one at a time. Try it one at a time first so you have a baseline of how good your LLM is, then the next time you are refining you can attempt all tasks in one go, to see the quality difference.
It might work fine for simple stories, but if you have more than a handful of tasks with 2/3 subtasks each, it is very hard to refine and edit them all in one go.
You should also consider do this step on a workshop with your team/triad, in a refinement or a coworking session, as you’ll be able to edit the ACs with your engineering counterparts, and have finalised stories by the end of the meeting.
This is the best way of doing this in my opinion, as you don’t have to spend time resending all the context to ChatGPT the next time you refine the stories. Overall it will save you some time.
Please create the AC for this task, following the format we agreed on
Great! These look pretty good, but I know I’m going to have to format the text again, as it is all in a continuous line.
I’ve noticed this about ChatGPT that it doesn’t do formatting of line breaks in tables, so I’ll just ask it to remove the table. If you see in my recording, I tried to get it to add new lines after the bolded words, but it couldn’t do it.
Please put all the bolded words in the AC on new lines
As a result I asked it to remove the table, and it left the new line instruction in place
Please don't use the table format
Then I told it to forget what I said about line breaks and it gave me the correct format
One last nitpick on my end was that I like the scenarios to have titles. So I asked for that too.
I'd prefer if the scenario had a title, can you add those please
Great. The format is what I want it to be.
Nice. I like this format, please save it to memory for creating ACs
I don’t actually know if this memory is saved across chats, but I assume at some point it will if it doesn’t now, so it’s still good practice.
Now, the product manager in me is kicking in. If you noticed in the previous prompt where I sent in my task, when I removed the subtopics I forgot to remove the subtopic part from my actual task title, and it has generated them in the AC.
This is usually something I can edit myself, without having to go back to ChatGPT to tell them to remove it. It would take the same effort either way.
Once I edit and refine the ACs myself or with the team, I’ll usually send it back in to be saved as memory. This gives the GPT better context when creating the next stories.
Here is the refined version of that task that we settled on
One thing to note here, this is purely demo ACs, and I probably wouldn’t have so much going on in one story. I prefer smaller stories with one user story and one or two scenarios we need to test. I don’t like 5 pointer stories in general, and try to break them down as much as possible.
Step 7: Finalise the Acceptance Criteria
Once you and other leads review the task list, user stories and agree on the prioritisation (e.g., MoSCoW), lock in the high-level user stories and check off the acceptance criteria. Use the MoSCoW table column in the template to categorise each task’s.
The checking off is obviously optional, but if you have many stories to work through, you might not get to them all, and as a lead, it’s good to know which ones you agree on before moving to the next step.
This example again isn’t what I might end up with precisely, as I said, I would likely only have one actual user story to be ranked with MoSCoW, instead of the three below.
After final approval, copy the specific task into each new user story and populate the epic-level ticket with the complete set of criteria. At this stage, you should have a fully fleshed-out set of acceptance criteria within each story, minus the table in JIRA.
If the engineer needs further context, they can go up to the epic for diagrams. Feel free to add screenshots here too if there is something specific to display that is for this story only. That’s up to you
This is also where I remove the actual content of the AC in the epic level, and keep the lowest level ticket (story) as the source of truth.
Too much can change in the development and refinement process of individual tasks and stories to have to maintain user stories in more than one place. It’s just not worth the effort.
This is what the task will look like at the end of refining the epic.
Bonus Tip:
Once you have enough context in one chat, your engineers may send you a bug or task to refine and give AC in order to release and test, where they already have a solution laid out.
This might not be the “Proper” process, but it happens everywhere, so don’t judge anyone who ends up having solutions first in some cases. People are busy, and the leads can’t be everywhere.
If you think about it, it’s actually the sign of an empowered engineering team.
If you get one of these tickets and don’t have time to deep dive into technical aspects of the specific ticket, or there is a ticket with a bunch of comments discussing the path forward, you can use the same process to generate acceptance criteria in the preferred format using the context of the whole ticket.
I’ve found the best way to send the ticket to ChatGPT is by using the Jira Print functionality
Then by using chrome print to PDF of the following screen
Then Send that PDF to ChatGPT
My engineers have sent me this ticket in order to add ACs. Can you add the ACs in the same format as before using all the context from the ticket and comments in the attached PDF?
Simply send the criteria to your engineer and confirm it’s accurate. At this point, you’ll only need to make minor adjustments, if any.
It also prints everything in non-technical ACs, which will speed up your understanding of what they are trying to achieve and the persona it is aimed at.
By following these steps and incorporating AI-driven tooling, you can refine an epic in very little time at all.
Once you get the hang of it, you should be able to complete an entire epic in just 30 minutes.
Not only does this streamline the ticketing process, but it also helps establish a uniform style for all your epics and stories.
So if you’re looking for a faster, more efficient way to create epics, give this process a try and see the difference it makes.
For More Tips
I have some other Product Operations content here if you found this useful.
For my past tips check out my past posts on Substack or check out the hashtag #JohnsTipOfTheWeek on LinkedIn.
I’d love if you subscribed! I’m trying to build a bit of a following to try and help folks in the industry and make their jobs a little bit easier.