If you've followed any of my guides before, you'll know that I often include snippets of Python code to help automate certain tasks. My experience with sharing these - especially with people new to Blender - is that it's not a very user friendly experience.
Some users run the scripts directly in the Python terminal, some users load them into the Text Editor and execute them there, and some people even create custom add-ons to aid with key-binding.
In this guide, we're going to be throwing out all of those solutions. Introducing: MacroMan!
What is MacroMan?
MacroMan is a Blender add-on I've developed just for Patrons to allow easy installing, executing and key-binding of custom macros without any hassle. It earned the name because I was listening to the Village People when I wrote it.
How do I get it?
Start by clicking here to download the ZIP file - you don't need to extract/open it, just save it somewhere on your PC.
Open up Blender and open your add-on settings. (Edit → Preferences → Add-ons). In the top-right, click the Install button, and then locate the ZIP file you just downloaded.

If everything went as expected, you should now be able to search for MacroMan in the list; be sure to check the add-on is enabled!

Installing Macros (Quick Method)
The quickest way to install a macro is to open the Text Editor panel in Blender, click New, paste in the macro, and then hit Register Macro.

That's it! It was that easy. Be sure to unlink the new text file we just created in Blender so it doesn't stick around in your .blend file. Just hit the X at the top to do that.

Binding Macros
Installing a macro is easy, but what's the use if we can't access them? MacroMan makes it easy to access our macros by exposing them to Blenders keybinding system.
Open up your Keymap settings (Edit → Preferences → Keymap).

Now choose the section which you want the macro to be accessible. If you're unsure, choose the Window category so that the binding is accessible everywhere.
Expand the category, scroll to the bottom and click the Add New button. A new keybinding entry will be added above, expand it.

In the identifier box - which will say none by default - paste in the ID of your macro with the macro. prefix. If your macro ID is example_macro, then you will put macro.example_macro

Configure a key-binding of your preference using the given controls, and then you're done! Go ahead and try out your key-binding to operate your new macro.
Creating/Editing/Deleting Macros
Managing your macros is actually quite simple, although there's no interface for it directly in Blender (to prevent clutter). Instead, just click the Open Macros button on the Text Editor panel, this will open up your macros folder.

Here, every macro you've registered will appear as a .py file. You can add additional .py files here (be sure to include an ID / label directive as shown in my examples), modify existing ones, or simply delete them.
Once you make any changes to the files here, be sure to hit the Reload Macros button in Blender at the top of your Text Editor panel.

Writing a Macro
In simple terms, a macro is just a snippet of Python code that has access to the Blender API. This works the same as code entered in the Python terminal or used by add-ons.
The only thing you need to include differently is a macro_id directive. I've demonstrated this in my examples, but it consists of a single comment that defines a unique ID for the macro, as shown below. The macro ID can only contain alphabetical (A-Z) characters and underscores.

As you can see, I've also included a macro_label directive. This isn't required, but it helps keep things organized in your Keymap. If you omit the label directive, your macro will be "Unnamed User Macro".
I'm not going to branch off into a long-winded tutorial on Python and the Blender API, as that stretches far beyond the scope of this guide, but here's a super helpful tip: enable Python Tooltips in your Blender settings.

If you hover over any part of the UI in Blender now, the tooltip will include information for the API call behind the button/component.
For example, if we look at the Add → Mesh → Plane operator, hovering over it now shows us that the API call is bpy.ops.mesh.primitive_plane_add()

Let's go ahead and throw that into a macro, remembering to include an ID directive as explained above.

If we register this as a macro, bind it to a key and then hit that key, we get a nice plane appear in the middle of the 3D viewport.

Naturally, this is a useless example, because you could just keybind that action directly without making a macro. But with the scripting capabilities of Python and the full Blender API at our fingertips, we can do so much more.
Macro Examples
I use an ungodly amount of macros for Blender. If there's any combination of actions that I repeat more than once in sequence, I'll reduce it to a macro.
Below, I'm going to share a few of the macros I use frequently to demonstrate the kind of things we can do with them.
Clone Selected Material
Takes the active material on the active object and creates a duplicate of it in a new material slot.

Remove Unused Materials
Scans all selected objects and for each one removes material slots that are not actively used on the given objects mesh.

Remove Doubles
Switches to Edit Mode and runs the Merge by Distance (previously called Remove Doubles) operation, then switches back to Object Mode.

Conclusion
That's it for this guide! I hope that this add-on along with a tiny bit of insight into what can be achieved with macros (literally anything you can think of) helps motivate some more efficient workflows.
If you're looking to be as efficient as possible and can get your hands on one, I highly recommend a Stream Deck. Despite being aimed at streamers, they are insanely good for productivity freaks too!

I have mine absolutely crammed with pages of macros (set up just as I've shown in this guide) not just for Blender, but for pretty much everything!
As always, if you have any problems at all, feel free to ping me in the #champions-lounge channel of my Discord server - the channel exists just for you!