Fatskills
Practice. Master. Repeat.
Study Guide: Principles of Product Management: Writing Effective User Stories (INVEST, Acceptance Criteria, Gherkin/BDD)
Source: https://www.fatskills.com/product-management/chapter/product-management-writing-effective-user-stories-invest-acceptance-criteria-gherkinbdd

Principles of Product Management: Writing Effective User Stories (INVEST, Acceptance Criteria, Gherkin/BDD)

By Fatskills Exam Guides Team — the exam nerds behind 28,500+ quizzes and 2.1M practice questions across 500+ global exams.

⏱️ ~8 min read

Writing Effective User Stories (INVEST, Acceptance Criteria, Gherkin/BDD)


Writing Effective User Stories (INVEST, Acceptance Criteria, Gherkin/BDD)

What This Is

User stories are concise, user-centric descriptions of a feature or functionality, written from the perspective of the end user. They bridge the gap between business goals and technical execution, ensuring teams build the right thing efficiently. Poorly written stories lead to scope creep, misaligned expectations, and wasted dev effort. Example: A fintech startup launching a "Round-Up Savings" feature might write a user story like: "As a budget-conscious user, I want my spare change automatically saved so I can grow my savings without thinking about it." This keeps the team focused on the why (user need) and what (outcome), not the how (implementation).


Key Terms & Frameworks

  • User Story (Template): "As a [user type], I want [action] so that [benefit/outcome]."
  • User type: Who is this for? (e.g., "new user," "power shopper").
  • Action: What do they want to do? (e.g., "filter search results by price").
  • Benefit: Why does this matter? (e.g., "to find affordable options faster").

  • INVEST Criteria: A checklist to evaluate story quality. A good story is:

  • Independent (can be developed in any order).
  • Negotiable (not a rigid spec; room for collaboration).
  • Valuable (delivers clear user/business value).
  • Estimable (developers can size it).
  • Small (fits in one sprint).
  • Testable (has clear acceptance criteria).

  • Acceptance Criteria (AC): Conditions that must be met for the story to be "done." Written as:

  • Scenario-based: "Given [context], when [action], then [outcome]." (BDD/Gherkin style).
  • Rule-based: Bullet points of requirements (e.g., "Error message appears if email is invalid").

  • Gherkin Syntax (BDD): A structured language for writing AC in a way humans and machines can understand. Uses keywords:

  • Feature: High-level description (e.g., "User Login").
  • Scenario: A specific test case (e.g., "Successful login with valid credentials").
  • Given: Preconditions (e.g., "User is on the login page").
  • When: Action (e.g., "User enters valid email and password").
  • Then: Expected outcome (e.g., "User is redirected to the dashboard").

  • Epic vs. User Story:

  • Epic: A large body of work broken into smaller stories (e.g., "Improve checkout flow").
  • User Story: A single, actionable piece of the epic (e.g., "As a user, I want to save my payment details so I can checkout faster").

  • Story Points: A relative measure of effort (not time) to complete a story. Uses Fibonacci sequence (1, 2, 3, 5, 8, 13) to account for uncertainty.

  • Definition of Ready (DoR): A checklist ensuring a story is ready for development (e.g., "Has AC," "Has mockups," "Is sized").

  • Definition of Done (DoD): A checklist for when a story is complete (e.g., "Code reviewed," "Tested," "Deployed to staging").

  • 3 C’s of User Stories:

  • Card: The physical/digital story (title + brief description).
  • Conversation: Discussion between PM, devs, and designers to clarify details.
  • Confirmation: Acceptance criteria that confirm the story is done.

Step-by-Step / Process Flow

  1. Identify the User and Need
  2. Start with a user segment (e.g., "first-time buyers") and their pain point (e.g., "abandon carts due to long checkout").
  3. Example: From user interviews, you learn that users drop off because they’re asked to create an account.

  4. Write the Story (INVEST Check)

  5. Draft the story using the template: "As a first-time buyer, I want to checkout as a guest so I can complete my purchase faster."
  6. Run it through INVEST:

    • Independent? Yes (can be built separately from other checkout features).
    • Negotiable? Yes (team can suggest a "one-click guest checkout" vs. a multi-step flow).
    • Valuable? Yes (reduces friction, likely increases conversions).
    • Estimable? Yes (devs can scope the work).
    • Small? Yes (fits in one sprint).
    • Testable? Yes (AC will define success).
  7. Add Acceptance Criteria

  8. Write AC in Gherkin or bullet points. Example (Gherkin): gherkin Feature: Guest Checkout Scenario: User checks out as a guest Given the user has items in their cart When they click "Checkout as Guest" Then they should see a form with email and shipping fields And they should not be prompted to create an account
  9. Example (Bullet Points):

    • User can enter email and shipping address without creating an account.
    • "Create Account" option is hidden on the checkout page.
    • Error message appears if email is invalid.
  10. Refine with the Team (3 Amigos Session)

  11. Bring PM, dev, and QA together to:

    • Clarify edge cases (e.g., "What if the user’s email is already in our system?").
    • Estimate story points.
    • Adjust AC if needed (e.g., add a "Save for later" option).
  12. Prioritise and Add to Backlog

  13. Use a framework like RICE or ICE to prioritise the story.
  14. Add to the sprint backlog if it’s high-priority.

  15. Review During Sprint Planning

  16. Ensure the story meets the Definition of Ready (DoR).
  17. Confirm devs understand the AC and can demo it at the end of the sprint.

Common Mistakes

  • Mistake: Writing stories that describe how to build the feature (e.g., "Add a ‘Guest Checkout’ button to the cart page").
  • Correction: Focus on the what and why (e.g., "As a user, I want to checkout without creating an account so I can save time"). Let the devs/designers figure out the how.

  • Mistake: Acceptance criteria that are too vague (e.g., "The feature should work smoothly").

  • Correction: Use specific, testable conditions (e.g., "The guest checkout form should load in <2 seconds"). Gherkin syntax helps here.

  • Mistake: Stories that are too large (e.g., "Improve the entire checkout flow").

  • Correction: Break into smaller stories (e.g., "Guest checkout," "Saved payment methods," "Address autofill"). Aim for stories that fit in one sprint.

  • Mistake: Ignoring edge cases in AC (e.g., "What if the user’s email is already registered?").

  • Correction: Brainstorm edge cases with the team and add them to AC (e.g., "If the email exists, show a ‘Log in’ option").

  • Mistake: Treating user stories as a replacement for documentation.

  • Correction: Stories are a conversation starter, not a spec. Supplement with mockups, flow diagrams, or technical notes as needed.

PM Interview / Practical Insights

  1. User Story vs. Use Case
  2. User Story: Short, user-centric, focuses on why (e.g., "As a user, I want to reset my password so I can regain access").
  3. Use Case: Detailed, system-centric, focuses on how (e.g., "User clicks ‘Forgot Password’-System sends email-User clicks link-System validates token-User sets new password").
  4. Interview Trap: Interviewers may ask you to write a user story for a complex feature (e.g., "Build a recommendation engine"). Your job is to break it into smaller, INVEST-compliant stories.

  5. INVEST Deep Dive

  6. Interviewers love to ask: "Which INVEST criteria is most important?"
  7. Answer: Valuable (if it doesn’t solve a real problem, the other criteria don’t matter). But Small and Testable are close seconds (they ensure the story is actionable).

  8. Gherkin in Interviews

  9. You might be asked to write AC for a feature (e.g., "Write AC for a ‘Dark Mode’ toggle").
  10. Example Answer: gherkin Feature: Dark Mode Scenario: User enables dark mode Given the user is on the settings page When they toggle "Dark Mode" to ON Then the app UI should switch to dark colors And the setting should persist after app restart

  11. Prioritising Stories

  12. Stakeholders may push for a story that’s "cool" but not valuable (e.g., "Add a chatbot to the homepage").
  13. How to Respond: Ask, "What user problem does this solve? How will we measure success?" Use data (e.g., "Only 2% of users engage with chatbots; let’s focus on checkout first").

Quick Check Questions

  1. Scenario: Your team wants to add a "Social Login" feature to reduce signup friction. Write a user story and acceptance criteria (Gherkin format).
  2. Answer: gherkin User Story: "As a new user, I want to sign up with Google so I can create an account faster." AC: Feature: Social Login Scenario: User signs up with Google Given the user is on the signup page When they click "Sign up with Google" Then they should be redirected to Google's OAuth page And after authentication, they should be logged into the app

  3. Scenario: A dev argues that a story is too big to estimate. How do you break it down?

  4. Answer: Split it by user journey steps or technical components. Example: For "Improve search functionality," break into:

    • "As a user, I want to filter search results by price so I can find affordable items."
    • "As a user, I want to sort search results by rating so I can see the best products first."
    • "As a user, I want to see search suggestions as I type so I can find what I need faster."
  5. Scenario: A stakeholder insists on adding a "Referral Program" story to the sprint, but the team is already at capacity. How do you respond?

  6. Answer: Use the INVEST framework to push back:
    • "Is this story Independent? No, it depends on the ‘Invite Friends’ feature we haven’t built yet."
    • "Is it Small? No, it requires backend changes, a new UI, and analytics tracking."
    • "Let’s break it into smaller stories and prioritise them for the next sprint."

Last-Minute Cram Sheet

  1. User Story Template: "As a [user], I want [action] so that [benefit]."
  2. INVEST: Independent, Negotiable, Valuable, Estimable, Small, Testable.
  3. Gherkin Syntax: Given [context], When [action], Then [outcome].
  4. Acceptance Criteria (AC): Must be specific, testable, and agreed upon by the team.
  5. Epic vs. Story: Epic = big goal (e.g., "Improve onboarding"); Story = small, actionable piece (e.g., "Add a progress bar").
  6. 3 C’s: Card, Conversation, Confirmation.
  7. Definition of Ready (DoR): Checklist for when a story is ready for dev (e.g., AC, mockups, sized).
  8. Definition of Done (DoD): Checklist for when a story is complete (e.g., tested, deployed, documented).
  9. Avoid: Writing stories about how to build the feature (leave that to devs/designers).
  10. Avoid: AC that are too vague (e.g., "The feature should work well"). Use metrics (e.g., "Load time <1s").