Four steps and one rule. The rule is: save the note before you send anything.
TornadoSol severs the on-chain connection between the wallet you pay from and the wallet you end up holding. You put a fixed amount into a shared pool, leave it there, and later take the same amount out somewhere new. Every deposit in a pool is identical, so nothing in the withdrawal points back at yours.
Pool size and time. Everything else is detail. A withdrawal that lands ninety seconds after the matching deposit is trivially paired by timing alone, no matter how sound the proof is — see how the pool actually works. And extra hops between wallets afterwards achieve nothing: every hop is public, so a chain of five addresses is a chain of five public addresses.
Three things, in order of how often they happen: losing the note, sending an amount that is not an exact multiple of a denomination, and withdrawing too soon. The first is unrecoverable, the second gets held for review and returned, the third is silent — it costs you the privacy without any error message.
Ready? Start a mix, or read what it costs first.