This document discusses applying SOLID principles to infrastructure as code. It provides an overview of roles and profiles in infrastructure as code and how they relate to design patterns like Model View Controller (MVC). It also explains the five SOLID principles - single responsibility, open/closed, Liskov substitution, interface segregation and dependency inversion - and provides examples of applying them to infrastructure code through techniques like defining types, relationships between defined types and profiles, and creating abstract/generic defined types.