F.A.I.L.U.R.E
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

F.A.I.L.U.R.E

on

  • 558 views

Ben Simo's mnemonic for testing software error detection, reporting, and handling.

Ben Simo's mnemonic for testing software error detection, reporting, and handling.

Statistics

Views

Total Views
558
Views on SlideShare
558
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • This dialog was displayed after clicking the You Tube link to view a list of videos posted by a user. F What caused this message? Does an error condition really exist? What happens if I press OK? What happens if I press the close button? If I do the same thing again, will the error message be displayed again? A If something is known to not work, could the user have been prevented from doing whatever caused the error? I Does this mean I can’t do what I tried to do? Will I be able to use this feature with different data? Is there an outage? Can I try again later? L Should this error be logged on the server to assist in identifying error trends? Who should get/use the logged information? Is there any log information that may help me, a tester, understand what caused the error? U What page says? The URL in the error dialog is just the start of the URL for the page I was using. Is this error message’s style consistent with other error messages on the site? R Do I need to wait and try later? Is part of the system down? What happens if I press OK? What do I need to do to make this work? E I can’t see my friend’s videos. I’m unhappy. If I knew more about why it is not working, I might be more understanding.
  • Sometimes we expect error messages. Just because a test script says an error is to be expected does not mean that we do not need to test the message itself.
  • F Does the Cancel button cancel an order ad its label might imply or does the OK button cancel as the text states? Was the user trying to cancel an order when this appeared? If a user cancels in the software, does the order get canceled? A Do I press Cancel or OK to cancel? Do I have to lick the button? What’s JavaScript? This is technical detail that does not apply to the user -- unless they are canceling an order for JavaScript. Why is there a compass icon for canceling an order? I What happens if I cancel an order? Was this communicated before this message? Will it come later? Has the user paid yet? Do they get a refund? L Does this need to be logged? Probably not in an error log, but in an order log. U Users may not know what JavaScript means. This is technical detail that should be hidden from the user. The Cancel and OK buttons purpose are not clear. What does the compass icon mean? Does it mean the same thing throughout the application? What order is being canceled? R What do I do to not cancel an order? What if I clicked the wrong thing and did not expect this? What am I canceling? E If a user does not read the text and presses the Cancel button to cancel an order, they will be very unhappy to have the order processed when they wanted it canceled. The JavaScript reference may confuse users. The “lick OK” may entertain users and distract them from what they were doing. Humor can be good if it doesn’t get in the way of the user’s work in the software. What if the user waits to click because they went to find someone to show them the funny error dialog? Will the cancel timeout?
  • F Does Yes reconnect me? Does No not reconnect me? A What is a “peer”? What does 10054 mean? Does the user need this? What is a connection reset? If the connection was reset, doesn’t that mean I’m set back to my expected connected state? This error message appears to have been written for technical people. Are those the only users of this application? I What does it mean to reconnect? What if I don’t reconnect? What does it mean that my connection was reset by a peer? L Does this need to be logged as an error? Is the reason for the reset logged somewhere else? On the client? On the server? U Could the software automatically reconnect me and not bother me with reconnecting? Would that be better? R If looks like I can select the “Yes” button to recover, but its not clear from what I am recovering. E I might be happy that a connection loss is being detected and I am being given an option to reconnect with the click of a Yes button.
  • F What causes this dialog? A Why is a success being reported as an “Error”? I What’s the impact of the success, or error, or whatever it is? L If this should have been logged, I hope the log tells me more than this message. U The text is contradictory. R How do I fix a success error? E I’m confused. Is it an error or is it a success?
  • F What value? How is it not valid? What do the buttons do on the dialog? Is the value really not valid? Why is there a Retry option for something that’s not valid? A Could Excel have prevented me from entering something that’s not valid? I don’t know what “not valid” means. I What is the impact of my entering invalid data? Is it lost? Can I continue anyway? L This probably doesn’t need to be logged, but I’d like to have logged info about what user restricted the values. U The dialog does not tell me what was invalid. It does not tell me what is valid. Why am I offered an option to retry? Retry what? Enter an invalid value? Won’t it still be invalid? Or does Retry give me an option to enter a new value? What does cancel do? Cancel the restriction on the values or cancel my entry? R How do I remove the restriction? E I might be happy that I was stopped from entering bad data. I might be unhappy that I am not allowed to enter valid data. I might be confused about what is required to make my data valid. I might be confused about the meanings of the buttons.
  • F Something looks very wrong here. A file not being open should not prevent a file from being opened. What happens if I press OK? A I don’t see any context information about what file cannot be opened. I So what is the impact of not being able to open a file that is not open? L Does this need to be logged? U I see no context information about the error. The message is confusing. Is this accurate? R If I can’t open a file that is not open, then how do I open a file in the first place? Will it work if I try again? How do I open the file? Is the file that could not be opened my file or something needed by whatever application displayed the message? E I am now confused and frustrated. How can this message be improved to reduce confusion and frustration?
  • F Does OK restart the computer? A Shouldn’t I have been warned about needing to restart before making the change? What if I can’t restart now? I What if I don’t restart now? L Is this logged? Does it need to be logged? U Why must I restart? Does OK restart me or just confirm that I read the message? R Can I back out of the setting change? If so, how? E I don’t want to restart. I was attempting to fix a display problem and now I feel that I am being forced to restart. Is it possible to give the user an option to back out? Could rewording the message and/or changing the button to state what clicking OK does alleviate user confusion?
  • I saw a dialog like this in a product demo. The demonstrator didn’t understand it and clicked cancel to make it go away and then went on to demo a different feature. F Wow. I have no idea how this is supposed to function. Are there blank dialogs in other parts of the application? A A blank dialog does not seem to be appropriate. I What the impact? I can’t tell because I don’t know what this dialog means. L Did this generate a blank log entry? Is there a log that might explain what happened here? U Users should not be asked to OK something without telling them what it is. There is no title or text. What does this mean? This dialog is very broken. R How do I recover from not knowing anything? This needs to be fixed. E I’m very confused now. I thinking that someone somewhere made a huge mistake to generate such an error dialog? And I might be laughing.
  • F If my statement is valid, why am I getting an error dialog? Is this an informative dialog that is mislabeled as a “Task Error”? What if I try an invalid SQL statement? A It doesn’t seem to be appropriate to give an error for a valid SQL statement? Is there an error in the SQL statement? Is there an error in the message? Is a dialog box the best way to communicate whatever is being communicated? I What is the impact? I first need to know if there is a problem with the message or the code that triggers the message. Is my statement lost because it is valid or invalid? L Does this need to be logged? U This message is really confusing. Why am I being shown an error for a valid SQL statement? -- if that’s really the case R How do I fix my valid statement so that I can continue? E Now, I’m either really frustrated, or I’m laughing at this silly dialog.
  • F If I re-enter $20, what happens? What if I request $40? If I enter a multiple of $50, will it work? Did the machine run out of $20 bills? Is the machine ever able to issue $20? A Why was the user allowed to select $20 is the system is not able to issue $20? Wouldn’t it be better not offer $20 as an option if the system in unable to issue $20? I What if I only want $20? What if there is less than $50 in my account? Will the machine still encourage me to withdraw more than I have available? It can’t “issue” me $20, but did it first deduct $20 from my account? I want to know that my money is still safely in my account. L Is this condition logged? U Why is the user allowed to select an invalid option? Why is there a picture of a $20 and a $50 bill in the error screen if the system can’t give me $20? Why is there no quick selection options for re-entering an amount? Where’s the OK that I am supposed to press? R This tells me how to recover. It tells me I need to enter an amount that is a multiple of $50. E I am unhappy that I am being forced to take more money than I want out of my account. I might have been happier if I had not been given an option for $20 if that were not available.
  • You can practice using FAILURE on the error messages included in this presentation.

F.A.I.L.U.R.E Presentation Transcript

  • 1.  
  • 2.  
  • 3. Now that I have your attention, prepare to read fast v1.2 FAILURE.QualityFrog.com
  • 4. You’re testing… And an error message appears v1.2 FAILURE.QualityFrog.com
  • 5. v1.2 FAILURE.QualityFrog.com
  • 6. Did you expect it? Or are you surprised? v1.2 FAILURE.QualityFrog.com
  • 7. How does it make you feel? v1.2 FAILURE.QualityFrog.com
  • 8. What do you do? v1.2 FAILURE.QualityFrog.com
  • 9. v1.2 FAILURE.QualityFrog.com Not ready reading drive A Abort, Retry, Ignore, Fail?
  • 10. Continue to the next test step… v1.2 FAILURE.QualityFrog.com
  • 11. v1.2 FAILURE.QualityFrog.com
  • 12. Report a bug… v1.2 FAILURE.QualityFrog.com
  • 13. v1.2 FAILURE.QualityFrog.com
  • 14. Resolve unknown conflict… v1.2 FAILURE.QualityFrog.com
  • 15. v1.2 FAILURE.QualityFrog.com
  • 16. Find a file… v1.2 FAILURE.QualityFrog.com
  • 17. v1.2 FAILURE.QualityFrog.com
  • 18. Eliminate something… v1.2 FAILURE.QualityFrog.com
  • 19. v1.2 FAILURE.QualityFrog.com
  • 20. Request permission… v1.2 FAILURE.QualityFrog.com
  • 21. v1.2 FAILURE.QualityFrog.com
  • 22. Try again… v1.2 FAILURE.QualityFrog.com
  • 23. v1.2 FAILURE.QualityFrog.com
  • 24. Try something new… v1.2 FAILURE.QualityFrog.com
  • 25. v1.2 FAILURE.QualityFrog.com
  • 26. Seek help… v1.2 FAILURE.QualityFrog.com
  • 27. v1.2 FAILURE.QualityFrog.com
  • 28. Set a reference to an instance… v1.2 FAILURE.QualityFrog.com
  • 29. v1.2 FAILURE.QualityFrog.com
  • 30. lick OK… v1.2 FAILURE.QualityFrog.com C
  • 31. lick OK… v1.2 FAILURE.QualityFrog.com
  • 32. v1.2 FAILURE.QualityFrog.com
  • 33. Save… v1.2 FAILURE.QualityFrog.com
  • 34. v1.2 FAILURE.QualityFrog.com
  • 35. Enter a multiple of |ECL0… v1.2 FAILURE.QualityFrog.com
  • 36. v1.2 FAILURE.QualityFrog.com
  • 37. Exit… v1.2 FAILURE.QualityFrog.com
  • 38. v1.2 FAILURE.QualityFrog.com
  • 39. Reconnect… v1.2 FAILURE.QualityFrog.com
  • 40. v1.2 FAILURE.QualityFrog.com
  • 41. Declare success… v1.2 FAILURE.QualityFrog.com
  • 42. v1.2 FAILURE.QualityFrog.com
  • 43. Assign blame… v1.2 FAILURE.QualityFrog.com
  • 44. v1.2 FAILURE.QualityFrog.com
  • 45. Laugh… v1.2 FAILURE.QualityFrog.com
  • 46. v1.2 FAILURE.QualityFrog.com
  • 47. Restart… v1.2 FAILURE.QualityFrog.com
  • 48. v1.2 FAILURE.QualityFrog.com
  • 49. Guess… v1.2 FAILURE.QualityFrog.com
  • 50. v1.2 FAILURE.QualityFrog.com
  • 51. Gasp… v1.2 FAILURE.QualityFrog.com
  • 52. v1.2 FAILURE.QualityFrog.com
  • 53. Request a raise… v1.2 FAILURE.QualityFrog.com
  • 54. v1.2 FAILURE.QualityFrog.com
  • 55. Swear… v1.2 FAILURE.QualityFrog.com
  • 56. v1.2 FAILURE.QualityFrog.com
  • 57. So… v1.2 FAILURE.QualityFrog.com
  • 58. What do you do when you encounter an error? v1.2 FAILURE.QualityFrog.com
  • 59. While you think about that, let me tell you what I do. v1.2 FAILURE.QualityFrog.com
  • 60. Oh, who am I? v1.2 FAILURE.QualityFrog.com
  • 61. I am Ben Simo [email_address] v1.2 FAILURE.QualityFrog.com
  • 62. I use software [email_address] v1.2 FAILURE.QualityFrog.com
  • 63. I test software [email_address] v1.2 FAILURE.QualityFrog.com
  • 64. I question software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 65. I code software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 66. I code software that helps test software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 67. I talk about software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 68. I write about software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 69. I think about software [email_address] www.QuestioningSoftware.com v1.2 FAILURE.QualityFrog.com
  • 70. I like software v1.2 FAILURE.QualityFrog.com
  • 71. I like software that serves people v1.2 FAILURE.QualityFrog.com
  • 72. I like software that helps people v1.2 FAILURE.QualityFrog.com
  • 73. I dislike bad software v1.2 FAILURE.QualityFrog.com
  • 74. I dislike bad software that frustrates people v1.2 FAILURE.QualityFrog.com
  • 75. I dislike bad software that confuses people v1.2 FAILURE.QualityFrog.com
  • 76. I dislike bad software that angers people v1.2 FAILURE.QualityFrog.com
  • 77. I dislike bad software that discombobulates people v1.2 FAILURE.QualityFrog.com
  • 78. I sometimes like big words that discombobulate people v1.2 FAILURE.QualityFrog.com
  • 79. But only for a moment v1.2 FAILURE.QualityFrog.com
  • 80. Discombobulate means to emotionally confuse v1.2 FAILURE.QualityFrog.com
  • 81. Discombobulate means to frustrate v1.2 FAILURE.QualityFrog.com
  • 82. Discombobulate means to bewilder v1.2 FAILURE.QualityFrog.com
  • 83. Discombobulate means to confound v1.2 FAILURE.QualityFrog.com
  • 84. Discombobulate means to befuddle v1.2 FAILURE.QualityFrog.com
  • 85. Discombobulate means to perplex v1.2 FAILURE.QualityFrog.com
  • 86. Too many error messages discombobulate people v1.2 FAILURE.QualityFrog.com
  • 87. Error messages should help people, not confuse them v1.2 FAILURE.QualityFrog.com
  • 88. You see, It’s not about the software v1.2 FAILURE.QualityFrog.com
  • 89. It’s about the people! v1.2 FAILURE.QualityFrog.com
  • 90. Testers often fail to test the error messages v1.2 FAILURE.QualityFrog.com
  • 91. They fail to think about how they affect people v1.2 FAILURE.QualityFrog.com
  • 92. So what do I do when I encounter error messages? v1.2 FAILURE.QualityFrog.com
  • 93. I test them v1.2 FAILURE.QualityFrog.com
  • 94. I test them using the FAILURE mnemonic v1.2 FAILURE.QualityFrog.com
  • 95. A mnemonic is a device that aids memory recall v1.2 FAILURE.QualityFrog.com
  • 96. The FAILURE mnemonic is an acronym that helps me recall guideword heuristics v1.2 FAILURE.QualityFrog.com
  • 97. Guideword heuristics are words that guide thinking through a problem v1.2 FAILURE.QualityFrog.com
  • 98. The FAILURE mnemonic’s guideword heuristics help me think about testing error messages v1.2 FAILURE.QualityFrog.com
  • 99. The F reminds me to think about Functional aspects of the error F AILURE v1.2 FAILURE.QualityFrog.com
  • 100. I ask Functional questions like Does the error detection function as expected? v1.2 FAILURE.QualityFrog.com
  • 101. I ask Functional questions like Does the error handling function as expected? v1.2 FAILURE.QualityFrog.com
  • 102. I ask Functional questions like Does the error reporting function as expected? v1.2 FAILURE.QualityFrog.com
  • 103. I ask Functional questions like Does the error dialog, window, or page function as expected? v1.2 FAILURE.QualityFrog.com
  • 104. I ask Functional questions like Does the software recover from the error? v1.2 FAILURE.QualityFrog.com
  • 105. I ask Functional questions like Was there really an error? v1.2 FAILURE.QualityFrog.com
  • 106. I ask Functional questions like Are other errors like this reported? v1.2 FAILURE.QualityFrog.com
  • 107. I ask Functional questions like Do dialog buttons work? v1.2 FAILURE.QualityFrog.com
  • 108. I ask Functional questions like Is error message information accurate? v1.2 FAILURE.QualityFrog.com
  • 109. I ask Functional questions like Is it functional? v1.2 FAILURE.QualityFrog.com
  • 110. Only I don’t stop at Functional v1.2 FAILURE.QualityFrog.com
  • 111. A Functional error message is not necessarily an Appropriate error message v1.2 FAILURE.QualityFrog.com
  • 112. The A reminds me to ask if the error reporting is Appropriate F A ILURE v1.2 FAILURE.QualityFrog.com
  • 113. I ask Appropriate questions like Is the error reporting timely? v1.2 FAILURE.QualityFrog.com
  • 114. I ask Appropriate questions like Is the error reporting accurate? v1.2 FAILURE.QualityFrog.com
  • 115. I ask Appropriate questions like Are UI messages free of inappropriate technical detail? v1.2 FAILURE.QualityFrog.com
  • 116. I ask Appropriate questions like Is there a better way to handle or report the error? v1.2 FAILURE.QualityFrog.com
  • 117. I ask Appropriate questions like Is the error user friendly? v1.2 FAILURE.QualityFrog.com
  • 118. I ask Appropriate questions like Are errors detected as early in the user workflow as possible? v1.2 FAILURE.QualityFrog.com
  • 119. I ask Appropriate questions like Are system resource problems detected while there is still time to remedy the problem? v1.2 FAILURE.QualityFrog.com
  • 120. I ask Appropriate questions like Is the situation communicated appropriately for the intended audience? v1.2 FAILURE.QualityFrog.com
  • 121. I ask Appropriate questions like Is a user allowed to waste time and effort only to be told that their work cannot be applied? v1.2 FAILURE.QualityFrog.com
  • 122. The I reminds me to ask about the Impact of the error FA I LURE v1.2 FAILURE.QualityFrog.com
  • 123. I ask Impact questions like
    • Is the impact communicated?
    v1.2 FAILURE.QualityFrog.com
  • 124. I ask Impact questions like
    • Is the impact communicated
    • to the user?
    v1.2 FAILURE.QualityFrog.com
  • 125. I ask Impact questions like
    • Is the impact communicated
    • to others?
    v1.2 FAILURE.QualityFrog.com
  • 126. I ask Impact questions like Will the user understand the impact? v1.2 FAILURE.QualityFrog.com
  • 127. I ask Impact questions like
    • Is any impact to the user’s data communicated?
    v1.2 FAILURE.QualityFrog.com
  • 128. I ask Impact questions like Does the message contain too much information? v1.2 FAILURE.QualityFrog.com
  • 129. I ask Impact questions like
    • Was a transaction only partially completed?
    v1.2 FAILURE.QualityFrog.com
  • 130. The L reminds me to ask about the error Log FAI L URE v1.2 FAILURE.QualityFrog.com
  • 131. I ask Log questions like Should the error be logged for support? v1.2 FAILURE.QualityFrog.com
  • 132. I ask Log questions like Should the error be logged for system administrators? v1.2 FAILURE.QualityFrog.com
  • 133. I ask Log questions like Should the error be logged for developers? v1.2 FAILURE.QualityFrog.com
  • 134. I ask Log questions like Should the error be logged for technical investigation? v1.2 FAILURE.QualityFrog.com
  • 135. I ask Log questions like Will log information be available if the user waits to report a problem? v1.2 FAILURE.QualityFrog.com
  • 136. I ask Log questions like Are log messages standardized to support automated information mining? v1.2 FAILURE.QualityFrog.com
  • 137. I ask Log questions like Can I grep this error? v1.2 FAILURE.QualityFrog.com
  • 138. I ask Log questions like Do logs contain enough information? v1.2 FAILURE.QualityFrog.com
  • 139. I ask Log questions like Do logs contain useless information? v1.2 FAILURE.QualityFrog.com
  • 140. I ask Log questions like
    • Is this an error that should not be logged?
    v1.2 FAILURE.QualityFrog.com
  • 141. I ask Log questions like
    • Is there too much logging?
    v1.2 FAILURE.QualityFrog.com
  • 142. I ask Log questions like
    • Does excessive logging impact performance?
    v1.2 FAILURE.QualityFrog.com
  • 143. I ask Log questions like
    • Does excessive logging impact disk space?
    v1.2 FAILURE.QualityFrog.com
  • 144. I ask Log questions like
    • Does the logging help or complicate error investigation?
    v1.2 FAILURE.QualityFrog.com
  • 145. The U reminds me to think about the User Interface FAIL U RE v1.2 FAILURE.QualityFrog.com
  • 146. I ask UI questions like Is the error reported to the user? v1.2 FAILURE.QualityFrog.com
  • 147. I ask UI questions like Does this error need to be reported to the user? v1.2 FAILURE.QualityFrog.com
  • 148. I ask UI questions like What user activity caused the failure? v1.2 FAILURE.QualityFrog.com
  • 149. I ask UI questions like What user activity caused the failure? Is this communicated to the user? v1.2 FAILURE.QualityFrog.com
  • 150. I ask UI questions like Who is the user? v1.2 FAILURE.QualityFrog.com
  • 151. I ask UI questions like Are UI messages worded for the intended audience? v1.2 FAILURE.QualityFrog.com
  • 152. I ask UI questions like Is this message consistent with the desired look and feel? v1.2 FAILURE.QualityFrog.com
  • 153. I ask UI questions like Is the UI reporting consistent with reporting for other errors? v1.2 FAILURE.QualityFrog.com
  • 154. I ask UI questions like Is the UI reporting efficient? v1.2 FAILURE.QualityFrog.com
  • 155. I ask UI questions like Does the user need to click away excessive dialogs? v1.2 FAILURE.QualityFrog.com
  • 156. I ask UI questions like Is this the best way to communicate the error? v1.2 FAILURE.QualityFrog.com
  • 157. I ask UI questions like Could this error be handled without involving the user? v1.2 FAILURE.QualityFrog.com
  • 158. The R helps me think about error Recovery FAILU R E v1.2 FAILURE.QualityFrog.com
  • 159. I ask Recovery questions like Is the user told how to recover from the impact of the error? v1.2 FAILURE.QualityFrog.com
  • 160. I ask Recovery questions like Does the user need to contact support? v1.2 FAILURE.QualityFrog.com
  • 161. I ask Recovery questions like Is support contact information provided? v1.2 FAILURE.QualityFrog.com
  • 162. I ask Recovery questions like Does support know how to fix the problem? v1.2 FAILURE.QualityFrog.com
  • 163. I ask Recovery questions like Does the software guide the user through the recovery process? v1.2 FAILURE.QualityFrog.com
  • 164. I ask Recovery questions like Or is the user left to figure it out on their own? v1.2 FAILURE.QualityFrog.com
  • 165. The E leads me to think about the Emotions of users FAILUR E v1.2 FAILURE.QualityFrog.com
  • 166. I ask Emotions questions like What emotions are likely to be raised by the error message? v1.2 FAILURE.QualityFrog.com
  • 167. I ask Emotions questions like Does the error reporting evoke the desired user emotions? v1.2 FAILURE.QualityFrog.com
  • 168. I ask Emotions questions like Does this message enhance user frustration? v1.2 FAILURE.QualityFrog.com
  • 169. I ask Emotions questions like Does this message quiet user frustration? v1.2 FAILURE.QualityFrog.com
  • 170. I ask Emotions questions like Does this message encourage users to use some other product? v1.2 FAILURE.QualityFrog.com
  • 171. I ask Emotions questions like Does this message cause confusion? v1.2 FAILURE.QualityFrog.com
  • 172. Asking these types of questions can help turn FAILURE into success v1.2 FAILURE.QualityFrog.com
  • 173. The next time you encounter an error message v1.2 FAILURE.QualityFrog.com
  • 174. The next time you encounter an error message Test it! v1.2 FAILURE.QualityFrog.com
  • 175. The next time you encounter an error message Question it! v1.2 FAILURE.QualityFrog.com
  • 176. Try the FAILURE mnemonic
    • F unctional
    • A ppropriate
    • I mpact
    • L og
    • U I
    • R ecovery
    • E motions
    v1.2 FAILURE.QualityFrog.com
  • 177. And let me know how it works for you v1.2 FAILURE.QualityFrog.com F unctional A ppropriate I mpact L og U I R ecovery E motions
  • 178. Ben Simo [email_address] v1.2 Copyright © 2007 Quality Frog http://FAILURE.QualityFrog.com F unctional A ppropriate I mpact L og U I R ecovery E motions