Puppet Installations best practices indicate 3 tiers of modules for most implementations: Role, Profile, and Application Modules
Role represent a business function and define what technologies are use to fulfill that function.
Profile represent the implementation of a given technology to provide any services required by a node. Parameterization can be performed at this level, with parameter assignments coming in via the class invocation or via Hieradata/Node Classifier.
Application modules are product and/or service-specific implementations that are necessarily generic and do not contain any company specific configuration details. These modules are often public modules that are written by 3rd parties and are riginally sourced from
public repositories such as Github.