January 31st, 2008

Thoughts on User interfaces - Pages vs Dialogs

I am one of those people who like to keep their financial affairs in order. To help with this task I have used MS Money since about 1993. A while ago problem with Money made me decide to change to Quicken. It was then that I realized the difference between the two classes of interface you find in the software world:  broadly speaking they are dialog boxes versus pages.

Dialog boxes developed out of the character mode world where screen real estate was very limited. These days typical Windows applications have dialog boxes scattered throughout. A dialog box works by popping up over the underlying screen, and displaying relevant, context sensitive information when it is needed. Although dialog boxes work very well in some situations, they tend to be over used. Quicken (2006 version) is a very good example of this. When working with Quicken it is very easy to get into a situation where so many dialog boxes are open that you have no idea of where you are. And at that point the user interface has failed. What also shows up in Quicken is that dialog boxes do not scale. They work well when deployed on a small scale, but quickly break down when they are over used.

Although MS Money uses dialog boxes in many places, they also use pages to control many options.  Because pages are larger, you can get more on them without cramming everything in (just like printed page layout, white space is important to help make sense of everything presented.) But there is something else going on here: it turns out that the paged interface is just easier for people to use. Our brains seem to be wired that way. As evidence I offer the way the internet has caught on. I think a large part of the success of the internet is that people relate to pages much better that they do to dialog boxes.

I spent about three months reviewing Quicken before taking the plunge and changing over. Doing my homework, reading the reviews, deciding that this was the right thing to do, etc. But very soon after converting my files and using it with real data, it became apparent that a huge mistake had been made. Now I have been working with software for over 10 years, so learning a new package should not be that hard. Yet even allowing for the fact that Quicken was a new package, I was taking 2 to 3 times longer to get the same tasks done compared to MS Money. And that was after using Quicken for two months. I can only attribute the difference to the user interface. And a large part of that is the difference between over using dialog boxes and the page interface.

About six months later when Microsoft release their new version of Money that could import Quicken files I swapped back. And, finally, I can balance my loan accounts again (you simply can't do that in Quicken.). And I get my accounts done in less than half the time it too with Quicken.

(Note: In this article I am not reviewing Quicken. I am simply comparing the Quicken user interface to the one in MS Money to illustrate the difference between the two approaches. If you have been using Quicken for years, it obviously works for you.)



April 10th, 2007

Revision History

A number of people have asked for a copy of the Revision History template, so here it is. You can use it in the following manner: Either manually copy the appropriate design elements into the target application, or set up Teamstudio Design Manager to do it.. Typically this takes 2 or 3 minutes, and about 200 hours of development have been added to the application - that makes developers look really good!

Revision History was created in about 1997 or so, and has been continuously updated and improved since then. This database is both a fully working design, and can be used as a template. You can play with it to get an idea of how it works. Probably the most important feature is that is can provide a watertight audit trail to changes in a database. Old versions of documents can be in the current or an archive database. And users can view these old versions, or roll back to them if required.

While there is some reasonable documentation, I make no apology for the fact that this is a development  application - it is not a finished product. However you may find it useful as a source of ideas, or you can even use it as is, by incorporating it into your design.

LibraryRevHistory_R5_DEV.zip



April 20th, 2006

More on Corporate Directories

I have worked at a number of companies, and each time this entailed meeting lots of new people. I don't know about you, but sometime I can only remember the first or last name, and sometimes only the nickname e.g. Bob in the corner office. When I need to send an email or look up a phone number, the corporate directories often aren't very helpful.

There is a simple enhancement that can be added to corporate directories to significantly improve their usability, and that is listing people more than once, once by each name. Usually when this is proposed, I get a horrified look, but once people see it and use it, they really appreciate it.

As an example consider Robert Smith, also known as Bob. List him 3 times in the corporate directory, and the people can find him by first, last or nickname. In a small company this makes little difference, but once you are over a 1000 people, it really does make a difference. Suddenly the corporate directory becomes significantly more useful.

CorpDirNames.jpg
Note how Bob Smith appears 3 times, once for each name. That makes it really easy to find him.


This is but one example of a small improvement that adds to the "Continuous Improvement" bottom line.



April 19th, 2006

Drill Down Views in Notes

In The View Nov/Dec 2001 (page15) Damien Katz wrote a short article on a technique for "faking" response documents. (Also see his very interesting articles on the R6 formula engine rewrite and the Formula Language's dirty secret.) This "fake response docs" technique can be used to create drill down lists in Notes. A very useful example of this is a hierarchical corporate directory, showing who reports to whom, and how many direct and indirect reports people have. Use this to drill down from the CEO to the janitor, and see the complete chain of command. Typically this information is updated automatically from the HR system every day, and is a LOT easier to manage and use that the endless out of date Visio diagrams that float around organizations. Recently I posted a screen shot of this type of directory, and Scott Giesbrecht asked me to describe how to do it - so here are the details.

Response documents have $Ref field which contains the UNID of the parent document. If a view's properties are set to "Show response documents in a hierarchy", and $Ref field exists on document "A" containing the UNID of parent document "B", then the view index makes document "A" a response of document "B".

Damien's technique is to use a FakeRef field with the UNID of the intended parent, and then use the view selection formula to set (i.e. fake) $Ref on all documents to the value in the FakeRef field - just for that view. This causes the view to be built with those documents as responses to their parents.

In the sample code posted at the  end of this article, each person document has a FakeRef field called "ManagerUNID" that contains the UNID of their manager. (See Notes 1 & 2 below) The only way I have got this to work is to use the LotusScript "MakeResponse" method of the document - see the code fragment below, which is part of a loop processing all documents. The parent doc is "docManager", and the person document is "doc'. This code runs in an agent that updates the values of the ManagerUNID fields after updated data has been manually entered or imported from the HR system. (See Note 3 below)

Call doc.MakeResponse ( docManager )      'Makes the person doc a response to the manager doc.
Set item = doc.GetFirstItem ( "$Ref" )
Call doc.ReplaceItemValue ( "ManagerUNID", item )      'Creates the FakeRef field
Call doc.RemoveItem ( "$Ref" )      'Removes $Ref so the person doc is no longer a response.
Call doc.Save ( True, True )

Now that evey document has it's parent defined, we are ready to create the drill down view (the Org Chart view in the sample code). To do this we fool the view into thinking that a document has a $Ref field by adding a line to the view's selection formula:

DEFAULT $Ref := ManagerUNID ;         'ManagerUNID is the FakeRef field in the sample code

And, in Damien's words, "This is all it takes". Remember that Notes limits you to 32 levels of response documents, but this is more than adequate for corporate hierarchies.

OrgChart.jpg


When you open the sample code, go to People by... Org Chart. Then expand all. You can experiment by adding people to the hierarchy. After adding people run the "Manual Org Chart refresh" agent (Under the View button).
Click link to download file
CorporateDirectory.zip


Note 1

For a document to appear as a response in a view, the FakeRef field (ManagerUNID in this example) MUST contain the hex / binary value of the UNID, and NOT the ASCII version (i.e. @text(@documentUnid) will not work.). The original article in The View was a little unclear here. If a field contains the hex / binary value of a UNID and that field shows on a form, then the contents of the field will appears as a doclink to the parent document. To see this in action, put the $Ref field on a response document form. Then open any response document created with that form in the Notes client. Instead of the UNID of the parent doc showing, you see a doclink to that parent document.

Note 2

You are not limited to just one FakeRef field - you can have several. Each view that uses fake response documents would select the appropriate FakeRef field. This is how one document can have different parents in different views.

Note 3

Heaven is when the HR system exports it's data with canonical names. This makes it trivial to update people's managers, and add the ManagerUNID field. Unfortunately this seldom seems to be the case, so you must find some way of linking manager names from the HR system to the canonical names used by Notes. The next best is when you have unique employee ID numbers, but some HR departments treat these like social security numbers and do their best to hide them. If that happens, you need a routine that somehow uniquely identifies people so that the update agent can put the correct name in the manager field. For more thoughts on the problems of names, see When is a name not a name?.



October 30th, 2005

IBM web site not an example of "easy to use"

I often need to use the IBM web site to find information, but can be a hopeless task. Very little is where you expect to find it. Just try and find the Notes Domino fix list from the ibm.com and you will see what I mean. And the search does not respect context. For example, if I am in the Lotus part of the web site and search for a term, I am not interested in Tivoli, Websphere etc.... I just want items relating to Lotus. Yet 80-% of the items returned have nothing to do with Lotus. It is easier to use Google to search IBM than it is to use the native IBM searching!

Maybe this has something to do with this article on TechWeb..."IBM has agreed to support within its OmniFind corporate search engine Google Inc.'s desktop-search software, an indication of how the latter company is warming up to business software makers that can open the door to large corporations."



September 19th, 2005

A new way of driving application development

It hit me right between the eyes - one of those "Duh!" moments. So obvious when you read it, but it took such inspiration to write in the first place.

I am referring to the blog entry "Listening to users considered harmful?" In this article Kathy Sierra makes the point that while users can drive incremental changes to a software application, they are not capable of driving breakthrough improvements. This is because they have no way of asking for something they have never conceived of. To quote Kathy: "This is about giving them what they really DO want... but simply don't realize it because they had no way to imagine it." Go and read the article. If you are in software development this will open your eyes...