Group - Expectations Customer journey - What is customer journey ? - Hero omelette As-is pain point and solution - Customer painpoints - What problem to fix - Ideation Build user story mapping - What is user story mapping ? - Understand the problem by scenario: Major Cinema - Build stories Epics to stories - How to slice story - User, value focus Writing stories - What does good look like ( As a, so that ) Value and Estimation - Dog estimation workshop - Estimation - Priority - Release Applied to scenario Applied to user story mapping - Estimation - Priority - Release
result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout I want to buy a power bank - Ecommerce
top result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I go to the detail page I compare prices
top result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I compare prices I go to the detail page
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting With alternate flow I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I go to the detail page I compare prices
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting With alternate flow I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I go to the detail page I compare prices
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting We can start to add flow to the story I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I go to the detail page I compare prices Yes
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting Some part of the story can have a logic gate I set filter and sorting I make shortlist of items I favorite items that i like Is this the best deal? I go to the detail page I compare prices Yes
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting With alternate flow I set filter and sorting I make shortlist of items I favorite items that i like I go to the detail page I compare prices Yes Is this the best deal?
result I see category page of “Power Bank” I put product into the basket I go to checkout Browse Looking to buy Converting With alternate flow I set filter and sorting I make shortlist of items I favorite items that i like I go to the detail page I compare prices Yes Is this the best deal? No
a solid, tangible business benefit as a reason for the existence of this feature, you can... • Avoid unnecessary work • Better prioritize the features • Possibly provide better alternatives
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message As Customer I want search by shoe keyword So that I can check whether the store has the specific shoe model I know want
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message As Customer I want Add 1+ items to cart So that it does not have to spam buttons when buying multiple items
Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow Search by keyword Filter by price Search by SKU Filter by brand View desc & photo Read shoes reviews 360-view of shoes Side-by-si de compare Add 1 item to cart Remove from cart Add 1+ items to cart Modify item quantity Enter shipping info Update profile Facebook login Persist payment info Pay by credit card Pay using PayPal Pay using e-wallet View open orders Cancel order Update status of the order View past orders Chat with customer service Leave a message As Customer I want update status of the order So that I know my order is not lost
steps As customer I want to purchase the goods in my shopping basket so that I can receive my products at home Given a fairly standard order procedure, we could identify the following steps: • As customer I want to ... ◦ log in with my account, so I don't have to re-enter my personal information every time; ◦ review and confirm my order, so I can correct mistakes before I pay; ◦ pay for my order with a wire transfer, so that I can confirm my order; ◦ pay for my order with credit card, so that I can confirm my order; ◦ receive a confirmation email with my order, so I have proof of my purchase;
rules As shop owner I don’t want customer to purchase in some the goods in some situation so that I am not selling at a lost Given a fairly standard order procedure, we could identify the following 'business rules' that underlie this process: • As shop owner I want to... ◦ decline orders below 10 dollars, because I don't make any profit on them; ◦ decline customers from outside the US, because the shipping expenses make these orders unprofitable; ◦ reserve ordered products from stock for 48 hours, so other customers see a realistic stock; ◦ automatically cancel orders for which I have not received payment within 48 hours, so I can sell them again to other customers;
flow As customer I want to log in with my account so that I can access secured pages; If we consider a regular login procedure, we can identify a happy flow and several potential unhappy flows: • As user I want to ◦ log in with my account, so that I can access secure pages (happy); ◦ able to reset my password when my login fails, so I can try to log in again (unhappy); ◦ be given the option to register a new account if my login is not known, so I can gain access to secure pages (unhappy); • As site owner I want to ◦ block users that log in incorrectly three times in a row, so I can protect the site against hackers (unhappy);
options/platforms As shop owner want to view my shop’s sales history, so I and keep track and audit them If we consider a convenient can time of usage of the shop-owner, we can identify the following steps: • As shop owner I want to… ◦ view sales history on my desktop, so I know the status of the sprint; ◦ view sales history on my mobile phone, so I know the status of the sprint; ◦ view sales history on a touchscreen, so I know the status of the sprint; ◦ view sales history on a printout, so I know the status of the sprint;
As shop owner I want to manage products in my webshop, so I can update price and product information if it is changed By identifying the individual operations required for this functionality, we can derive the following smaller bits of functionality: • As shop owner I want to ◦ add new products, so customers can purchase them; ◦ update existing products, so I can adjust for changes in pricing or product information; ◦ delete products, so I can remove products that I no longer stock; ◦ hide products, so they cannot be sold for the time being;
As news organization I want to publish new articles on our homepage, so customers have a reason to return periodically By considering the various roles that are involved, we can break the functionality down into the following bits: • As customer I want to read a new article, so I can be informed of important events; • As journalist I want to write an article, so it can be read by our customers; • As editor I want to review the article before putting it on the site, so that we can prevent typos; • As admin I want to be able to remove articles from the site, so that we can pull offending articles; • As customer I want to review and confirm my order, so I can correct mistakes before I pay;
to be accepted by a user, customer, or in the case of system level functionality, the consuming system. I want you to complete this item.... … but I can't work out how to tell it has been finished.
ambiguity on outcome (pass / not pass) • What is expected NOT How to implement a story Why? Define the boundaries for a user story/feature. • Help developers know when to stop adding more functionality to a story • Help developers and testers to derive tests Should be (e.g., “User can approve or reject an invoice” rather than “User can click a check approve an invoice”). The criteria should be independent of the implementatio discuss WHAT to expect, and not HOW to implement the functionality.
reject an invoice” rather than “User can click a checkbox to approve an invoice”). The criteria should be independent of the implementation, and discuss WHAT to expect, and not HOW to implement the functionality. Write What is expected NOT How to implement a story
user accounts So that I can grant users access to the system. • I can create a User Account by entering the following information about the User: a. Name, b. Email, status • I cannot assign a new User to report to an “Inactive” User • I cannot assign a new User to report to a User if it creates a cyclical relationship (e.g., User 1 reports to User 2 who reports to User 1 Given I have input name and email When I create a new user Then the user is added to the system Given A is an inactive user When I update B to report to A Then I will be not allowed to do so Given A reports to B When I update B to report to A Then I will be not allowed to do so Popular Patterns
scenarios of the functionality • Negative scenarios of the functionality • UX concerns • Functional and non-functional use cases • Performance concerns and guidelines. The issues and ideas raised in this Q and A session are captured in the story’s acceptance criteria. Play the “What-About?” game. • What information needs to be collected to allow a user to register? • Where does this information need to be collected/delivered? • Can the user pay online as part of the registration process? • Does the user need to be sent an acknowledgment? As a conference attendee I want to be able to register online So I can register quickly and cut down on paperwork.
want to see a rolling balance for my everyday accounts so that I know the balance of my account after each transaction • I am able to login with my username and password • I can search for a list of transactions for given date periods (example Jan 1 to Jan 15) • The rolling balance is displayed • The rolling balance is calculated for each transaction • The balance is displayed for every transaction for the full period of time transactions are available • I can export the transactions to PDF, includes all info from the screen Do all the ACs belong here?
want to see a rolling balance for my everyday accounts so that I know the balance of my account after each transaction • I am able to login with my username and password • I can search for a list of transactions for given date periods (example Jan 1 to Jan 15) • The rolling balance is displayed • The rolling balance is calculated for each transaction • The balance is displayed for every transaction for the full period of time transactions are available • I can export the transactions to PDF, includes all info from the screen Actually covered in other stories! No need to repeat!
the library catalogue, I want log in So that I can quickly and easily refine my search. Given that I am logged in when I wish to logout, then I can log out. Given that I am logged out when I wish to log in, then I can log in No helpful info ACs are very redundant and add no additional value to the story. How about writing in a simple tabulated statement? Or rather, explore the modes of login? • I can log in and log out Or Login and logout with user name and password… (user name only, fingerprint… for other stories)
the library catalogue, I want advanced search options on the front page So that I can quickly and easily refine my search. • I can limit the search by format/type. • I can delineate the search by date range. • I can limit the search to publisher information such as title, author, subject, place, publisher and call number. • I can restrict the search to a particular website/catalogue, collection. • I can find advanced search options – advanced search options are carried through as filters to search results page. • I can filter by availability.
the library catalogue, I want advanced search options on the front page So that I can quickly and easily refine my search. • I can limit the search by format/type. • I can delineate the search by date range. • I can limit the search to publisher information such as title, author, subject, place, publisher and call number. • I can restrict the search to a particular website/catalogue, collection. • I can find advanced search options – advanced search options are carried through as filters to search results page. • I can filter by availability. Hidden Epics ACs are abused to add more sub-functionality to the story. This actually contains 6 stories. And the top story should be an epic. These are the kind of stories that end up with massive number of storypoints estimations. ... ... ... ... ... ...
I want to search and add specific shoes to my cart So that I can proceed with my purchase open "http://cheapshoes.com" assertTitle "Women shoes" pause "2000" clickAndWait "link=High heels" pause "3000" assertTitle "Jimmy Choo Red Pumps" click "//input[@name='buy' and @value='1']" type "quantity", "6" clickAndWait "//input[@value='Add t
I want to search and add specific shoes to my cart So that I can proceed with my purchase open "http://cheapshoes.com" assertTitle "Women shoes" pause "2000" clickAndWait "link=High heels" pause "3000" assertTitle "Jimmy Choo Red Pumps" click "//input[@name='buy' and @value='1']" type "quantity", "6" clickAndWait "//input[@value='Add t Not Readable Even if you have a coding background, be mindful of the fact that your ACs will be read by non-technical folks as well. Ensure that they are readable in plain language. User should be able to search and add shoes to cart with the following parameters Category Type Keyword Quantity Women shoes High heels Jimmy Choo Red Pumps 6 Men shoes Sneakers Nike active 1 Kids shoes Boots Bogs snow boots 2
I want to withdraw cash from an ATM So that I can get money when the bank is closed Scenario 1: Account has sufficient funds Given the user is a customer of the bank And the user has inserted the card And the card is valid And the user has input the right PIN code And the account balance is \$100 And the machine contains enough money When the Account Holder requests \$20 Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned
I want to withdraw cash from an ATM So that I can get money when the bank is closed Scenario 1: Account has sufficient funds Given the user is a customer of the bank And the user has inserted the card And the card is valid And the user has input the right PIN code And the account balance is \$100 And the machine contains enough money When the Account Holder requests \$20 Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned Waterfall & Stray ACs These kind of stories are painful left overs of the waterfall age. Those were the days that ‘if it was not written, you are not building it’. As a result you ended up with scenarios covering too much imperative details. How much detail in GIVEN is really pertinent to the THEN? Are we stating the obvious? the user is a customer of the bank? the user has inserted the card? the user has input the right PIN code? Remember, scenario aims to test sufficient funds Account Holder would already satisfy these criteria
customer I want to load the entire historical price data for a given stock So that I can get money when the bank is closed • The system should load fast • If the system is slow, show a loading graphic • Give option to abort loading
customer I want to load the entire historical price data for a given stock So that I can get money when the bank is closed • The system should load fast • If the system is slow, show a loading graphic • Give option to abort loading Pass/Fail not clear Do not leave your tester and developer scratching their head. Be specific as to what exactly needs to happen. • The system should finish loading within 5 seconds • The system should show a loading graphic • If loading takes more than 5 seconds, the system should show a message and and if user wants to continue or not
I want to see the interest amount of my outstanding balance So I know the interest I have to pay The formula for annual compound interest, including principal sum, is: A = P (1 + r/n) (nt) Where: A = the future value of the investment/loan, including interest P = the principal investment amount (the initial deposit or loan amount) r = the annual interest rate (decimal) n = the number of times that interest is compounded per year t = the number of years the money is invested or borrowed for Note that this formula gives you the future value of an investment or loan, which is compound interest plus the principal. Should you wish to calculate the compound interest only, you need this: Total compounded interest = P (1 + r/n) (nt) - P Let's look at an example Compound interest formula (including principal): A = P(1+r/n)(nt) If an amount of $5,000 is deposited into a savings account at an annual interest rate of 5%, compounded monthly, the value of the investment after 10 years can be calculated as follows... P = 5000. r = 5/100 = 0.05 (decimal). n = 12. t = 10. If we plug those figures into the formula, we get: A = 5000 (1 + 0.05 / 12) ^ (12(10)) = 8235.05. So, the investment balance after 10 years is $8,235.05. Given the I have put in the input values When the system calculates Then it should show the correct amount based on the above formula
I want to see the interest amount of my outstanding balance So I know the interest I have to pay The formula for annual compound interest, including principal sum, is: A = P (1 + r/n) (nt) Where: A = the future value of the investment/loan, including interest P = the principal investment amount (the initial deposit or loan amount) r = the annual interest rate (decimal) n = the number of times that interest is compounded per year t = the number of years the money is invested or borrowed for Note that this formula gives you the future value of an investment or loan, which is compound interest plus the principal. Should you wish to calculate the compound interest only, you need this: Total compounded interest = P (1 + r/n) (nt) - P Formula: Future value = Principal (1 + rate/years) (compound * term) Given the values for principal, rate, years, compound, and term When the user view the future value amount Then the system should calculate the future value accordingly Not Readable Details from BRD and FSD appear in your AC. Try to keep your AC short and specific. If there are really important additional notes, keep them separate. Principal rate years ... ... ... ... ...
Approximate • A group effort • Based off what you know at the time • A time to get a shared understanding • Different for different project teams Estimating is not: • Set in stone and cannot change • Always done right the first few iterations • Up to one individual
can complete in a certain period (generally Iteration) Often you to rushly gauge Release time - It started as educated guess (Plan Velocity) - Will Fluctuate at the beginning
to crate - Record the total estimated point - Repeate 2-3 times - Calculate avg. Planned Velocity Transport team (x4) - Monitor whether the dog will fit - Say stop when you think the crate is full
by “good” acceptance criteria to clearly demonstrate if the project team has indeed made the user story come true. ACCEPTANCE CRITERIA Define the boundaries for a user story/feature. • Help developers know when to stop adding more functionality to a story • Help developers and testers to derive tests I want you to complete this item.... … but I can't work out how to tell it has been finished.
is completed? • Select the best format, then stick to it • Cover all your bases • Ensure your ACs agree with your story • Write it as short and simple as possible • Examples help a lot
user accounts So that I can grant users access to the system. AC FORMAT ❏ I can create a User Account by entering the following information about the User: a. Name, b. Email, status ❏ I cannot assign a new User to report to an “Inactive” User ❏ I cannot assign a new User to report to a User if it creates a cyclical relationship (e.g., User 1 reports to User 2 who reports to User 1 Given I have input name and email When I create a new user Then the user is added to the system Given A is an inactive user When I update B to report to A Then I will be not allowed to do so Given A reports to B When I update B to report to A Then I will be not allowed to do so Acceptance criteria don't need to follow strict conventions as long as it specifies in plain language how the programmer or tester will know the task is complete.
user accounts So that I can grant users access to the system. AC FORMAT Pros ❏ Non-imperative more open-ended nature encourages people to test out-of-the-box ❏ Easy to read Cons ❏ May not have all important details needed, ambiguous Pros ❏ Structure “forces” people to think of pre-conditions and triggers Cons ❏ Can be verbose and hard to read on a user story card ❏ Sometimes states the obvious Choose the most fitting format… and stick with it!
scenarios of the functionality • Negative scenarios of the functionality • UX concerns • Functional and non-functional use cases • Performance concerns and guidelines. The issues and ideas raised in this Q and A session are captured in the story’s acceptance criteria. Play the “What-About?” game. • What information needs to be collected to allow a user to register? • Where does this information need to be collected/delivered? • Can the user pay online as part of the registration process? • Does the user need to be sent an acknowledgment? As a conference attendee I want to be able to register online So I can register quickly and cut down on paperwork.
want to see a rolling balance for my everyday accounts so that I know the balance of my account after each transaction • I am able to login with my username and password • I can search for a list of transactions for given date periods (example Jan 1 to Jan 15) • The rolling balance is displayed • The rolling balance is calculated for each transaction • The balance is displayed for every transaction for the full period of time transactions are available • I can export the transactions to PDF, includes all info from the screen Do all the ACs belong here?
want to see a rolling balance for my everyday accounts so that I know the balance of my account after each transaction • I am able to login with my username and password • I can search for a list of transactions for given date periods (example Jan 1 to Jan 15) • The rolling balance is displayed • The rolling balance is calculated for each transaction • The balance is displayed for every transaction for the full period of time transactions are available • I can export the transactions to PDF, includes all info from the screen Actually covered in other stories! No need to repeat!
The clearer you can present it, the more likely it will succeed. Format Content for Readability - It has to be appealing to the eye, so structure your content properly! Writing For Your Audience - Content is there for the reader’s benefit. Therefore, you need to ensure that they can understand it, so… get feedback!
of rules which cover aspects of a system’s behavior, and from which scenarios can be derived. Given a baby animal is younger than its recommended selling age When we try to sell it Then we should be told it's too young. A scenario is an example of the system’s behavior from one or more users’ perspectives. Given a rabbit who is 1 1/2 months old When we try to sell it Then we should be told it is too young. Given a rabbit who is 6 months old When we try to sell it Then we should be able to sell it Given a dog who is 1 year old When we try to sell it Then we should be able to sell it Given a dog who is 2 months old When we try to sell it Then we should be told it is too young.
of the system’s behavior from one or more users’ perspectives. Given an <animal> who is <age> When we try to sell it Then we should be <allowed or not> And see <error message> Animal Rule Age Allowed or not Error message Rabbit Selling age 2 month 1 month Not allowed “Too young to be sold” Rabbit Selling age 2 month 6 months allowed No error message Dog Selling age 6 month 1 year allowed No error message Dog Selling age 6 month 2 months Not allowed “Too young to be sold”
the library catalogue, I want log in So that I can quickly and easily refine my search. Given that I am logged in when I wish to logout, then I can log out. Given that I am logged out when I wish to log in, then I can log in
the library catalogue, I want log in So that I can quickly and easily refine my search. Given that I am logged in when I wish to logout, then I can log out. Given that I am logged out when I wish to log in, then I can log in No helpful info ACs are very redundant and add no additional value to the story. How about writing in a simple tabulated statement? Or rather, explore the modes of login? • I can log in and log out Or Login and logout with user name and password… (user name only, fingerprint… for other stories)
I want to view my withdrawal limit So that I have cash that I can use Given my bank account is in credit and I made no withdrawals recently, When I attempt to withdraw an amount less than my card's limit, Then the withdrawal should complete without errors or warnings
I want to view my withdrawal limit So that I have cash that I can use Given my bank account is in credit and I made no withdrawals recently, When I attempt to withdraw an amount less than my card's limit, Then the withdrawal should complete without errors or warnings Stray ACs Is this a result of a wrong copy-paste? :) Make sure your ACs and your user story agree as to what it aims to cover. Put the AC where they belong… in the right user story!
the library catalogue, I want advanced search options on the front page So that I can quickly and easily refine my search. • I can limit the search by format/type. • I can delineate the search by date range. • I can limit the search to publisher information such as title, author, subject, place, publisher and call number. • I can restrict the search to a particular website/catalogue, collection. • I can find advanced search options – advanced search options are carried through as filters to search results page. • I can filter by availability.
the library catalogue, I want advanced search options on the front page So that I can quickly and easily refine my search. • I can limit the search by format/type. • I can delineate the search by date range. • I can limit the search to publisher information such as title, author, subject, place, publisher and call number. • I can restrict the search to a particular website/catalogue, collection. • I can find advanced search options – advanced search options are carried through as filters to search results page. • I can filter by availability. Hidden Epics ACs are abused to add more sub-functionality to the story. This actually contains 6 stories. And the top story should be an epic. These are the kind of stories that end up with massive number of storypoints estimations. ... ... ... ... ... ...
I want to search and add specific shoes to my cart So that I can proceed with my purchase open "http://cheapshoes.com" assertTitle "Women shoes" pause "2000" clickAndWait "link=High heels" pause "3000" assertTitle "Jimmy Choo Red Pumps" click "//input[@name='buy' and @value='1']" type "quantity", "6" clickAndWait "//input[@value='Add t
I want to search and add specific shoes to my cart So that I can proceed with my purchase open "http://cheapshoes.com" assertTitle "Women shoes" pause "2000" clickAndWait "link=High heels" pause "3000" assertTitle "Jimmy Choo Red Pumps" click "//input[@name='buy' and @value='1']" type "quantity", "6" clickAndWait "//input[@value='Add t Not Readable Even if you have a coding background, be mindful of the fact that your ACs will be read by non-technical folks as well. Ensure that they are readable in plain language. User should be able to search and add shoes to cart with the following parameters Category Type Keyword Quantity Women shoes High heels Jimmy Choo Red Pumps 6 Men shoes Sneakers Nike active 1 Kids shoes Boots Bogs snow boots 2
I want to withdraw cash from an ATM So that I can get money when the bank is closed Scenario 1: Account has sufficient funds Given the user is a customer of the bank And the user has inserted the card And the card is valid And the user has input the right PIN code And the account balance is \$100 And the machine contains enough money When the Account Holder requests \$20 Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned
I want to withdraw cash from an ATM So that I can get money when the bank is closed Scenario 1: Account has sufficient funds Given the user is a customer of the bank And the user has inserted the card And the card is valid And the user has input the right PIN code And the account balance is \$100 And the machine contains enough money When the Account Holder requests \$20 Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned Waterfall & Stray ACs These kind of stories are painful left overs of the waterfall age. Those were the days that ‘if it was not written, you are not building it’. As a result you ended up with scenarios covering too much imperative details. How much detail in GIVEN is really pertinent to the THEN? Are we stating the obvious? the user is a customer of the bank? the user has inserted the card? the user has input the right PIN code? Remember, scenario aims to test sufficient funds
customer I want to load the entire historical price data for a given stock So that I can get money when the bank is closed • The system should load fast • If the system is slow, show a loading graphic • Give option to abort loading
customer I want to load the entire historical price data for a given stock So that I can get money when the bank is closed • The system should load fast • If the system is slow, show a loading graphic • Give option to abort loading Pass/Fail not clear Do not leave your tester and developer scratching their head. Be specific as to what exactly needs to happen. • The system should finish loading within 5 seconds • The system should show a loading graphic • If loading takes more than 5 seconds, the system should show a message and and if user wants to continue or not
I want to see the interest amount of my outstanding balance So I know the interest I have to pay The formula for annual compound interest, including principal sum, is: A = P (1 + r/n) (nt) Where: A = the future value of the investment/loan, including interest P = the principal investment amount (the initial deposit or loan amount) r = the annual interest rate (decimal) n = the number of times that interest is compounded per year t = the number of years the money is invested or borrowed for Note that this formula gives you the future value of an investment or loan, which is compound interest plus the principal. Should you wish to calculate the compound interest only, you need this: Total compounded interest = P (1 + r/n) (nt) - P Let's look at an example Compound interest formula (including principal): A = P(1+r/n)(nt) If an amount of $5,000 is deposited into a savings account at an annual interest rate of 5%, compounded monthly, the value of the investment after 10 years can be calculated as follows... P = 5000. r = 5/100 = 0.05 (decimal). n = 12. t = 10. If we plug those figures into the formula, we get: A = 5000 (1 + 0.05 / 12) ^ (12(10)) = 8235.05. So, the investment balance after 10 years is $8,235.05. Given the I have put in the input values When the system calculates Then it should show the correct amount based on the above formula
I want to see the interest amount of my outstanding balance So I know the interest I have to pay The formula for annual compound interest, including principal sum, is: A = P (1 + r/n) (nt) Where: A = the future value of the investment/loan, including interest P = the principal investment amount (the initial deposit or loan amount) r = the annual interest rate (decimal) n = the number of times that interest is compounded per year t = the number of years the money is invested or borrowed for Note that this formula gives you the future value of an investment or loan, which is compound interest plus the principal. Should you wish to calculate the compound interest only, you need this: Total compounded interest = P (1 + r/n) (nt) - P Formula: Future value = Principal (1 + rate/years) (compound * term) Given the values for principal, rate, years, compound, and term When the user view the future value amount Then the system should calculate the future value accordingly Not Readable Details from BRD and FSD appear in your AC. Try to keep your AC short and specific. If there are really important additional notes, keep them separate. Principal rate years ... ... ... ... ...
benchmark - 2 days / stories | 6 - 8 Stories / Iteration - Listen to the Dev and Get team agreement on Team story size - Story Splitting Pattern - https://agileforall.com/patterns-for-splitting-user-stories/ - https://agileforall.com/new-story-splitting-resource/
- Focus is on why and how the user interacts with the software. - What the software should be capable of doing. What Is A User Story? As a… I want to… So that... As a… I need to… In order to... As a… I can... In order to... As a… I would like... So that... ….
a solid, tangible business benefit as a reason for the existence of this feature, you can... Smalll Lead to ….. • Avoid unnecessary work • Better prioritize the features • Possibly provide better alternatives