Solve the actual problem, not the illusion

Have you ever finished a software project, only to find that the user really needed something simpler or even totally different? Ever solved your user’s software problem with an application only to find that it didn’t solve the big picture problem?

Are you solving the actual problem?

The one with the Excel report

There’s this project where my user wanted a consolidated report from one of the web pages in an existing web application. He just wanted to be able to have one more option from a dropdownlist, and he’d select that and be able to get the report he wants (there’s an export function to Excel).

I thought about it, and told him that it would require some effort as it affects some other parts of the application (even though it’s just one more list option). I asked further why he needed the report to have that functionality, and how he would use that exported Excel report.

It turns out that after he exported that report (once the additional change was finished), he’d use the summation function in Excel, and sum up one of the columns to get a figure. All that work just to get one number. I repeated what I understood to him, and he really just needed one number. It’s a monthly task he does, and he usually exports the entire report into an Excel file.

Due to the way the web page was structured, he had to export once for every option in that dropdownlist, then sum up the numbers in each of the exported Excel files to get that final number. Not very efficient, hence his request.

I want to emphasise this now. He doesn’t really want that extra dropdownlist option, because he would still have to do a summation. There are a lot of records and Excel has this internal 65536 row limit (pre-Office 2007), so it might not even be feasible to put all the records into one Excel file as he requested. What he really wants is a monthly sum total figure.

So I told him, I’d design a web page that specifically lets him export a report that is exactly what he needed: an Excel file with a month column and a sum total column.

If I had followed on his request as it was, I have done coding which didn’t help my user at all. He’d still have to do some calculations and manipulations with the resulting Excel file.

The one with the DataGrid columns

There’s another instance where the user asked me to do some table column width adjustments. The DataGrid displayed an HTML table that she didn’t like. She wanted me to shorten some columns and widen some columns.

And you know what? She doesn’t really want me to do all those column width changes.

What she really wanted was for all the displayed data to be on one line. Due to the column widths, the columns with more data (such as text descriptions) wrapped into 2 lines, making the HTML table longer in height. She’s still on her 800 by 600 pixel resolution screen, so scrolling up and down when there’s only like 10 records was making her cranky.

So I manipulated the table column headers instead. I broke some header text into 2 lines, thus shortening those columns. Hmm… let me show you instead. Say this is the HTML code

<table border="1" width="360">
<tr style="background-color:#eeeeee"><td>Text</td><td>Month Text</td><td>Total</td></tr>
<tr><td>This is the first description</td><td>200708</td><td>34</td></tr>
<tr><td>This is another description</td><td>200709</td><td>45</td></tr>
<tr><td>Oh my goodness, yet another description</td><td>200710</td><td>56</td></tr>
</table>

This is how it looks like
Shortening table column

What my user wanted was to lengthen the “Text” column and shorten the “Month Text” column. She believed it’d help a little if she gave more explicit instructions. What she really wanted was for all the data to be on one line, never mind the header text.

So what did I do? I forced the “Month Text” to break into 2 lines (even though it’s already broken into 2 lines by the browser) using the br tag, ending up with
Month<br />Text

With the forced break, the column “Month Text” automatically shortens, and because the table is on a fixed width, the column “Text” automatically lengthens, thus fulfilling her desired outcome.

If I had coded explicit widths into the td tags, it might not scale properly when other data is displayed. I’d also have the beginnings of a maintenance nightmare.

Afterthoughts

So what have you learnt? Sometimes, when users ask for something, they’re really looking to solve something else. What you need to do, is find out what that is, then solve the actual problem, not the illusory problem the user thinks they’re solving.