- Try to use latest version of Solidity (0.8.12 at time of writing) for compiler optimizations, features, and bugfixes
- Consider using a TwoStepOwnable implementation to mitigate the risk of unrecoverable ownership transfers due to user error
- Consider using custom errors instead of
require
statements, which can cut down on contract size and thus deploy gas cost - For token optimizations: consider inheriting from Solmate's (opinionated) token contracts over OpenZeppelin's