This document discusses upgradability concerns for software architecture. It identifies three levels of concerns: architectural, developer, and upgrading phase concerns. It lists common architectural styles like monolithic, n-tier, SOA, microservices, and SaaS. It also lists common "ilities" or quality attributes for software like adaptability, agility, and upgradability. The document then discusses strategies for upgrading different parts of the software like components, services, platform services, code behind, libraries, and user interfaces. It emphasizes techniques like refactoring, dependency injection, separating files and classes. It also cautions against modifying external libraries and to wrap them instead. Finally, it provides examples of referral projects that demonstrate upgrad