Here are some video tutorials on upgradeable contracts:
- OpenZeppelin workshop on UUPS proxies
- OpenZeppelin workshop on beacon proxies
- Upgrading your Smart Contracts | A Tutorial & Introduction by Patrick Collins (Transparent proxies)
The forum also has some written tutorials:
- UUPS Proxies: Tutorial (Solidity + JavaScript)
- Deploy and Manage a UUPS-Upgradeable NFT Contract
- OpenZeppelin Upgrades: Step by Step Tutorial for Hardhat (Transparent proxies)
If you are more looking for information about avoiding storage conflicts, see this doc.
The approached used in the OpenZeppelin upgradeable contracts library is to use storage gaps which involves unused variables as mentioned in the last point of the link above (and this issue aims to support this pattern in the Upgrades Plugins soon).