It&#x27;s not like I have a lot of experience (macros are much rarer in my primary language, Scala). But it&#x27;s usually just someone doing a refactor that &quot;makes sense&quot; according to the logic of the regular language but not within the macro. A lot of it is simple, &quot;silly&quot; things like trying to extract a repeated piece of logic into a method call, only it doesn&#x27;t work because the logic uses something the macro hooks into, or just is transformed in a surprising way by the macro that makes the reasoning incorrect. To take a completely trivial real-world example, renaming a field is usually a safe operation that you can do automatically (with an IDE) without even testing, but if that field&#x27;s used in a macro then maybe it represents a key in a JSON object and you&#x27;ve just broken your web API. You notice it pretty quickly, and it&#x27;s a two-minute fix - but these kind of &quot;thousand cuts&quot; scenarios really slow development. Outright production failures are less common but I&#x27;ve seen those when test coverage was poor or other failures interacted.