Learn

/

Epic, Story, Task

Epic, Story, Task

6 patterns

What each level of the Jira hierarchy is for. Why skipping the Story layer turns every Epic into a pile of plumbing nobody can roadmap from.

Avoid
Epic
PAY-100
Customers can pay with SEPA direct debit
Child issues
Migrate paymentService to v3 client
Add SEPA_MANDATE table
Update useCheckout hook
Wire up webhook handler
Backfill existing customers

Prefer
Epic
PAY-100
Customers can pay with SEPA direct debit
Child issues
Customer enters bank details on checkout
Customer signs the mandate inline
Customer sees direct debit on receipts
Failed debits notify the customer and pause the subscription
Backfill existing customers
Why avoid

Five Tasks under an Epic signal plumbing to everyone reading the board. The Epic's reason for existing evaporates between the description and the implementation list, and nobody outside the original author can tell what 'done' looks like for the Epic as a whole.

Why prefer

Each child of the Epic answers what a customer will be able to do that they couldn't before. Product can sequence them, design can spot friction, and the operational backfill is correctly tagged as a Task because no human benefits from it directly.

Atlassian: Epics, Stories, and Initiatives
Avoid
Epic
AUTH-100
Auth refactor
Description

See Figma. Lead: Mark.

Context

Came out of last week's planning. Mark has the details.

Out of scope:TBD, ask Mark.

Prefer
Epic
AUTH-100
Users stay signed in across tab reloads
Description

Reloading or opening a new tab keeps the session, unless the session has actually expired.

Context

Support has flagged dropped sessions as the top complaint this month. Users open the app in a second tab and lose their work.

Out of scope:"Remember me" persistence across browser restarts (separate Epic).
Why avoid

A one-line description and a Figma link puts the why entirely in the original author's head. New joiners cannot tell what is being shipped, and there is no shared definition of when the Epic is done.

Why prefer

The Epic states the outcome, the reason it matters, and what is explicitly out. Six months from now, when nobody on the team remembers the original support complaint, the Epic still answers 'why did we touch the auth layer?' for itself.

Atlassian: Epics, Stories, and Initiatives
Avoid
Task
PLAT-44
3 pts
Upgrade Next.js from 15 to 16
Subtasks
Update package.json to next@16
Run codemod for the new caching defaults
Fix breaking changes in route handlers
Confirm CI is green

Prefer
Task
PLAT-44
3 pts
Upgrade Next.js from 15 to 16
Description

Streaming preview in EDIT-218 only works on Next 16. This Task moves with that Story.

Subtasks
Update package.json to next@16
Run codemod for the new caching defaults
Fix breaking changes in route handlers
Confirm CI is green
Unblocks EDIT-218: Editors get streaming-render preview
Why avoid

The subtasks are honest and the work is real, but the Task is an island. Nobody reading the board can answer 'why now?' without asking the author. If the Story it was meant to unblock slips, this Task sits in a corner with no signal.

Why prefer

Plumbing is correctly shaped as a Task, and the link to EDIT-218 anchors it to the user value it unblocks. When that Story moves on the board, this Task moves with it. When the team sequences the sprint, they can see which user-facing work sits behind the upgrade.

Atlassian: Epics, Stories, and Initiatives
Avoid
Story
AUTH-482
3 pts
Users stay signed in across tab reloads
Subtasks
Adopt new cookie helper from DEV-1234
Remove the legacy parseToken path
Add integration tests for reload and new-tab flows
Build the entire authentication feature for SEPA payments

Prefer
Story
AUTH-482
3 pts
Users stay signed in across tab reloads
Subtasks
Adopt new cookie helper from DEV-1234
Remove the legacy parseToken path
Add integration tests for reload and new-tab flows
Why avoid

Building an entire authentication feature for an unrelated payment Epic is not a Subtask, it is its own Story under a different Epic. Subtasks should be implementation steps inside one work item, not separate features smuggled in.

Why prefer

Each Subtask is engineering detail inside the parent Story, scoped narrowly enough that it doesn't need its own acceptance criteria. The parent Story's Connextra and AC speak for the whole bundle.

Atlassian: Epics, Stories, and Initiatives
Avoid
Epic
ADM-12
Admin tooling
Child issues
Build CRUD endpoints for teams
Wire up React table on /admin/teams
Add role guard to admin routes
Migrate existing team rows to new schema

Prefer
Epic
ADM-12
Admins can self-serve team membership
Child issues
Admin invites a new member by email
Admin removes a member from a team
Admin transfers team ownership
Migrate existing team rows to new schema
Why avoid

Subtasks hung directly off an Epic skip the Story layer entirely. There is no shippable, demoable unit between 'Epic' and 'engineering detail', so progress can only be reported as a percentage of subtasks, not as features delivered.

Why prefer

Each Story names an admin action, which gives QA a thing to verify and product a thing to demo. The schema migration stays a Task because no admin sees it. Subtasks would live inside each Story, not directly under the Epic.

Atlassian: Epics, Stories, and Initiatives
Avoid
Epic
SEARCH-44
Search v2
Child issues
Replace Postgres FTS with OpenSearch
Reindex articles nightly
Add /api/search/v2 endpoint
Migrate /search page to call v2

Prefer
Epic
SEARCH-44
Readers find articles by topic and date range
Child issues
Reader filters search results by topic
Reader narrows results to a date range
Reader sees why a result matched (highlighted snippet)
Replace Postgres FTS with OpenSearch
Why avoid

All-Task children describe the implementation, not the user-visible change. Without a Story layer, the Epic's name 'Search v2' has to carry the meaning, and 'v2' tells you nothing about what readers actually gain.

Why prefer

Reading just the children, you can answer 'readers will be able to filter by topic, narrow by date, and see match snippets.' The infrastructure swap stays as a Task because readers don't see it. The Story layer is what makes the Epic readable to people who weren't in the planning meeting.

Atlassian: Epics, Stories, and Initiatives