6 degrees of separation in understanding user queries
Be grateful. Be flattered. Be outright ecstatic. Why?
Because users think you’re a mind reader.
For some reason, they think telling you “I can’t do X. Please help.” is enough. They don’t tell you
- which application it is
- where or which screen in the application it is
- any error messages they see
- what they did (before they got the error message)
They sometimes just don’t tell you enough.
6 degrees of separation is already too much. Users expect you to make amazing leaps in intuitive logic from their pathetic amount of information to whatever is ailing them at that moment. That’s one giant step of deductive debugging.
How do you understand their queries better? Just ask. Ask for more information. This is where your people skills come into play. You’ve got to ask them in the way that makes them feel good about themselves. Basically, you want them to feel like they’ve done everything correctly and it’s really the fault of the software, even if you think they’re complete morons.
You’ve got to coax them into telling you stuff. And it doesn’t help if you keep calling them an idiot.
This brings us to the next problem. Users lie. They don’t lie outright. They just don’t tell the truth sometimes. And it’s not because they purposefully and specifically lie to you. Sometimes they just don’t know they’re telling a lie.
The spelling misunderstanding
For example, I recently had this user say he couldn’t use an application X because of an error. I probed further and managed to pry an error message out of him. Something about a missing file. There was this part “Pls check and proceed”.
Well, I thought, the more unique the error message is, the easier for me to locate where in the code the error occurred. Ever since I took over maintenance of legacy programs, I love it when there are unique error messages. Incorrect spellings, short forms of words, unusual text (like two consecutive spaces), incorrect grammar. Searching entire source code with unique search phrases means there are fewer search results, increasing the speed of finding the actual code.
So I typed in “Pls check” into the search box and ran the search. Nothing. What? I looked at the whole error message and nothing stood out as unique. So I got the user to give me a screenshot. The actual error message was “Please check and proceed”.
Did the user lie? Not really. He read and interpreted the error message correctly. It’s when he’s conveying the error message back to me that information was lost. For him, there’s no difference between “Please” and “Pls”. For me, it’s absolutely critical that every single letter was correct. Sometimes even letter casing matters.
This is the heart of understanding user queries: Understand the user.
I maintain many programs and applications, and I work with different sets of users. These sets of users usually don’t know that I work with other applications and users, so sometimes they ask me something expecting me to know the context of their query (when in fact I have no clue).
Here’s a list I use for probing
- Ask for screenshots
- Ask for error messages
- Ask which application they’re using
- Ask which screen or web page they’re on
- Ask which button they clicked to get the error
No information is redundant. Debug like a CSI because you should “Follow what cannot lie, the evidence”. In this case, any information you get is evidence. If their version of the error message contradicts the one in the screenshot, then you can ask further. One or the other must be wrong. Either way, you get more information.
When you’re trying to understand user queries, there’s no such thing as too much information.
Your lifesaver, the screenshot
There’s another case where the user was asking why the update button doesn’t work and the application keeps hanging. No error messages, and he told me which application and screen he’s using and even which button (the update button).
In the end, I asked for a screenshot. Everything looked to be in order. Then I looked at the taskbar in the screenshot. He opened 3 instances of the same application, performing the same task at the same screen. That was the problem. Due to data concurrency and locking, the application instances simply got stuck. I told him to use just one instance and everything was fine after that.
Did he lie? Yes, because he didn’t tell me that he’s running 3 instances of the application, which wasn’t designed for that. Was it really his fault? Not really. He thinks doing different updates with 3 separate instances will speed up his work. Like he’s multitasking or something (a mindset shared unfortunately by many of my users…).
What you should strive for is answering the user query with whatever the user first supplied. That’s ideal of course, and usually hard to reach. The next ideal case is this:
- User sends you email with query (with insufficient information)
- You understand whatever is given
- You formulate intelligent questions
- You call (or email) the user and ask those questions
- You finally understand what the user wanted
- You close off the query, whether it’s fixing bugs or answering questions
Calling is usually better than sending another email. You can save a lot of emails bouncing back and forth if you can just talk on the phone. Your ultimate goal is to minimise back and forth communication.
You may not be able to understand and answer user queries in 1 degree of separation. But with a little thinking first, you can do so within 6 degrees of separation.
My computer got sick
2 days ago, the computer at my work place got infected with a computer virus. It’s a fortune that I was able to get it out of the computer. It was a misfortune that I wasn’t able to get any work done since I was scanning my computer, and I didn’t want anything to disrupt the scan.
My computer housed practically all the source code ever written in my department. Alright, I’m exaggerating, but it’s not far from the truth. If the hard disk was wiped out, let’s just say either I will be assured of another year of contract, or I’ll be out of a job.
So anyway, a reminder for everyone reading this: Have you backed up your computer?
Round cornered images in Paint.NET
I’ve been experimenting with doing some simple image post processing for my posts. Rectangular images with sharp right-angled corners look a bit stark. I’m getting most of the images from iStockphoto (referral link), and it seemed a waste if I didn’t fit photos and text together nicely.
The easiest and fastest way to spruce up a stock photo is to create round corners in the image. I’ll be showing you how to do so in the freely available, fantastic and awesome image editor, Paint.NET (did I mention it was free?).
So, suppose here’s the original photo, after loading it into Paint.NET

Then you add a new layer by either clicking [Layers] -> [Add New Layer] option

or click on the “Add New Layer” button in the “Layers” panel (placed near bottom right by default)

Next, you want to focus on the 2nd layer for some editing first. On the “Layers” panel, uncheck the “Background” image.

On the 2nd layer, we wash it over with white colour first, because by default it’s in “transparent” colour. We can talk about the difference between white and transparent some other time… We’ll use the paint bucket tool

By default, if you haven’t changed the colour selection yet, then the primary colour is black and the secondary colour is white.

What this means is if you click and draw with the left mouse button, black is used. If you click and draw with the right mouse button, white is used.
So after selecting the paint bucket tool, go somewhere in the (transparent-coloured) image, and right-click. This will give you a nice clinical white patch.
We want to draw a rounded black rectangle on this white patch. We use the aptly named “Rounded Rectangle” tool

Some finger nimbleness will be needed here. Our test image is 160 pixels wide and 110 pixels tall. We’ll have to left-click (for black) in the image, at the cursor position of 0,0 and drag-move to cursor position 159,109. You can find out the cursor position by looking somewhere near the bottom of Paint.NET
![]()
We’re at cursor position 11,9 in this case.
You should then get this beauty

After that, go the “Layers” panel, and click on properties for the 2nd layer

and set the blending mode to “Additive”

Check the “Background” layer back (to make it visible again) and you should see this

Save and you’re done!
I think a video tutorial would have done a better job. Anyone want to sponsor the Camtasia software for me?
PS. That “Skyline gondola” sign was taken at the halfway point on my practically vertical climb up the hill in Queensland, New Zealand. I was the only one (stupid enough) climbing up. Everyone else was going down… A story for another time perhaps…
Podcast: Fairy tale recital
This is my very first podcast. Woohoo! Seriously, I didn’t know what to talk about, so given my interest in stories of all kinds, I decide to tell a story instead. Here it is:
Download mp3 [~ 3 minutes ~ 1.5 MB]
I recited a fairly well known fairy tale, and it’s only the beginning of the tale. If you know the name of the story, or even better, where the story was from, tell me about it!
You might have to turn up the volume a bit. For some reason, my headset microphone doesn’t capture my voice in a loud enough volume, so the resulting recording sounds soft. In my attempts to ramp up the volume, I cupped the microphone close to my mouth, so there’ll be a lot of “wind” sounds. You know, when you huff and puff (and you blow the house down). And no, “Three Little Pigs” isn’t the name of the story.
I’m going to see if I can get a better microphone. Any suggestions?
In case you’re wondering, I got the intro and outro music from Sound Rangers. Excellent online music store, and quite easy to navigate. I’m also using the Audio Player plugin.
[EDIT: Not using the audio player plugin anymore.]
If you have problems reading this in an RSS reader, please view the post itself for the mp3’s.
Remember to tell me the name of the story. Or submit your comments to this post.
ClearType in Windows XP
[warning: moderately intensive graphic loading ahead]
I just recently discovered that I can enable ClearType in Windows XP. For a long time, I thought Coding Horror just looked terrible on Firefox, but rendered fine on Internet Explorer. I couldn’t find the reason, and I just thought it was some CSS issue or something.
Then I read somewhere about enabling ClearType. Something clicked in my brain and I realised I had IE version 7, which offered the option of enabling ClearType while browsing, and I enabled it. That was why IE7 renders fine while Firefox sucked!
So here’s how IE7 renders:

Here’s Firefox without ClearType enabled (in XP).

Terrible, isn’t it? I thought Jeff missed out something. Even tried locating the style sheet. Then I thought, why bother? I can’t do anything with the CSS file anyway. So I stuck to my Google RSS reader instead, which renders fine.
Now, let’s see the site in Firefox after enabling ClearType.

Much better.
So how do you enable ClearType? Right-click on an empty space in your desktop and click “Properties”.

Then select the “Appearance” tab, and click on “Effects”.

On the dropdownlist under “Use the following method to smooth edges of screen fonts”, select “ClearType”

And you’re done!

