Que estratégia de ramificação devo usar durante o desenvolvimento / manutenção de um aplicativo Web?

Estou tentando decidir a melhor estratégia de ramificação para um projeto de aplicativo da web. Aqui está o que eu criei até agora e eu gostaria muito de receber comentários e experiências.

Na minha opinião, existem duas estratégias principais de ramificação: "ramificar por versão" e "ramificar por recurso".

"Ramificar por liberação": O desenvolvimento ocorre no porta-malas. Quando o tempo para uma liberação está próximo, é feita uma ramificação para essa liberação. Esse ramo é então estabilizado / testado e, finalmente, é feita uma liberação. Após o lançamento, o ramo é mesclado novamente ao tronco, mantendo o ramo de lançamento ativo para a correção de erros. É uma correção de bug aplicada e, em seguida, é mesclada ao tronco (se o desenvolvimento no tronco não eclipsou o bug por outros meios). Novos recursos são adicionados ao tronco e não afetam o ramo de lançamento. Quando um novo tempo de lançamento se aproxima, um novo ramo de lançamento é criado a.s.o.

"Ramificar por recurso": O tronco é sempre o tronco de "produção" (o código que está ativo). As correções são confirmadas diretamente no tronco. Os recursos para a próxima versão são desenvolvidos em ramificações de recursos. Os bugs são mesclados de tempos em tempos nas ramificações de recursos. Quando chega a hora do lançamento, os ramos dos recursos são mesclados no tronco e o ciclo de vida continua.

Agora, a meu ver, a grande diferença prática entre essas duas estratégias é que "por liberação" permite a manutenção de diferentes versões de produção de seu software (quando o cliente A possui a versão 1 e o cliente B versão 1.5, o cliente é o cliente pagador caso). Por outro lado, usando a estratégia "por recurso", você pode suportar apenas a versão de produção atual (todos os clientes estão usando a versão mais recente).

Como em uma típicaaplicação web todos os clientes estão usando a mesma versão "mais recente" (já que todos acessam o mesmo servidor), presumo que a abordagem "por recurso" seja a mais usada. Isso elimina a necessidade de mesclar "através da hierarquia", digamos, quando uma correção de bug deve ser aplicada a todas as três versões.

Portanto, meu status atual é que eu deveria ir com "ramificar por recurso". Se isso importa, minha equipe não é muito qualificada.