Upgrades are great because they fix bugs, provide security fixes, new features and make upgrading to even newer versions easier. Be aware of semantic versioning.
When to upgrade
Upgrade at patch releases, upgrade when your version is out of support (at the moment, 1.8 LTS and 1.9 are current). Also, upgrade if you have a comprehensive test suite. If you don't have one, write one.
Problems and Barriers
- Uprgrade effort and duration is hard to guess
- Will tests run?
- Will UI work?
- Confirm functionality at every point:
Order of Operations
- Read release notes
- Dependencies may break, check that
- Uninstall old version, install new version, upgrade dependencies
- Make codebase compatible
- Run and fix tests
- Check and fix UI
Don't skip over versions! You'll miss deprecation warnings and run into invalid code!