Today, I was trying to create a new account on my Nexus 7 so I could download an app from the Google Play store. I entered my first name, last name, and then started trying to pick an account name.
msftlivi – “This name is unavailable”
liviericmsft – ‘This name is unavailable”
… and on it went. When “thisisabsolutelyridiculouslivie715” was also unavailable, I knew something had to be wrong.
Turns out, I wasn’t fully connected to the internet. I had a WiFi connection displayed happily in the top status bar of my device, there was nothing telling me that Google couldn’t connect to the internet – all I got was “This name is unavailable”. After almost fifteen minutes of frustration, it took me trying to log in with a different Google account to get a dialog box telling me that my internet connection was unstable. Oh.
This is a prime example of why well-written error messages are needed when catching problems in software. In this case, the application wasn’t even able to connect to the Google account service, so it makes no sense to display to the user that the account name was unavailable – because it turns out that “thisisabsolutelyridiculouslivie715” is actually not even a valid Google account name.
It is important to give users error messages that they can understand and that are relevant to the problem. I tried about 20 different names before I realized what the actual issue was, and then I was able to fix it. Software applications should be fluid, simple, and straightforward – users shouldn’t have to debug their problems on their own.
Being in the industry, I understand that this is hard to do. Software does exactly what you tell it to, and interactions at different levels of an operating system can be difficult to predict – it is virtually impossible to test every combination of potential error cases. Having worked on defining and catching error messages in the past, I know firsthand how hard it is to enumerate every case that the system can throw at a user and how difficult the process of turning that ERROR_X86_DEVICE_ENUM_0X582A3332 into something that a customer is able to understand is.
Imagine you open your mail application one day and see a popup that just says ‘Error’. No action, no description – nothing. While there are a lot of handy tools for developers to debug their applications and collect error logs, the user just shouldn’t need to do that to figure out what’s wrong. Instead, it is important to create a message that informs the user what is wrong and gently guides them on how to fix it. Had that error dialog popped up saying “Cannot connect to the Google account service, check your internet connection”, I would have known exactly how to go about doing so and been on my merry way, but instead, I got distracted and ended up not creating the account at all.
Consider this with your next app – as a user, please tell me what’s actually wrong so I have a better chance at fixing it!
Case in point: As I go to publish this post, WordPress tells me to refresh my connection with LinkedIn. Sure, no problem. I hit the “Refresh connection” button and get the most generic error message – “Something went wrong” – and can’t fix the connection. This is what I’m talking about, people – code rarely goes wrong for no reason, you have the freedom to choose your errors!