I'm pretty clear on how a Bitcoin mixer obscures transaction history, but I don't understand how an observer is not able to reasonably link the source and destination wallets simply based on the transaction sizes.
- I deposit 100 BTC into a mixing service's wallet
- Over some time the mixing service places 100 BTC into another wallet I have created.
If an observer has some interest in tracking me, they can view all wallet balances and determine which have had 100BTC placed into after my initial transfer to the mixing service. Assuming I don't use the end wallet for any other purposes, an observer simply needs to look for all wallets where about 100 BTC was deposited in them recently. This is probably a small list, and becomes even smaller as the amount to launder grows. If I wanted to launder 10000 BTC through a mixer, there are probably very few wallets that will have this amount deposited into them over such a short period.
The answer seems to be, "keep transactions small when mixing" but in a network where there is not much activity (compared to fiat currencies) it seems like tracking down laundering activity isn't very hard.