My report is broken!

Leaving aside those odd occasions when the database has exploded, most of the reports from users telling me ‘my report is broken’ are for one of three main reasons:

  1. User has forgotten how the report works
  2. Incorrect data does not meet criteria
  3. Developer error in implementing the report

The anatomy of a report

Reports can be broken down into two main parts:

  1. What I want to see (the column headings you can see e.g. Snowman_Name and Snowman_Location)
  2. The basis on which what I want is selected (‘show me only snowmen with carrots for noses’ will not show you turnip-nosed snowmen)

What mostly seems to go wrong is that people forget the basis on which the data is selected. There may now be a disagreement about what constitutes a ‘new customer’ – your boss may think it means customers signed up in the last week, you might think it’s customers who have just placed their first order, whereas the actual report thinks it’s customers who signed up in the last month and are yet to place an order. What I’d like to emphasise here is that the report is not wrong. It has been given a definition of ‘new customer’ that has since been forgotten by everyone but the report. The report might now need changing, but it is not returning the wrong data, according to its instructions. I always like to emphasise that point, as people need to be able to trust that their reports will be correct, and the only way to do that is to prove that there is a logical reason for the output.

Fixing the report

As someone who spends quite a lot of her time investigating ‘broken reports’, the first thing I do is to pull the report apart and tell the user what it is actually doing in order to get them the data. Either rightly or wrongly, this is what the report has been taught to do. Nine times out of ten this provokes a discussion of what the report is being used for, and what would actually be meaningful for the report to do. It’s quite easy to forget that data has to have context and relevance in order to be information, and if you are no longer sure what a report is telling you, or have just assumed what it means, then you do not have the information you think you do.

Sometimes the report is doing what everyone thinks it is doing, but somehow, some data isn’t right e.g. you’ve indicated that there should be a fee, without specifying what the fee should be, so it isn’t calculated on the report. That kind of issue is more of a problem with the application itself – why were you allowed to make that mistake with data entry? Why was there no exception reporting? This kind of problem can be a lot harder to fix than a report.

Changing the report

Business needs change over time and it can be difficult to keep track of who needs what information and why. More than once, I’ve changed the criteria of a report, based on a complaint from the user who ostensibly owned the report, only to find that there was someone else who got the report via a forwarded email,  used it for unexpected purposes, and was now miffed that the report had changed. I still haven’t worked out the perfect solution to that particular problem. Depending on your particular organisation, it may be practical to list all the official reports and the interested parties, so that all can be consulted. In my own personal circumstances, I’ve inherited an application with hundred of reports, not all of which are used, or even known about. I’ve promised myself that one day I will get time to audit them.

It’s worth noting that you should keep track of changes made to reports – what, why and when – so that when your boss starts comparing year on year by looking at old reports, you can explain why it doesn’t look as expected. That’s not the only reason, of course, but one that I personally find useful. It also helps for those times when none of the users of the report can agree on how it should work and you find yourself endlessly tweaking. And that will happen, despite endless meeting and agreement of specifications.

Incorrect implementation

When I first started creating reports from databases, about 10 years ago, I had no real idea what I was doing and my reports were very simplistic. As I’ve learned, and my grasp of SQL has improved, I can produce more and more complex reports. But the fundamental issue remains the same – what does the user actually want from this report. It is important to get a good grasp of the terms the user is using – what exactly do they mean by ‘new customer’, where is this data found, which out of the many ‘move out date’s is the one they actually want to base the report on.  Most implementation problems are due to a misunderstanding of the requirements, so make sure that everyone is clear about definitions.

Trust your developer

As a developer, of course I’m on the side of the report, it is blindly following instructions. But I’m also on the side of the user, as I understand they need information in a timely and appropriate manner. The only real way I’ve found of making everyone happy is to stop doing what people ask for. Yes, you heard. I don’t wish to sound arrogant here but users are seldom best placed for making decisions about technical questions, or know the best way to do something. After years of re-doing reports until everyone is happy, I started just asking what they intend using the report for. It might be that instead of having Mary print out this report weekly and fax it to each member of the team, we can arrange for a personalised report to be automatically emailed out to each person by the database server. You can only make that kind of suggestion once you know the intention and use of the report.

  • Share/Bookmark
Posted in Development | Tagged , , | Leave a comment

The importance of continuity

For the last three years, I have been working on a project to bring together all the disparate systems we employ here, to simplify the task of the user and to try and ensure that when someone is off, another person can pick up the threads. Oh, the system was supposed to do much much more than this, but out of all the features I had planned, the documenting and recording of what was happening in a Case was the most important to me.

As usual, I put myself in the position of having to do the job, and I really really dislike not having enough information to hand to do a job. I don’t like not knowing what the previous person has done or agreed or been discussing. I don’t like having to wade in without the full picture, exposing myself and the company to unnecessary risk. I then put myself in the shoes of the actual customer, and decided that this stance I was taking would vastly benefit them too. No-one likes to have to explain themselves over and over and over, to different people, none of whom have the foggiest about my situation or what has been promised me.

But in order to improve people’s recording of this information, you have to provide a measurable benefit to the recorder. When you are busy, it is often difficult to make time to write down the minutiae of a discussion, and of course you will remember all the details, so what’s the point?

As a developer, I see people’s faces become stony when you start talking about ‘typing up notes’ or ‘logging calls’: “I simply don’t have time to do that.” So what I try to do is to work out how I can save them time in other places, or make it easy and natural to record more information. If you can create that email in the application, and have it save back to the notes, attached to the addressee and the case, that achieves my objective, and theirs. Little things like that can make all the difference to the perceived success of your application.

I’m in a slightly unusual position here in that I’m the systems analyst as well as the developer. I’m not just writing the code, I’m trying to change the world (for my users at least!). The two roles do conflict at times. With my user advocate hat on, I want the best from the user experience, I want the application to be a delight and to solve all the niggly interface problems that grind away at your morale (never underestimate the cost to your business of unusable or badly-written software). But the developer has a deadline, the developer has to provide all these features in an often unreasonable timescale. Functionality has to come before delight. In this crossfire, is where projects get abandoned.

  • Share/Bookmark
Posted in Development | Tagged , | Leave a comment

Don’t knock MSAccess

Part of my daily work includes supporting various Microsoft Access databases, and I’ve been building things with MSAccess for about 11 years now.  However, I’ve learned not to mention Access when talking to other developers, as it gets one roundly mocked and, often, sneered at. It seems that ‘real’ developers view Access as a ‘toy’, or worse, a force of evil that allows users to create nightmarish applications that ‘real’ developers then have to support.

But Access itself is not intrinsically evil, it is just a tool. Yes, I’ve seen some horrific examples of just what you can do with MSAccess. But we all make mistakes while learning; the problem really is that businesses then use these badly-designed systems to do important jobs. It is always a mistake to run mission-critical processes on some software written by your nephew as a college project. Yes, the development cost is cheap, but the maintenance cost, or cost to your business in errors, will be high.

There was some discussion at work about whether we should restrict access to Access (sorry!) to stop people being able to create databases. I’m a great believer in empowering users and letting them learn, so I don’t really agree with this approach. But, not wanting an exponential growth in support issues, my policy is that I will help but not support. If you want to learn, learning by mistakes is the best way, and the idea that I won’t bail you out if it all goes nasty hopefully will prevent managers from allowing any of these creations to become critical parts of a business process. I’m an optimist.

  • Share/Bookmark
Posted in Access | Tagged , , , , , | Leave a comment

Balance between training requirements and flexibility

I once worked on a system that fulfilled the primary objective of the business and technically let the users get the job done; but to use it, you had to have a fair degree of knowledge and skills and remember how to fill in all the boxes and which boxes were meant for each operation. Although I supported it, I always had to ask the expert user how to do various things in order to test fixes, it just wasn’t intuitive. New features had been created by just creating new fields, or new tables and letting the user fill in data. Just big shoeboxes you could put things in, really.

I’ve just read http://www.baobabhealth.org/2008/02/09/text-editors-and-electric-kettles/ and would describe this application as somewhere in between the text editor and the kettle, but combining the worst features of both. The system had a very strict idea about what should be allowed, clearly assembled from years of incoming instructions, but because it made no use of functions to manage the mountain of code, the same basic instruction could be implemented in lots of places, in lots of ways.

But the users were more or less used to the quirks: they knew that when they had a scenario that didn’t fit the hard-coding, that they could falsify data or choose incorrect choices deliberately to force difference behaviour. They made their own text editor.

I’m embroiled in a project to write an operations system for a company who need infinite flexibility in the day to day nitty gritty, but overall patterns in the broad-brush approach to service delivery. I aim to provide a templating system that is adjustable at multiple levels, and give a task-based approach to the whole thing. As a user, you will be given the list of things that absolutely must be done to perform a service, and the manager can provide simple guidance that will appear onscreen when requested, as to how a task should be done.

I’ve created a monster – it’s flexible in that you can generate workflow for anything you like, but minimises training as end users will just indicate what they have been asked to provide, and it will tell them what they need to do. But from a developer’s perspective, it’s a monster. Just creating multiple levels of templating system for workflows has been interesting. I’m now working on what happens when a user completes a task, calculating the next path and generating instructions for them to follow.

One thing I’ve learned is that when you have a complex problem, the complexity can’t really go away. If the developer doesn’t want to deal with it, they have to delegate it to the end user. If the developer is foolhardy/brave enough to want to deal with it, it’s a lot of hard work.

I always develop things from the point of view of me being the end user of it. I have limited patience and am hopeless as remembering to do things unless I have a list I can check off (thanks Things.app!) and so things that would annoy me are smoothed over, and things that would be useful to me, go in. A selfish way of designing, yes, but I think I have quite good empathy and I make the effort to try and understand all the problems from all angles before I start designing.

I think you have to be fundamentally honest, as a developer, to produce something that will actually help. If you can see something is not quite going to work, you can plaster over it quite easily; or if you can’t be bothered dealing with the complexity, you can provide a simplified solution and just hope that the users can mentally fill in the complexity for you. But if you genuinely want to help the user, and make their job easier and not just different, you have to be honest and deal with all the problems you can see. I have seen too many times where ‘simplification’ of the system has lead to horrible text editor creation, where the users have to invent their own solutions to the problems that have been ‘simplified’ away. Usually this involves spreadsheets. Ugh.

  • Share/Bookmark
Posted in Development | Leave a comment

Archaeology Group Site Refresh

I joined a non-local archaeology group last year, mainly because they had a website, and the local groups didn’t have anything I could find. Shallow, I know, but a web presence is so important to me – I like to be able to get access to information at any time of day, or when I’m out and about. If you can’t offer me a website, then I’m mostly not interested. In fact, you barely exist to me.

I was slightly disappointed to find that the information on their site was not really up to date, so it instantly lost credibility with me: if there’s one thing I dislike more than lack of data, it’s untrustworthy or stale data.

Somehow, I ended up on the committee and started poking my nose into their website – the problem wasn’t that they had nothing to say, nor that they were doing nothing worth mentioning. The problem was technology. Archaeologists aren’t, for the most part, nerds, so the problem of how to get stuff onto the site was the stumbling block.

Obviously what was needed was some kind of friendly content-management system that would allow any of the committee to make announcements, publish activities and talks and generally tell the world about the exciting things that we do.

I was already a WordPress user and was itching for an excuse to use it as a CMS. It works surprisingly well for what they wanted it to do: members login area, Events (with extra data), easy management of images etc. At some point I will get round to listing all the plugins I used – I’m still documenting it all for the archaeologists!

  • Share/Bookmark
Posted in archaeology, Web Development, wordpress | Tagged | Leave a comment

Information Overload

I love the Internet, I do, I really do, but it wears me out.

I have more RSS feeds in my feedreader than I have time to read, and I come across more every day that interest me. The Internet is absolutely fatal to anyone with wide-ranging interests: it’s so easy to overdo the information influx and become dazed and bewildered by it all. The thoughts of a billion brains is not meant to fit into one head, after all.

The trouble is, the Internet has become like a giant distributed brain with all its thoughts available to read whenever you choose. If you are interested in almost everything, then there’s so much to read, so much to think about, and it becomes really difficult to have any thought processes left to deal with everyday life.

We are so tremendously lucky to live in an age where we are getting closer and closer to having the sum of human knowledge a mouse-click away. No matter what the subject, you can find information about it. It becomes really easy to become a relentless consumer of information, retrieving snippets from all over the globe without moving from your chair. But I’m not sure that’s a healthy habit to get into. It’s very easy to become mentally exhausted just trying to absorb and process it all.

The sheer volume of information, thoughts, opinions, essays, comments etc that is out there is terrifying. I have many feeds in my RSS reader that I think I should read, either because they will help me become a better person, or will keep me up to date with technology, or just keep me posted about what’s happening in web development. I’ll confess right now – I hardly touch those feeds. I just can’t take it all in. 

 I don’t really know what the answer is – as a nerd I do have a need to attempt to keep up with what all the other nerds are up to, but at the same time, there are just too many of them, and they are all talking at once.. 

  • Share/Bookmark
Posted in thoughts | Leave a comment

Obligatory comment on X-UA-Compatible

This strikes me as a continuation of those ‘Best viewed in $browsername $version’ badges, that irritate me beyond all measure.

I will use what version and what browser I choose, to consume your content. If I choose to have the text chiselled out onto the back of a passing badger, that is *my* choice.

At the moment I’m suffering my way through an enormous web application, targetted at IE7 only (as it’s an intranet application and we are currently using IE7), but I would not dream of testing only in IE7, as I realise that time progresses (shocking, I know), and as IE crawls more and more towards standards compliance, I’m hoping that one day the playing field will be level enough for me not to have to test in n+1 browsers. Things looked fine in IE7 that looked skewiff in Safari3, which told me I’d got something wrong. I don’t want to be lied to by a browser, so being tied to IE7 forever sounds like my idea of hell.

It wouldn’t be quite so bad if IE8 went for ‘latest-version’ by default. That way, things can progress naturally. I *can* see the appeal of being able to specify IE7 mode if you have to (if you’ve hacked together something terrible in a hurry and can’t fix it before they rush out IE8 asap) to buy you a little more breathing time if it looks like trolls toenails in IE8. But we don’t want to get stuck in 2006, do we?

What saddens me most is the fact that it seems to be tearing the webdev community apart. There are some quite personal attacks going on and it’s sad to see WaSP eating itself. I’m sure it will sort itself out, we’re all adults.

I think the real problem is not necessarily the browser developers, it’s the web developers themselves. WaSP and co. are more or less a tiny minority of idealists (I’m not knocking idealism, I suffer terribly myself). Most web developers are cowboys. Yes, sweeping generalisation, but if you look at the majority of sites you get a good idea of the level of standards-awareness that there is out there. And yet, that’s not necessarily the fault of the developers either. I was consulted on a web project and mentioned accessibility. I got the response of ‘but who enforces that, do we have to do it?’ from the person commissioning the site. With attitudes like that, there is no real incentive to push for standards compliance in projects. It’s always quicker to cut corners and knock something together that displays and behaves okay in IE6 and doesn’t suck too much in IE7. Gets the job done, doesn’t it?

Have depressed myself with that, I always find it delightful to discover that some people *do* actually care about doing things properly and cleanly. I evangelise about nice clean code, use of CSS, maintainability, accessibility and basic sanity, but sometimes I feel like Scary Bag-lady haranguing passers-by.

What the web standards community *really* needs to do is to reach out a bit more, beyond the elite crowd, to the bums-on-seats level of web developer. Enthuse and fire these people with your message, get corporate penetration with the benefits of standards compliance – make it a *standard* approach to web development.

Only then, can we win the browser war.

  • Share/Bookmark
Posted in thoughts, Web Development | 1 Comment

Why User Experience Should Matter

Much has been said on this topic, by smarter people than me. I won’t attempt an educated version of the topic (as I’m not actually educated in that subject area other than by experience), I have nothing backing this rant other than an ability to empathise with end users and a burning need to Make Things Better.

No-one actually enjoys the daily grind of their job, all the piddly little repetitive actions they must complete in between the bits that keep them turning up to work each day. As a so-called systems developer, I’m in the lucky position to be able to smooth out process-wrinkles, replacing tedious manual tasks with things that the Computer can do for them. A large part of what I do is listen to users complain about their job and the tools they have to do it with. I sort the complaints out into Things I Can Help With, and Personality Issues.

I genuinely care about the user who has to wait 37 seconds for a badly-designed screen to load – I can *feel* how annoying and unproductive that is for the user. I can *understand* how much happier they would be doing their dull repetitive job if they didn’t have that extra annoyance to contend with. So I fix it.

I’m not, and never will be, a fantastic programmer. I don’t actually *want* to be, truth be told. It’s a job I’ve blundered into and feel a constant fraud as I know *genuinely* fantastic programmers. I’m too squeamish to be a doctor or similar – there are certain words I can’t even *hear*, never mind look at. So I play doctor to computer systems. That involves a certain amount of basic programming, and while I’ll never be a luminary, I get by.

I find it difficult to harden my heart against users when they complain about something that ought to be fixable. My view of IT is that we provide the means for other people to do their jobs, and where there are problems, we are the wizards that make the problems go away. We don’t provide direct financial benefits to the company – we don’t sell things and make money. Our worth lies in our ability to make the rest of the business more profitable, and part of that is keeping users happy.

Common sense, and several surveys, have shown that happy users are more productive. I’m generally happier when my computer doesn’t crash several times a day. Even if the problem is more low-grade than that e.g. an application freezing a few times a day and having to be restarted, it still has an impact on how a user feels about doing their job. Yes, it’s easy to restart an application, or reboot the computer, or remember that the printer can only print one copy of a document so you need to click print as many times as you want documents. Individually incidents like these are small and the symptoms are easily treated, but while the underlying cause isn’t addressed, the user feels like they are never going to get better.

I appreciate that IT problems are complicated and may involve a fair amount of trial and error to resolve them, and it may be that the solution to one problem is the cause of another. But that’s why they pay us more than the man who puts the paper in the photocopier – we are paid for our knowledge and experience at solving these problems. Otherwise, it could just as well be an office junior answering the phone and saying ‘just log off and log back on again’. Same result, but much cheaper.

At the end of the day, the IT infrastructure exists to allow the users to make money for the business. Therefore if user experience doesn’t matter to you, you shouldn’t work in IT. Go do something else instead and content yourself with reading BOFH.

  • Share/Bookmark
Posted in Development | Tagged , | 2 Comments

Outlook nagging reminders

For several weeks now, Outlook has persisted in reminded me about reminders I have already dismissed and I kept dismissing them only to be reminded again. I finally got annoyed enough to do something about it.

Close Outlook
Start/Run
Type “outlook /cleanreminders” (without the quotes)

This doesn’t always cure it but it sure helped me.

  • Share/Bookmark
Posted in tips | 1 Comment

Inexcusable Ignorance

I realised the other day, as I professed ignorance to the whereabouts of Edmonton, that there is seldom an excuse for ignorance these days, if you have any kind of Internet connection. A few moments with the web browser of my choice and not only would I know where it was but I could also learn about its history, town flower, principle attractions, grazing rights and almost anything else I could care to learn. Including a reasonable journey plan should I wish to see for myself. My ignorance was my own fault and the fact I did nothing to remedy this leaves me vaguely guilty.

My forebears would have swooned at the information available for the mere effort of searching. It’s not even as if you have to actually perform the search yourself- typing a few choice words in a box does not involve effort – it’s all done with computers these days you know.

I often feel, at work, that I’m mocked slightly for my keenness to get to the bottom of a problem, to find out what the cause is and squish it once and for all. I flex my google-fu at the slightest provocation in order to find out what exactly an annoying error message means; instead of telling the user to close the application and open it again.

There is just no excuse for being ignorant of things these days. Not that you have to remember everything – I outsource most of my memory to Google these days. I’m always reminded of the wonderful Feynman anecdote ‘map of the cat’ where he is incredulous that biology students bother to memorise the internal structure of a cat when it can be looked up in moments. I totally understand that sentiment, and generally feel it’s more important to get the gist of something rather than remember every little detail (unless you’re the surgeon performing an operation on my person, I suppose!). What I mean is, understanding is more important than being able to parrot back facts and figures. If you can’t tell me *why* something is true, I won’t be impressed when you say it is.

I will be forced to go find out where Edmonton is, it’s like a nagging toothache.

On a completely separate, but bitterly related, note, I give you How Email Works – a child’s view of the internets. Well, my inner child’s view, anyway.

  • Share/Bookmark
Posted in thoughts | 1 Comment