I usually use a series of examples. I try to make them as practical as possible. It helps if the readers are active and writing their own code as they read. Formal descriptions are helpful AFTER readers understand how things normally work and even then examples of actual tricky cases are necessary. Draw all examples from your shop's code base.