Verified against ChatGPT · 2026-08-12
Write user stories that pass the INVEST test instead of restating a feature as a story
Rewrites a feature idea into properly scoped user stories that pass the INVEST criteria (independent, negotiable, valuable, estimable, small, testable), flagging any that are actually too large or too vague to be one story.
The prompt
Ready to copy — highlighted parts are example details you can swap.
Turn the feature idea below into properly scoped user stories, checked against the INVEST criteria — independent, negotiable, valuable, estimable, small, testable. Most "user stories" people write are just the feature restated in the "As a... I want... so that..." template with no actual scoping thought behind them; I want the real thing.
FEATURE IDEA
Let users export their order history and also get notified when an export is ready, plus let them schedule recurring exports.
USER TYPES INVOLVED
Individual shoppers exporting their own history; store admins exporting all customers' order history for accounting.
KNOWN TECHNICAL CONSTRAINT OR DEPENDENCY
Export generation runs as an async background job; there's no notification infrastructure yet, that would need to be built first.
For each user type, draft the story in the standard format, then explicitly check it against each INVEST letter and flag any that fail: Independent — can this ship and be tested without another story shipping first, or does it silently depend on one (name the dependency if so, rather than ignoring it). Negotiable — is this a description of value and outcome, or does it specify implementation details that should be left to the team building it (rewrite to remove implementation prescriptions if present). Valuable — does completing this story produce something a real user would notice or benefit from, or is it a technical task disguised as a story (technical tasks belong on the backlog as tasks, not as user-facing stories — say so if this is actually one). Estimable — is there enough clarity here for a team to size it, or is a key unknown blocking estimation (name the unknown). Small — could this reasonably be finished within one sprint, or does it bundle multiple distinct pieces of value that should split into separate stories (if so, split it and show the split). Testable — is there a clear way to know when this is done, even before acceptance criteria are written out in full.
If a story fails Independent or Small, do not just flag it — actually perform the split or note the sequencing dependency explicitly, since flagging without resolving leaves the same scoping problem for someone else to solve later.
WHAT NOT TO DO
Do not write a story so vague it would pass every INVEST check trivially by saying nothing concrete ("As a user, I want a good experience"). Do not invent acceptance criteria in this pass — that's a separate step; keep this focused on story scoping.
OUTPUT FORMAT
For each story: the story text, then a short INVEST check as a bullet under each of the six letters (pass or the specific issue found), then, where a split or dependency was found, the resulting split stories or named dependency.Customize
Optional — swap in your own details for the highlighted parts above.
Why this works
GPT-5.1 asked to "write user stories" without a scoping framework will reliably produce grammatically correct As-a/I-want/So-that sentences that restate the feature description almost verbatim, because the template itself doesn't force any decomposition — the model completes the sentence structure without needing to actually reason about size, dependency, or whether the story bundles multiple pieces of value, which is exactly the gap that makes so many real backlogs full of stories that are really epics wearing a story's format. Forcing an explicit per-letter INVEST check changes this because each letter asks a genuinely different structural question the model has to answer against the actual content, not just the template shape — checking "Small" specifically requires the model to notice that "export, notify, and schedule recurring" is three distinct pieces of value bundled into one ask, which a bare story-writing instruction would happily leave merged since nothing in the request format objects to size. The instruction to actually perform the split rather than just flag a failure matters because a flagged-but-unresolved INVEST failure just relocates the scoping work to whoever reads the output next — the value of running this check at authoring time is catching and fixing the problem before it enters a sprint-planning conversation, not producing a report of problems still waiting to be fixed. Explicitly separating story-scoping from acceptance-criteria-writing as two different steps matters because conflating them tends to produce stories that are either underspecified (no criteria at all) or overloaded with implementation detail baked into the story text itself, which then also fails the Negotiable check — keeping the two passes distinct lets each be checked on its own terms.
What you get back
Original: 'As a shopper, I want to export my order history, get notified when it's ready, and schedule recurring exports.' INVEST check — Small: FAIL, bundles three distinct pieces of value. Split into: Story 1 — 'As a shopper, I want to request an export of my order history so I can keep records outside the app' (Independent: yes, standalone). Story 2 — 'As a shopper, I want to be notified when my requested export is ready so I don't have to keep checking' (Independent: FAIL, depends on Story 1 shipping and on notification infrastructure not yet built — name this as a sequencing dependency, build after Story 1 and the notification system). Story 3 — recurring export scheduling, deferred as its own story pending the first two.
Verified against
ChatGPT GPT-5.1 · 2026-08-12
Changelog
- 2026-08-12 — Initial publish, verified against ChatGPT GPT-5.1.
Need this built into your business?
If a prompt isn't enough — branding & design, built and maintained for you — that's Scult's day job.
EXPLORE BRANDING & DESIGN
