- Semantic versions.
- Group components into reusable packages.
- Don't use git modules or other source cloning in builds, use native/platform package management.
- Access control is made much easier.
- Sign commits and tags.
- Code review either before- or after-the-fact, just do it(tm).
- Reproducible builds - strip out timestamps/random tokens/unsorted metadata.
- Create CHANGELOGs semi/automatically.
- Eliminate manual steps altogether.
- Distributed builds/build caching (distcc, ccache).
- TDD smoke tests should run automatically in dev on save with 10 seconds. Bonus points for running personal TDD sandbox on faster remote servers via rsync and trigger on file-save.
- Standardize on 1-3 languages.
- Services composed of simpler 12factor microservices, not monorepo megaservices. Deploy fuse switching, proxying, HA/redundancy, rate limiting, monitoring and performance stats collection just like macroservices.