This article discusses common patterns in Infrastructure as Code (IaC) based on Terraform and Terragrunt examples and summarizes the design principle underlying good architecture. It presents these patterns in an abstract way, emphasizing that they apply to other popular IaC tools and platforms like Pulumi, AWS CDK, CloudFormation, Terraform Cloud, Atlantis, Spacelift, and Terraform Cloud alternatives. The main concepts include separating the process of IaC into development and deployment phases, separating cloud architecture components, using modularization and configuration inheritance to DRY up IaC code, and choosing between mono-repo and multi-repo architectures.