I’ll elaborate my earlier rule of thumb: anyone should be able to bring in a clean machine, check the sources out of the repository, issue a single command, and have a running system on their own environment.

https://martinfowler.com/articles/continuousIntegration.html

Sounds simple but so many miss this. Often through no fault of the project itself but through dependencies or version mismatches, things out of date or not installed.