Simplifying an expression is essentially a optimization problem. Except in very specific cases, optimization problems are very difficult and has the kinds of issues you're describing.
When using FullSimplify, please check that:
- The ComplexityFunction is acceptable. Mathematica judges expressions with lower LeafCount to be simpler than ones higher LeafCount. For specific purposes you may want a different metric.
- There aren't any obvious transformations that you can provide it with TransformationFunctions. If you have a some algebraic technique or trick in mind, TransformationFunctions is how you would let FullSimplify know to use it.
For examples like the one in your notebook, you might want to try Common Sub-Expression Elimination. If you search online, you can find examples of how to do that in Mathematica, including a function called Experimental`OptimizeExpression.