Dustin J. Mitchell
Mozilla, Inc.
We know all about "infrastructure as code": write down what you want your infrastructure to look like in some text files, and use tools to enforce it. Then we use tools like version control, CI, and code review to keep it healthy. But code gets modified over time, with new features, contributions from new people, bug fixes, and workarounds. The result quickly becomes unmanageable: difficult to modify without unexpected side effects, hard to reason about, and increasingly failure-prone. We need to think about infrastructure at a higher level: infrastructure as software. This is a software engineering perspective, creating abstractions, designing for reusability, building and enforcing structure, meaningful testing, and a host of other well-established software engineering techniques.

This talk explores why we need to level-up our thinking, and then surveys some concrete techniques for building software, not just code, in Puppet.