Inheritance-Based Storage Layouts
Inheritance-based storage layouts rely on the compiler to order variables based on the contract inheritance tree. While convenient, this approach is extremely fragile for upgradeable contracts because adding a base contract or changing the order of inheritance can shift the entire storage layout.
This causes existing variables to move to new slots, resulting in total data corruption upon an upgrade. Professional auditors strongly discourage this pattern for any state-heavy upgradeable system.
Instead, they recommend explicit storage layouts or the use of storage libraries. This approach highlights the importance of understanding how Solidity manages memory at the compiler level.