I love GraphViz. Many are saying the layout isn't that great and there are better options, etc. etc. and I have no doubt that for some use cases, that might be true. However, GraphViz "just works" for me. Every time I build a tree-like structure, I simply open up a new .gv file and just start typing nodes connected with an arrow ("->"). I can do this without taking ANY extra time - I just type it in as I'm developing the structure. When I'm done, I have a very nice diagram. For the more complex ones I add some color or other small details, but often they are simple black and white unidirectional graphs. I keep them open while I work and they help me visually see my structures which helps me see the problem domain more accurately and write better code.