Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agile Business Analysis Workshop

Pondd
September 16, 2018

Agile Business Analysis Workshop

Pondd

September 16, 2018
Tweet

More Decks by Pondd

Other Decks in Business

Transcript

  1. Agenda Starting session - Ice breaking - Self Introduction -

    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
  2. 11 Introduce yourself - Name - Role/Company - Who is

    your favorite heroes and why? Are you doing Agile at work ?
  3. A SINGLE POST-IT OF A SINGLE ACTION We started with

    a single post-it, capturing a single action with one sentence. 14
  4. A SINGLE POST-IT OF A SINGLE ACTION We started with

    a single post-it, capturing a single action with one sentence. 15
  5. CREATE THE STORY JOURNEY Each card is a node. We

    lay them out to create a journey. 16
  6. 17 CREATE THE STORY JOURNEY Each card is a node.

    We lay them out to create a journey.
  7. 18 CREATE THE STORY JOURNEY Each card is a node.

    We lay them out to create a journey.
  8. Each card is a node. We lay them out to

    create a journey. 19 CREATE THE STORY JOURNEY
  9. 20 CREATE THE STORY JOURNEY Each card is a node.

    We lay them out to create a journey.
  10. 21 CREATE THE STORY JOURNEY Each card is a node.

    We lay them out to create a journey.
  11. 22

  12. 30 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout
  13. 31 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout
  14. I search Google for “Power Bank” I click in top

    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
  15. 33 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  16. 34 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  17. 35 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  18. 36 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  19. 37 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  20. 38 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  21. 39 I search Google for “Power Bank” I click in

    top result I see category page of “Power Bank” I go to the detail page I put product into the basket I go to checkout Browse Looking to buy Converting
  22. 40 I search Google for “Power Bank” I click in

    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
  23. 41 I search Google for “Power Bank” I click in

    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
  24. I search Google for “Power Bank” I click in top

    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
  25. I search Google for “Power Bank” I click in top

    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
  26. I search Google for “Power Bank” I click in top

    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
  27. I search Google for “Power Bank” I click in top

    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
  28. I search Google for “Power Bank” I click in top

    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?
  29. I search Google for “Power Bank” I click in top

    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
  30. We had to gather requirement and Need to plan them

    and communicate them to Development team in AGILE environment
  31. A short description of functionality told from the user’s perspective.

    The focus is on why and how the user interacts with the software.
  32. FOCUS ON THE VALUE By forcing the user/customer to supply

    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
  33. High level map of your entire product or service as

    a series of tasks which the user completes.
  34. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    Pay Manage Order Ship Ask Help Primary goal: buy shoes from e-commerce site Ordering User Profile Shipment Customer Service User flow
  35. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  36. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  37. Building your own Backbone of your project - Similar to

    User Journey Mapping - Writing out the main step your user need to do to complete that goal - Time box : 15mins !!!!
  38. Stoppp - We got skeleton - But lag detail -

    Now we will add the rib cage (stories)
  39. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  40. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  41. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  42. Search Shoes Compare Shoes Manage Cart Create Account Checkout and

    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
  43. Some Pattern to help SLICING Strategy 1: Split by workflow

    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;
  44. Some Pattern to help SLICING Strategy 2: Split by business

    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;
  45. Some Pattern to help SLICING Strategy 3: Split by happy/unhappy

    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);
  46. Some Pattern to help SLICING Strategy 4: Split by input

    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;
  47. Some Pattern to help SLICING Strategy 5: Split by operations

    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;
  48. Some Pattern to help SLICING Strategy 6: Split by roles

    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;
  49. Acceptance Criteria Is conditions that a software product must satisfy

    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.
  50. • Clear • Simple Language (customer would use) • No

    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.
  51. To Devs are not Dumb (e.g., “User can approve or

    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
  52. As an Administrator I want to be able to create

    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
  53. Cover All Your Bases Acceptance criteria could include: • Positive

    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.
  54. Scope Creep in ACs As an internet banking customer I

    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?
  55. Scope Creep in ACs As an internet banking customer I

    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!
  56. How can we improve this AC? As a user of

    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)
  57. How can we improve this AC? As a user of

    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.
  58. How can we improve this AC? As a user of

    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. ... ... ... ... ... ...
  59. How can we improve this AC? As an online customer

    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
  60. How can we improve this AC? As an online customer

    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
  61. How can we improve this AC? As an Account Holder

    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
  62. How can we improve this AC? As an Account Holder

    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
  63. How can we improve this AC? As an internet trading

    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
  64. How can we improve this AC? As an internet trading

    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
  65. How can we improve this AC? As a loan customer

    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
  66. How can we improve this AC? As a loan customer

    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 ... ... ... ... ...
  67. Tips : For the Best Acceptance Criteria... How do you

    like your ACs written? My favorite tip to give is... Please don’t write ACs to be... Developers, Testers...
  68. How I normally structure my stories As … I want

    … So that... Background .... AC ... UI ... Note ...
  69. In Agile ESTIMATIONS is ... Estimating is: • Relative •

    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
  70. Estimation is for the people who actually need to REALLY

    DO the work or SACRIFICE to deliver it.
  71. METHODOLOGY • Complexity • Effort UNIT • Fibonacci : 1

    2 3 5 8 13 21 ... • T-shirt sizes : S M L XL XXL Difference Flavours METHOD • Plan it Poker (Card flipping) • Thrown Estimate (Hand throwing , shown earlier)
  72. Product Owner (x1) - Show the Dog one by one

    - Can answer business question - Is it large? - Is it a baby? - Do not estimate Transport team (x4) - Do the estimation - If in doubt, SPIKE (Google)
  73. Velocity Velocity is amount of work the team think they

    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
  74. ?

  75. Product Owner (x1) - Pick dog at random - Add

    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
  76. Not all stories are created EQUAL some are “Must have”

    some are just “gimmick”. Project doesn’t have infinite resource Hence It is at utmost important to Prioritise
  77. MOSCOW Prioritisation and FORCE Ranking MOSCOW Force ranking MUST have

    SHOULD have COULD have WON’T have Most Important
  78. A user story cannot stand alone. It must be accompanied

    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.
  79. How to write AC’s? How would YOU say this story

    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
  80. As an Administrator I want to be able to create

    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.
  81. As an Administrator I want to be able to create

    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!
  82. Cover All Your Bases Acceptance criteria could include: • Positive

    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.
  83. Scope Creep in ACs As an internet banking customer I

    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?
  84. Scope Creep in ACs As an internet banking customer I

    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!
  85. Keep it short and simple Getting Your Message Across -

    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!
  86. Let’s hear it from the audience! How do you like

    your ACs written? My favorite tip to give is... Please don’t write ACs to be... Developers, Testers...
  87. ACCEPTANCE CRITERIA vs TEST SCENARIOS Acceptance criteria are a set

    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.
  88. ACCEPTANCE CRITERIA & TEST SCENARIOS A scenario is an example

    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”
  89. How can we improve this AC? As a user of

    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
  90. How can we improve this AC? As a user of

    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)
  91. How can we improve this AC? As a ATM user

    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
  92. How can we improve this AC? As a ATM user

    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!
  93. How can we improve this AC? As a user of

    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.
  94. How can we improve this AC? As a user of

    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. ... ... ... ... ... ...
  95. How can we improve this AC? As an online customer

    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
  96. How can we improve this AC? As an online customer

    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
  97. How can we improve this AC? As an Account Holder

    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
  98. How can we improve this AC? As an Account Holder

    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
  99. How can we improve this AC? As an internet trading

    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
  100. How can we improve this AC? As an internet trading

    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
  101. How can we improve this AC? As a loan customer

    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
  102. How can we improve this AC? As a loan customer

    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 ... ... ... ... ...
  103. Split story when it is too large - Story size

    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/
  104. 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... ….
  105. BRD - Great detail - How the software should act.

    - Guiding how the software team will build something. - Take Ages to Write
  106. - Short description of functionality - From the user’s perspective.

    - 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... ….
  107. Why write a User Story? Forcing the user/customer to supply

    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