Until recently I've been using an open source diagram creation program called Dia. It's an adequate (if a little clunky) alternative to Microsoft Visio. You drag and drop different shaped blocks and join them together using stretchy arrows, all of which can be customised to look as you wish.
However, as a programmer, I want to lay out a set of relationships and let the software work out the best way to represent them.
Enter Graphviz, a set of open source tools for doing just that.
I used the DOT language to describe my MythTV set-up as a collection of elements connected together with wires, IR and Bluetooth. It also allows you to group similar elements together and even create subgraphs.
It really does an excellent job of laying out a readable diagram and I'm itching to find some way to use it in production.