As others have said above, I use a form of English pseudocode for specification (for others to design and code), documentation (to show complex decision paths) and as part of design in rare complex cases. In very special cases, I might invent a semi-formal notation as a form of shorthand to compact the design and description and make it easier to assimilate and review.
Occasionally, I've had a module that consistently gives problems of one form or another, and which I've needed to redesign/refactor more than once. In these cases, I'll almost always use pseudocode to sort it out and keep the pseudocode as source documentation.

































