Puppet is an incredibly powerful tool, and part of that power is its flexibility. Flexibility often leads to a wide range of ideas on implementation. I've consulted on countless Puppet implementations and I've seen the entire spectrum ranging from bat-shit insane to picture perfect. But even the bat-shit insane implementations worked (to a point) and at some point, what seemed bat-shit to me, was picture perfect to the folks running it. As I got to understand some of the more unique implementations, I started to ask myself; if there's no clear "right" way to implement Puppet, is there a particularly effective way?
When trying to answer this question I started by looking at the teams who got it right and a pattern quickly emerged. All of those teams had a number of things in common about the way they did things that went far beyond policies and procedures. These behaviors were broadly understood by the team members, nearly universally adhered to, and were almost second nature. These habits led to more stable, maintainable, and well understood Puppet deployments. In this talk I'll share with you the behaviors I saw and how you can turn these seemingly obvious best practices into habits amongst your team members.