I found that many exchanges/custodial wallets (I've tested Kraken and CashApp) charge fees or imbalanced exchange rates for converting fiat into crypto and sending crypto to another address (often using a bulk transaction exchanging money between the exchange's wallet), so I wouldn't say you avoid transaction fees that way (they may or may not be reduced). I ended up using them anyway because it's easier to purchase crypto as a number on an exchange than to have it sent to your personal address.