Want to write better code? Eliminate friction around best practices.
Best Practice: Error Logging
DON'T write custom error logging on an as-needed basis.
DO use a global error handler and vbWatchdog to centralize error logging.
Best Practice: Throwing Custom Errors
DON'T maintain some huge master list of custom error numbers.
DO automatically generate unique custom error numbers on the fly.
Best Practice: Version Control
DON'T manually export and import VBA code to text files.
Best Practice: Don't Repeat Yourself
DON'T copy and paste code snippets from one application to another.
DO maintain a library of code that never breaks backward compatibility.
Best Practice: Professional Installers
DON'T use a wizard-based product with lots of manual steps.
DO use a text/script-based installer creator like Inno Setup.
Investing in the Future
What do all of these things have in common?
In almost all cases, there is a relatively significant upfront investment of time to accomplish the task for the first time. For example, it probably took me a dozen or more hours to create my first installer in Inno Setup. Now, though, I can create an extremely professional installer for a new application in under five minutes.
A professional installer in less than five minutes? Now that is low-friction.
Before I switched to using Inno Setup, I used a wizard-based Microsoft product. It was impossible to recreate installers. Every installer was a little different than the last one, and there was no easy way to tell how one installer was different from another (do I need Setup-v3.exe or Setup-Final.exe or Setup-Final-New.exe?).
The Microsoft installer was faster the first time.
But Inno Setup was faster over time.
Moral of the Story
If you want to do things The Right Way™, then invest time upfront to develop a low-friction approach that you can use forever.
Make it so The Right Way is also The Easy Way.