Managing complexity in Blueprints

Sorry for the thread necro, but I was about to post this exact question (when to use macros vs. functions - in a best practices sense). There has been some concern on our team over some cyclical dependency/constant recompilation issues with blueprints, and both macro libraries and function libraries have been brought up as culprits. I’d love to get some official guidance on the benefits/pitfalls of heavy usage of macros and functions. Is there anything we should watch out for? How much is too much? etc.

Thanks!