The notify and subscribe metaparameters are not the only ones that you can direct at classes and instances of defined types the same holds true for their siblings, before and require. These allow you to define an order for your resources relative to classes, order instances of your defined types, and even order classes among themselves.
The latter works by virtue of the chaining operator:
include firewall include loadbalancing Class['firewall'] -> Class['loadbalancing']
The effect of this code is that all resources from the firewall class will be synchronized before any resource from the loadbalancing class, and failure of any resource in the former class will prevent all resources in the latter from being synchronized.
The chaining arrow cannot just be placed in between the include statements. It works only between resource definitions...