The blog explores the fundamental design principles for developing upgradable smart contracts, focusing on Ethereum and EVM-based contracts. It explains the necessity for upgrading smart contracts due to reasons like bug fixes, functionality improvements, and adapting to technological or market changes. The immutable nature of blockchain data, including smart contracts, poses a challenge for upgrades. The blog introduces the concept of using proxy patterns to replace old smart contracts with new ones, allowing for upgrades without altering the deployed contract code. It discusses different proxy patterns, such as the simple proxy, transparent proxy, and UUPS (Universal Upgradable Proxy Standard), each with its own advantages and potential issues like storage and selector conflicts. The blog provides a step-by-step guide to deploying and upgrading a smart contract using the OpenZeppelin proxy patterns with tools like Hardhat, emphasizing the importance of maintaining storage variable order to prevent storage clashes. It concludes by highlighting the practical challenges and solutions encountered when working with upgradable smart contracts on test networks like Goerli.