I take an easier approach. If I'm selling something I'll replace the drive.
However, for a machine I'm giving to a friend or family member, what I wind up doing is just a format command, then a pass with cipher
SSDs are even easier. A format command zaps the keys, then I boot a Linux live CD, run hdparam to do a secure erase, or at the minimum, a blkdiscard on the entire drive, and call it done. The secure erase or the TRIM command ensures that all data on the drive is zeroed (or at least reported to the reading OS as zeroed), so there is almost no chance of recovery whatsoever. If by chance some data is recovered, it will just be encrypted stuff. If I wanted to, I could run an erase pass on the entire drive, but why shorten the drive's life when the secure erase or TRIM has pretty much ensured the drive will be clean.