1. Feature branches that get merged into master via PR in GitHub
2. Sprint branch, bug fix branch, and master
3. Developers push directly to master (or if they really need a code review, push to a branch)
So far I prefer 3 the most, then 1, and I hope I never have to do 2 again. 3 is fastest, and we write a lot of Go so many of the comments I would have made on a Python PR for example aren't necessary.