For consolidations, you want to save money -- so you should keep these things in mind:
1. Only consolidate at times when fees are very low.
2. Try to consolidate with large numbers of utxos (unspents), not small numbers. I'd say around 10 is the minimum for a consolidation.
3. Avoid consolidating when the amount in fees per utxo are a very significant portion of the amount consolidated. Don't consolidate a $5 output if you lose $4.99 on that output in fees for consolidating it.
For fan-outs you want to avoid chaining relay limitations:
1. Only do fan-outs if you are doing more than around 20 spends per 10 minutes and you cannot do batching. You should always first try to do batching, which will deliver huge fee savings.
2. Avoid fan outs where the fan out amounts are less than 100x the fee to spend them: if fees are $15 then don't make a fan out to make a bunch of $50 outputs that you will have to spend $15 each to spend.
An additional point to consider regarding consolidations, and a suggested alternative approach:
Lately, the fees have been very high, and it seems unlikely to me that they will get much lower in the short term. Perhaps when Bitcoin Core releases full segwit support or some of the bigger players update to segwit there will be some respite. This means that consolidation transactions will be very expensive currently, and it will be uneconomic to consolidate the smallest unspents in your wallet.
However, one tool that is available to you now would be to batch multiple payments into one transaction. To that end, you'd want to collect all recipients for some period of time, e.g. five minutes and then send a single transaction to pay all of them.
Batching would have three positive effects:
- Overall fees would be much lower as the payments share the cost of transaction inputs, the transaction overhead and change output. Harding theorized here that one could save up to 80% in fees with batching: https://bitcointechtalk.com/saving-up-to-80-on-bitcoin-transaction-fees-by-batching-payments-4147ab7009fb
- By issuing each payment as a separate transaction, you always create a new change output that comes back to your wallet and needs to be spent in the future. By batching, you'd only create a single change output for all the payments in the transaction. This should help reducing the number of unspents in your wallet and save future fees.
- By batching payments, you would use fewer unspents in the inputs, which should let you run out of high-value unspents less often, as less of your money is stuck in an unconfirmed state.
The disadvantage would be that the recipients would have to wait a few minutes to first see the payment.