I use this for many of my conference presentations, and I've used it for published papers as well as my dissertation.<p>I love that I can build up a diagram from specific constructs using macros. For instance, if I'm expressing a lot of linked lists, I can define a single macro for how I want to express "route the next pointer from the previous element around this element to the following element by arcing over this element", and do that consistently throughout the document.<p>I love that I can easily express "draw a line from 30° above the axis on this object to 150° around the axis on this object", and TikZ will connect those in a smooth way no matter where the objects are placed.<p>I love that I can express "create a point at the intersection of this line and this curve, and let me reference that point by name later".<p>It's a programming language, and a powerful one. I recommend it for any non-trivial diagramming or schematic task.<p>All that said, for cases where you need to express semantics and not worry as much about how the result looks, and you want the simplest possible way to express "connect a to b to c, and b to d, and d to c and back", and not worry about <i>where</i> the nodes are placed, I recommend graphviz. Graphviz is great for "let me dump the structure of this program's data structures out as text and turn it into a diagram". The biggest distinguishing factor between graphviz and TikZ, for me, is node placement and style: if you care how it looks and where nodes are placed, use TikZ; if you don't, use graphviz.