+1 for master always deployable. In teams I've led, I've made it a rule to never commit to master, and sparingly commit to develop.
Features are developed in branches and merged into develop. Once we're happy with things, we tag & merge into master. (Junior dev so my approach may not be the best.)