In [[Agile]] methodologies, features are often planned at several levels, each one with a specific format. ## Theme A theme is a broader project plan around a topic that the business would like to address. A theme is usually a pages-long document of many paragraphs, describing in prose the reasoning for a feature or group of features, and giving a rough overview of how it might be implemented. ![[assets/project-plan.png]] [^kotz] ## Epics ![[assets/epic.png]] [^safe] The next level of abstraction down is epics. Epics are still not at the nitty-gritty level, but at this level, we do see a bit more structure. In Agile methodologies, epics answer a standard set of prompts. We're breaking up paragraphs into smaller sentences that are more actionable. ## User stories <font color="green">As an</font> account owner, <font color="green">I want to</font> deposit and withdraw money from my account <font color="green">so that</font> I can save and spend my money. User stories are typically included in epics, and they zoom in a little bit more on a feature. Here's a standard formula for a user story: As an account owner, I want to deposit and withdraw money from my account so that I can save and spend my money. The phrases "As a", "I want to", and "so that" are important here. ## Behavioral specifications ```gherkin Feature: Deposit and withdraw Scenario: User clicks Add 3 When the user clicks Add 3 Then 3 is subtracted from the balance ``` A likely offshoot of user story is a behavioral specification. This is an example of one written in Gherkin, a business readable language[^gherkin]. The goal of Gherkin is to translate business requirements into a more logical structure that can serve as the basis for tests, but also code. Gherkin's structure is less ambiguous, making it easier for developers to interpret what requirements mean into programming languages. Gherkin is an application of the principle of [[Behavior-Driven Development]]. The words "feature", "scenario", "when", and "then" are still prompts, but they're _also_ keywords - kind of like the logical keywords if, then, when, else that we see in code. [^kotz]: Kotz, M. (2010). _Minnesota geospatial commons - test implementation_. Retrieved from https://www.examples.com/business/business-project-plan.html [^safe]: _Epic - scaled agile framework_. Scaled Agile Framework. Retrieved in June 2021 from https://www.scaledagileframework.com/epic/ [^gherkin]: _Gherkin reference_. Cucumber.io. Retrieved in June 2021 from https://cucumber.io/docs/gherkin/reference/