What methods/tools/tips have you found that dramatically improved your Mathematica workflow?
I have a love/hate relationship with Mathematica. It is useful no doubt, but defies my intuition at every step. I spend so much time testing whether two expressions are the same, managing complex expressions, and unpredictable changes in output expression when I change order of Integrate/Evaluate, that Mathematica stays for me a powerful but very unwieldy tool. What works in one instance (say, a comparison with PossibleZeroQ[expA - expB], or manually taking the complex conjugate with /. I -> - I) may not work the next, leaving me always wondering how I should be using syntax. This, added to difficulty in finding a coherent organization for my notebook without having to each individual cell and frequent calls to "quit kernel" when something goes wrong all kill my productivity.
If you have had these problems and moved past them, what practices do you employ to make Mathematica significantly more usable to you?