The bugs that hurt aren't the ones engineering wrote — they're the ones nobody specified. This playbook runs every story through systematic acceptance-criteria generation plus an adversarial what-breaks-this pass, the highest-consensus, lowest-risk AI use in all of spec writing: engineering validates feasibility, you validate intent.
Workflow area: Specs & Docs · Tier: Foundation · Hands-on time: ~25 minutes
Edge-case enumeration is where AI assistance and PM work fit together almost perfectly. Models are exhaustive where humans are creative-but-tired: they will faithfully generate the empty-state, the concurrent-edit, the timezone boundary, and the permissions-revoked-mid-flow case on the fiftieth story with the same rigor as the first. What they cannot know is which cases matter for your users and what the product should want to happen — that's the intent, and it stays yours.
Give the model real context, not just the story title. Paste the story plus the two paragraphs of surrounding truth: who the user is, what the feature connects to, known constraints:
Story: [AS-A / I-WANT / SO-THAT + any description you have]
Product context: [2-3 LINES — platform, user roles, adjacent
features this touches]
Constraints: [e.g. "mobile web must work; roles: admin, member,
viewer; data syncs async with up to 60s lag"]
1. Write acceptance criteria in Gherkin (Given/When/Then) for the
happy path — every meaningfully distinct variant.
2. Enumerate edge cases in these categories, as Gherkin where the
expected behavior is inferable and as OPEN QUESTIONS where it
isn't:
- empty/zero/max states - permissions & roles
- concurrency & mid-flow interruptions - connectivity/offline
- localization, timezone, formatting - lifecycle (deleted/
archived/suspended entities)
3. Do NOT invent product decisions: when the right behavior is a
judgment call, ask the question instead of answering it.
Answer the open questions — this is the PM work. Good output looks like:
Scenario: Approver's role revoked mid-approval
Given a pending request assigned to an approver
When that approver's role is downgraded to member
Then — OPEN QUESTION: reassign to fallback approver, or block
and notify admin? (Spec doesn't say.)
Scenario: Amount at exactly the auto-approval threshold
Given the auto-approval limit is ₹5,000
When a request of exactly ₹5,000 is submitted
Then — OPEN QUESTION: inclusive or exclusive boundary?
Every open question you answer here is a Slack thread that won't happen mid-sprint. Write the answer into the AC yourself.
Run the adversarial pass on the completed set. New message, same conversation:
Now attack this spec. You are a hostile QA engineer and a confused
first-time user. List the 10 most likely ways this feature breaks,
embarrasses us, or confuses users — that the acceptance criteria
above do NOT cover. Rank by (likelihood × user pain). No repeats
of covered cases.
Expect two or three findings that genuinely matter; add them, discard the theoretical ones — and notice which ones you discard, because "discarded knowingly" is a decision, unlike "never considered."
Prune to what you'd actually test. Thirty Gherkin scenarios on a two-point story is spec theater and engineering will (rightly) stop reading. Collapse trivial variants, keep boundaries and permissions, and mark the cases that are explicitly out of scope for this iteration — an "out of scope" list is itself a decision worth recording.
Hand it to engineering as a draft, labeled as one. The refinement conversation improves: they add the technically-informed cases the model couldn't see (your queue behavior, your cache invalidation), you defend intent. AC authorship converges; accountability doesn't — it's still your spec.
Stories often quote customer names and unreleased plans — run enumeration in your approved AI workspace, and strip customer identifiers from stories pasted into consumer tools.
AI enumerates; you decide. The model's value is never missing the revoked-role case at 4 p.m. on story fifty — yours is knowing what should happen when it fires. A spec where every edge case carries a human decision is the cheapest quality investment in this entire track.