Learn

/

Bugs, Spikes, Tasks

Bugs, Spikes, Tasks

5 patterns

When a piece of work is not a story. Bug tickets that make the impact reproducible, spike tickets timeboxed to questions, and the plumbing work that genuinely belongs as a Task.

Avoid
Bug
RPT-91
CSV export is broken
Context

Acme noticed something off in their export.

Acceptance criteria
CSV export works
File looks normal
Acme is happy
Reported in Slack

Prefer
Bug
RPT-91
CSV export drops the trailing comma in numeric columns
Context

Reproduced on staging with the Q1 sales report (12 rows, 3 numeric columns). Open the export in any tool that respects RFC 4180 and the last numeric value is concatenated with the next row.

Acceptance criteria
Reproduce on staging using the Q1 sales report
Numeric columns export with their full value
Existing CSV-export tests still pass; add a row-boundary test
Reported by Acme on 2026-04-22, ticket SUP-1208
Why avoid

'Sometimes the file looks weird' is a starting point for a conversation, not a bug ticket. Without reproduction, scope, or expected behavior, the engineer is doing the bug investigation from scratch every time.

Why prefer

The right ticket gives reproduction steps, the surface the bug touches, and a test the engineer can write to prove the fix. Anyone on the team can pick it up cold.

Atlassian: Issue Types
Avoid
Story
PAY-077
13 pts
Customers can pay with SEPA direct debit
User story
As aEU customer
I wantto set up SEPA as my payment method
so thatI can avoid card processing fees
Context

We don't know yet which provider fits, but we want the flow shipped this sprint.

Acceptance criteria
Pick the best provider for our needs
Customer can enter bank details and sign the mandate
Direct debit appears on receipts

Prefer
Spike
PAY-077
3 pts
Investigate which payment providers fit our SEPA constraints
Context

Time-boxed to one sprint. The work of integrating becomes its own Story after this spike lands.

Acceptance criteria
Three candidate providers compared on cost, latency, and EU coverage
A recommendation written up in the team space
Open questions for the next refinement listed
Timebox: 5 days. Outcome: a written recommendation, not code.
Why avoid

A 13-point story with 'pick the best provider' inside it is a bet, not a plan. The team will burn the sprint discovering tradeoffs the spike could have surfaced in three days. 13 is a signal: split it or spike it.

Why prefer

When the team cannot estimate because the implementation approach is genuinely unclear, a timeboxed spike is the right move. Its acceptance criteria are answers to questions, not shipped behavior. The integration story comes after, with real numbers.

Mike Cohn: SPIDR
Avoid
Task
DASH-92
5 pts
Sales reps see deals sorted by close date
Subtasks
Add a sort dropdown to the dashboard header
Default the dashboard sort to upcoming close date
Update copy on the empty state
Add analytics for the new sort option
Visible on the sales dashboard for all reps.

Prefer
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 any breaking changes in route handlers
Confirm CI is green
No user-facing change. Quarterly framework upkeep.
Why avoid

The subtasks read like plumbing, but the footer gives it away: every sales rep on the dashboard sees this change. That makes it a Story with acceptance criteria, not a Task. Filing it as a Task hides user-visible work from the demo.

Why prefer

Framework upgrade is plumbing. Nobody on the outside notices, the team tracks it because it has to happen, and Task is the right shape: real work, no user, no story framing.

Atlassian: Epics, Stories, and Initiatives
Avoid
Spike
AI-22
5 pts
Look into LLMs for support replies
Description

See what's possible. Build a prototype if there is time.

Acceptance criteria
Explore LLM options
Get a feel for what's doable
Share findings with the team

Prefer
Spike
AI-22
3 pts
Decide whether to use LLMs for first-draft support replies
Context

Support handles ~120 tickets a day. Most are repetitive. The question is whether an LLM-assisted draft would save time without leaking PII.

Acceptance criteria
A short doc compares two model options on cost, latency, and PII handling
A 50-ticket sample shows whether drafts would save support time
A go/no-go recommendation with named blockers
Timebox: 4 days. No production code.
Why avoid

'See what's possible' is a curiosity, not a spike. With no question to answer and no time bound, it expands to fill the sprint and produces a half-prototype that nobody owns.

Why prefer

A spike is research. Its acceptance criteria are answers to specific questions and a recommendation. The timebox and 'no production code' line keep the work honest.

Mike Cohn: SPIDR
Avoid
Bug
FEED-71
5 pts
Users want infinite scroll on the activity feed instead of pagination
Context

Several users have asked for infinite scroll in support tickets and the #feedback channel. The current pagination feels dated.

Acceptance criteria
Activity feed loads more items as the user scrolls
The Next/Prev pagination controls are removed
Loading state is shown at the bottom of the feed

Prefer
Bug
FEED-71
2 pts
Activity feed loses scroll position when a new item is prepended
Context

On Chrome and Safari, when a new activity arrives via WebSocket, the feed jumps to the top instead of preserving the user's scroll position.

Acceptance criteria
Reproduce by sending a WS event while scrolled to position 1200
Scroll position is preserved when new items prepend
Existing prepend tests pass; add a regression for the WS case
Why avoid

'Users want X instead of Y' is a feature request, not a bug. Filing it as a bug ducks the prioritization conversation and lets it skip the line in front of actual regressions.

Why prefer

A bug is something working incorrectly against an existing expectation. Scroll-position drift on a feed update is a regression with a clear before/after. The acceptance criteria are reproducible.

Atlassian: Issue Types