How to avoid wizards

resp01Simple said, convert them into a document. A document that is dynamically formed while the user is entering data required to proceed.

Compared to Wizards, this has several advantages: All relevant information entered is visible at any time, and by entering more information, the document expands to form out the final result that contains a representation of all the previous choices.

There is no context-switch for the user, the page may scroll but valid data never disappears.

resp02

When users change their mind, going back to a previous page is not required, they just change the option and continue, the document reforms as data is entered.

This user interface pattern is named responsive disclosure, and I am a fan of it. Sadly it’s not so commonly used, probably because of the difficulties in implementing it.

resp02bIn SharedSafe we use responsive disclosure to help users to create a Shared Folder by entering their Email Address and Password. As soon the fields look valid, a “Probe Email…” button appears.

When the user clicks on the Probe button, the button disappears and makes up room for the progress bar which represents the Probing process. When Probing is done, the progress bar disappears and shows the confirmation button.

resp03We implemented responsive disclosure in .NET Windows Forms by splitting up the form into individual user controls, each of them represent an inseparable UI block.

Blocks are associated to a task controller. These controllers decide – at any given time – whether the entered data is valid or not. Additionally, controllers can provide arbitrary data that is visible by all following blocks and controllers.

resp04The controllers are placed in a directed graph that is specific for the current input form. The graph contains inactive and  active nodes. The active nodes are the ones that are visible, all the other nodes are considered inactive. When the graph is created, a function that returns another node is attached to each node. This function calls the verification function of the controller and – if successful – decides – based on data from other active nodes – which node should be displayed next.

After each user change (we use Application.OnIdle for that), the active chain of nodes is reevaluated and user interface blocks are hidden or shown as needed.

We now use this method for a number of dialogs and I personally would like to see more applications to adapt responsive disclosure.

Imagine, how setup programs could look like.