See EdwardTufte - one of the widely recognized masters of this field. See also VisualizeTheWiki. ---- I'm fiddling with this stuff at the moment. In JavaLanguage, the artifacts are 1. Packages 1. Classes * special case is interface 1. Methods * special case is constructors 1. Variables The ''types of relationships'' are 1. Containment 1. Packages contain subpackages 1. Packages contain classes 1. classes contain inner classes 1. classes contain methods 1. classes contain variables 1. Inheritance 1. classes extend/implement classes 1. methods override methods 1. variables hide variables 1. Dependency 1. variables are of type class 1. methods return type class 1. methods take parameters of type class 1. methods invoke methods * special case is invoking initializer methods 1. methods refer to variables 1. methods have stack variables of type class And that's about it, for Java. The different types of relationships are part of the problem of why visualization is awkward; they each form an important hierarchy often orthogonal to the others. You need six-dimensional space to lay it out properly. ''Either that or a way to filter what you see at any given time. One of the reasons why I like TableOrientedProgramming is that one's view of information can depend on ad-hoc queries rather than the original layout that the original programmer had in mind. Views of tables help me "visualize" patterns because I can control what they are showing me at any given time. I don't know if there is any analogous VisualQueryLanguage though.''