This document discusses infrastructure as software and challenges in writing software to manage infrastructure. It presents Puppet as an example of using code and software engineering practices to manage servers and applications. Key challenges discussed include modeling package repository interactions and module dependencies, testing at scale, and general difficulties in writing robust infrastructure software.