One or more Behavior Scenarios (also known as Use Cases or Usage Scenarios) are encouraged in a Feature Request in order to describe the requirements in an unambiguous and compact manner.

Feature requests that include detailed Behavior Scenarios or Use Cases can be more easily reviewed and are more likely to be prioritized for development since these use cases provide more detailed information about the requested feature and improve the likelihood of a successful outcome in development.

Gherkin or Given / When / Then language

Gherkin, also known as Given / When / Then syntax, is a language for writing Behavior Scenarios. Gherkin is a plain-text language with a simple structure and is intended to be easy enough to learn for non-programmers while allowing the level of specificity required by developers to successfully develop a feature.

Gherkin scenarios are meant to be short and sound like plain English. Each scenario has the following structure:

Here is an example usage scenario in Given / When / Then syntax:

Feature: As a non-logged in user, I want to login, so that I can access restricted 
         functionality

Background: As the staff area of ArchivesSpace includes functions that need to be 
            available to staff personnel only, users should go through a login process
            before accessing it.
            
Rule: Login is only possible with valid credentials
            
Scenario: Sucessful Log-in
Given a user has already created a staff account
When the user inputs their correct credentials in the login form 
Then the user should be successfully logged in

Scenario: Attempt to Log-in with wrong password
Given a user has already created a staff account
When the user inputs their username correctly but their password is misspelled 
Then the user should see a "Login attempt failed" message

The most important keywords in Given / When / Then Syntax are:

Note that there is no “Or” step in Gherkin, each scenario is a sequence of steps describing a behavior. If an Or step seems necessary to describe another path in the sequence of events in a scenario, then it is probably better to add another scenario to describe the alternative path.

Given-When-Then steps must appear in order and cannot repeat. A Given may not follow a When or Then, and a When may not follow a Then. That is because any single When-Then pair denotes an individual behavior and each scenario covers one behavior.

Any time more than one When-Then pair seem necessary, separate scenarios should be written instead. Each scenario should describe a single behavior.

Step Phrasing

Here are some basic recommendations on how to write steps:

Write all steps in third-person. If first-person and third-person steps mix, scenarios become confusing.

Write all steps in order.

Write steps as a subject-predicate action phrase. Both passive and active voice can be used but be sure to write your scenario in a way that describes the intended action.

Include as much detail as possible: Do not leave out parts of the scenario for brevity. Do not assume that the reviewer is familiar with organization-specific workflows and processes. If the feature request impacts or is dependent on archival standards, include this information.

Use present tense for all step types to ensure that each step refers to an action that happens during the scenario and not something that should have happened already or will happen at some future time.

Real World Example

As an example the feature request ANW-504 could be further clarified with the following behavior scenarios:

Feature: As a staff user, I want to mark none or exactly one agent link of a resource as 
         primary, so that the primary agent appears as a 1xx field in MARCXML resource 
         exports.

Background: The primary agent should appear as a 1xx field in MARCXML exports. 
            It should not be viewable anywhere in the PUI.
            On the SUI only viewable on the edit and show views of a Resource 
            | Digital Object | Accession | Resource Component | Digital Object Component 

Rule: When no linked agent is marked as primary on a resource, no 1xx field appears in 
      the MARCXML export of that resource, and no agent link is marked as primary in 
      the show view of that Resource | Digital Object | Accession | Resource Component 
      | Digital Object Component on SUI.

Scenario: As a staff User, I want to be able to mark no agent as primary on a Resource so 
          that no primary agent appears in the show view of that resource
Given the user edits a resource on SUI
And the resource has three agent links (two creators and one subject)
But the user does not mark any of the three agents to be a primary agent
When the user opens the show view of that resource 
Then no "primary" label appears next to any linked agent

Scenario: As a staff User, I want to be able to mark no agent as primary on a Resource so 
          that no 1xx field appears in the MARCXML export of that resource
Given the user edits a resource on SUI
And the resource has three agent links (two creators and one subject)
But the user does not mark any of the three agents to be a primary agent
When the user downloads a MARCXML export of that resource
Then no 1xx field appears in the MARCXML

Scenario: As a staff User, I want to be allowed to mark exactly one agent as primary 
          on a Resource
Given the user edits a resource on SUI
And the resource has three agent links (two creators and one subject)
And the second agent link is already marked as primary
When the user clicks on the "Make primary" button of the first agent
Then the "primary" label is removed from the second agent
And the "Make Primary" button appears on the second agent
And the "primary" label appears next to the first agent in the edit form

Scenario: As a staff user, I want to see a "primary" label next to the primary agent of a 
          resource, on the show view of the resource, so that it becomes clear that there 
          is a primary agent defined for that resource
Given a staff user marks an agent link as primary on a resource
When the user opens the show view for that resource
Then a "primary" label appears next to the agent link marked as primary
      
Scenario: As a staff user, I want to see a 1xx field for the primary agent in the MARCXML 
          export of a resource
Given a staff user marks an agent link as primary on a resource
When the user downloads a MARCXML export of that resource
Then a 1xx field appears in the MARCXML for the primary agent link

Further Reading

A more detailed article on how to write good Behavior Scenarios can be found here.