Problem: How should the information be organized?
Forces:
Resulting Context: You get a form of Optional Detail On Demand for free if you let users open and close parent nodes -- if someone wants to see the children of a given node, they can, or they can ignore it. Pointer Shows Affordance is a way to indicate that a node can be opened or closed. Remembered State gives you a way to set up the node states according to how the user arranged them last time.
Notes: The Windows Explorer has brought the columnar "outline view" into common usage in desktop GUIs, and every self-respecting toolkit has one; they're great for fitting a hierarchy into a narrow space, but if you don't have that space restriction, try to use something more visually interesting, like an actual 2D drawn tree. These are much better at showing and manipulating large hierarchies than outlines are, because you don't have to stack everything together in one column, then scroll forever to get a big picture. (Doing them right is a non-trivial programming problem, unfortunately.)
Some designers have come up with pretty amazing ways of viewing very large hierarchies. Circular "fisheye" viewers, 3D rotating cylinders... [find references for these, in CHI proceedings somewhere]
Beware of using trees if the relationships among the data represent
a directed graph instead, such as with multiple inheritance in a class
diagram. It can be done, but it's not kind to the user -- they then see
one thing in several places in the hierarchy, which may be very confusing.
If it's truly a graph, draw the graph and don't oversimplify it. (The term
"graph" here refers to its mathematical meaning, in which a set of vertices
is arbitrarily interconnected via edges.)
Copyright (c) 1999 by Jenifer Tidwell. All rights reserved.