When building and maintaining Puppet code bases, it is a good idea to implement the roles and profiles pattern. It makes you define roles to cover all of your machine use cases. The roles mix and match profile classes, which are basically collectors of classes from custom and open source modules that manage actual resources.
When setting up your first large Puppet installation, it is a good idea to adhere to the pattern from day one, because it will allow you to scale your manifests without getting tangled up in complicated structures.
Deployment of Puppet code is managed via r10k, where Git branch names reflect your Puppet code quality. Using Puppetfile allows you to separate your own Puppet code development from upstream module development.
This concludes our tour of Puppet Essentials. We have covered quite some ground, but as you can imagine, we barely scratched the...