Olá Daniel..
A melhor forma de se trabalhar em uma empresa é trabalhar no master, criando branches apenas quando a linha de trabalho for distinta ou quando se é mais complexo a implementação, realizando assim um desenvolvimento paralelo, para depois de estável integrar novamente a master e depois de integrada essa branche é excluída. O Git trabalha um pouco diferente, sendo que o recomendado aqui é criar uma branche para cada desenvolvedor, ainda não testei 100% na prática com a equipe, mas pode ser uma solução dependendo do contexto da empresa.
A tag é criada assim que o código foi entregue para homologação do cliente. A tag é uma marcação de um ponto do sistema.
O master (ou trunk) deve estar sempre o código estável, e quando digo estável me refiro ao código compilando e "sem bugs" conhecidos.
Espero ter ajudado.