Infrastructure as Code

Manage configurations by either using containers everywhere or with configuration management systems like Puppet, Chef, CFEngine, Ansible…

Configure everything through definition files (Puppet manifests, dockerfiles…)
Use IaC as source of truth (primary documentation)
Use a VCS for everything → easily see history, revert to specific version, find bugs, collaborate…
CI/CD → actually test your configurations

Start small, try automating contents of /etc/motd (risk-free)