The Definition of Failure
I have recently spent several hours trying to make tethering work on my android phone. Tethering would enable me to share the internet connection my phone already has with an iPad or other wireless device. Sounds like a really cool idea doesn’t it? All these devices have a wifi connection, they should be able to connect to each other and share things like an internet connection… Well you can’t. It doesn’t work. To be fair, it works occasionally, unpredictably and with great difficulty, which is to say, it doesn’t work. Not in any of the ways that matter.
Every time a user attempts to make a piece of software work they have the potential to encounter a failure. A button that doesn’t work as advertised. An operating system that locks up and prevents the software from working, or slows down so badly it prevents you from getting any work done.
I think we have been overly forgiving in categorizing software failures. In the software world we often believe that software is working correctly if it’s behavior matches the documentation. If the software does what the creator intended it to do, then it is successful. I would argue for a more stringent definition of failure. Any time the software fails to perform what the user expects, it has failed.