I create infrastructure for building, shipping, and operating software. I also design software solutions to your problems.
Automation eliminates errors and boredom that follow from manual steps. Examine your processes while you go through them. Reflect and look for opportunities for automation. This applies to everyting: tests, builds, deployment, and infrastructure.
Fix inconveniences as soon as you get the chance; even if there is a known workaround. Besides annoying, they are costly during onboarding. Set aside time to fix this in your regular work planning.
Components of a system should function independently. Partial failures happen and your system needs to be resilient against this. You should periodically test these failure modes of your system.
Technological measures I like to take to attain these goals:
Once software (finally) works, it should stay that way. A software build should specify all its required inputs. Build steps should determine output; nothing else may influence the build.
Programmers should accept all the help they can get while creating and changing software. Non-trivial systems should employ the help of static analysis and powerful type systems to meet correctness and performance objectives.
It's easy to loose the big picture about your infrastrucuture. Documentation goes out of date, so ensure it can't. Make your documentation executable; then updating the documentation becomes the primary way to change things.