There is a lot that can go wrong with smart contract upgrades, and it would not make sense to list them here. 99% of the time, you should use OpenZeppelin’s upgraded plug-in tools for hardhat or truffle. But if you want a preview, this can help:
- Storage slots can clash.
- Information stored via constructors or immutable variables won’t be available in the next contract.
- Initializers need to be protected.
- Selfdestruct can prevent upgrades.
https://medium.com/@trustchain/all-you-need-to-know-about-upgradable-proxies-865704a28bc7