You know what Terraform design pattern I don't see enough of?
Data modules.
Just in the way that you have read-only data blocks, in contrast to resource blocks, which provision resources β who says modules always need to provision resources either? A "data" module can be used to share configs, metadata, and other reusable information across complex, distributed architectures. For example, all of the IP addresses you'd like to trust in firewalls across all the systems you manage. You can even use them for reusing complex logic/calculations, as I did for my RFC 1918 CIDR checker (very cool; check it out; shameless plug).
It's a surprisingly underrated means of DRYing up your Terraform.