* Good readmes. Every project is required to have a readme.md that's not boilerplate. Since every team is different, the quality of the readmes range from well-organized to stream of consciousness. But the point of the readme is that it's the very first document when on-boarding and contains instructions to set the project up, as well as git blame information so the new person can find the right person to bug for more information.
* Pair programming. There's no silver bullet for onboarding and you just need to accept the friction. Having new devs pair with experienced devs as they go through their daily workflow is the most useful way, IMHO, to get comfortable with the codebase and transmit cultural norms and values.